From ec1ccbc75eeeb2e462bd7fcd3da65a79108d3633 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Thu, 16 Oct 2025 10:21:00 +0200 Subject: [PATCH 1/3] switch to getTenderReferencedDocument analogue to getContractReferencedDocument, added DatedReference class and setters/getters for Invoice --- .../org/mustangproject/DatedReference.java | 46 +++++++++++++++++++ .../main/java/org/mustangproject/Invoice.java | 29 ++++++++++++ .../ZUGFeRD/IExportableTransaction.java | 2 +- .../mustangproject/ZUGFeRD/ZF2EdgeTest.java | 3 +- .../mustangproject/ZUGFeRD/ZF2PushTest.java | 2 + 5 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 library/src/main/java/org/mustangproject/DatedReference.java diff --git a/library/src/main/java/org/mustangproject/DatedReference.java b/library/src/main/java/org/mustangproject/DatedReference.java new file mode 100644 index 00000000..5d5ca70f --- /dev/null +++ b/library/src/main/java/org/mustangproject/DatedReference.java @@ -0,0 +1,46 @@ +package org.mustangproject; + +import org.mustangproject.ZUGFeRD.IDatedReference; + +import java.beans.BeanProperty; +import java.util.Date; + +public class DatedReference implements IDatedReference { + + protected String ID; + protected Date opDate; + + public DatedReference setDate(Date opDate) { + this.opDate = opDate; + return this; + } + + public DatedReference setID(String ID) { + this.ID = ID; + return this; + } + + public DatedReference() { + + } + + public DatedReference(String ID) { + setID(ID); + } + + public DatedReference(String ID, Date theDate) { + setID(ID); + setDate(theDate); + } + + + @Override + public String getID() { + return ID; + } + + @Override + public Date getDate() { + return opDate; + } +} diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index d1a31537..a625ec6d 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -54,6 +54,7 @@ public class Invoice implements IExportableTransaction { protected BigDecimal totalPrepaidAmount = null; protected Date detailedDeliveryDateStart = null; protected Date detailedDeliveryPeriodEnd = null; + protected IDatedReference tenderReference = null; protected ArrayList Allowances = new ArrayList<>(), Charges = new ArrayList<>(), LogisticsServiceCharges = new ArrayList<>(); @@ -144,6 +145,34 @@ public class Invoice implements IExportableTransaction { return number; } + + + @Override + /*** + * BT-17 + */ + public IDatedReference getTenderReferencedDocument() { + return tenderReference; + } + + + /*** + * BT-17 + * @param dr + * @return + */ + public Invoice setTenderReferencedDocument(DatedReference dr) { + tenderReference=dr; + return this; + } + + public Invoice setTenderReferencedDocument(String ID) { + DatedReference dr=new DatedReference(ID); + setTenderReferencedDocument(dr); + return this; + } + + public Invoice setNumber(String number) { this.number = number; return this; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java index 72b61d83..8d317b1a 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java @@ -219,7 +219,7 @@ public interface IExportableTransaction { * * @return mandatory ID, optional Date */ - default IDatedReference getTenderReference() { + default IDatedReference getTenderReferencedDocument() { return null; } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java index 3178c321..e122bfc0 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java @@ -145,7 +145,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase { } @Override - public IDatedReference getTenderReference() { + public IDatedReference getTenderReferencedDocument() { return new IDatedReference() { @Override public String getID() { @@ -159,6 +159,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase { } catch (ParseException e) { // wont happen, I promise :-) } + return null; // wont happen either } }; } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 1defb4b3..041f4a25 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -596,6 +596,7 @@ public class ZF2PushTest extends TestCase { try { SchemedID gtin = new SchemedID("0160", "2001015001325"); SchemedID gln = new SchemedID("0088", "4304171000002"); + DatedReference dr=new DatedReference("90-kl-98798-C", sdf.parse("2025-10-12")); ze.setTransaction(new Invoice().setCurrency("CHF").addNote("document level 1/2").addNote("document level 2/2").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setPaymentReference("Verwendungszweck").setDocumentName("Rechnung") .setSellerOrderReferencedDocumentID("9384").setBuyerOrderReferencedDocumentID("28934") .setDetailedDeliveryPeriod(new SimpleDateFormat("yyyyMMdd").parse(occurrenceFrom), new SimpleDateFormat("yyyyMMdd").parse(occurrenceTo)) @@ -608,6 +609,7 @@ public class ZF2PushTest extends TestCase { .addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16))) .addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16))) .addCashDiscount(new CashDiscount(new BigDecimal(2), 14)) + .setTenderReferencedDocument(dr) .setDeliveryDate(sdf.parse("2020-11-02")).setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE) .setInvoiceReferencedDocumentID("abc123").addInvoiceReferencedDocument(new ReferencedDocument("abcd1234")) ); From 180d136c7cc2a08c549e2673ee17835f30e4f113 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Thu, 16 Oct 2025 10:25:13 +0200 Subject: [PATCH 2/3] added cii read test --- .../src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java | 2 +- .../org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java index e122bfc0..740412ae 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java @@ -149,7 +149,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase { return new IDatedReference() { @Override public String getID() { - return "983-jk-787 (obsolete)"; + return "983-jk-787"; } @Override public Date getDate() { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java index b99f7108..a9c6b188 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java @@ -178,9 +178,12 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase { hasExceptions = true; } assertFalse(hasExceptions); + SimpleDateFormat sdf=new SimpleDateFormat("YYYY-mm-dd"); // Reading ZUGFeRD assertEquals("4711", invoice.getZFItems()[0].getProduct().getSellerAssignedID()); assertEquals("9384", invoice.getSellerOrderReferencedDocumentID()); + assertEquals("90-kl-98798-C", invoice.getTenderReferencedDocument().getID()); + assertEquals("2025-10-12", sdf.format(invoice.getTenderReferencedDocument().getDate())); assertEquals("sender@test.org", invoice.getSender().getEmail()); assertEquals("recipient@test.org", invoice.getRecipient().getEmail()); assertEquals("28934", invoice.getBuyerOrderReferencedDocumentID()); From 791dbce41bd6aabe85463a0818f14a2b40e2fa93 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Thu, 16 Oct 2025 10:25:33 +0200 Subject: [PATCH 3/3] removed testfile --- BT17.xml | 201 ------------------------------------------------------- 1 file changed, 201 deletions(-) delete mode 100644 BT17.xml diff --git a/BT17.xml b/BT17.xml deleted file mode 100644 index 34f518ff..00000000 --- a/BT17.xml +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended - - - - RE-20170509/505 - RECHNUNG - 380 - - 20170509 - - - - - - 1 - - - Künstlerische Gestaltung (Stunde): Einer Beispielrechnung - - - - 160.0000 - 100.0000 - - - - 1.0000 - - - - VAT - Intra-community supply - K - 0.00 - - - 1.60 - - - 1825 - 130 - - - - - - 2 - - - Bestellerweiterung für E&F Umbau - - - - 0.7900 - 1.0000 - - - - 400.0000 - - - - VAT - Intra-community supply - K - 0.00 - - - 316.00 - - - - - - 3 - - - Heiße Luft pro Liter - - - - 0.1000 - 1.0000 - - - - 200.0000 - - - - VAT - Intra-community supply - K - 0.00 - - - 20.00 - - - - - AB321 - - Bei Spiel GmbH - - 12345 - Ecke 12 - Stadthausen - DE - - - DE0815 - - - 0815 - - - - Theodor Est - - 88802 - Bahnstr. 42 - Hinterhaus - Zweiter Stock - Spielkreis - DE - - - DE999999999 - - - - - - Theodor Est - - 88802 - Bahnstr. 42 - Hinterhaus - Zweiter Stock - Spielkreis - DE - - - - - 20170507 - - - - 123 - - - - USD - - 54 - Credit Card - - DE540815 - - - - 0.00 - VAT - Intra-community supply - 337.60 - K - 0.00 - - - 14 Tage 2% Skonto, 30 Tage rein netto - - 20220228 - - DE99XX12345 - - 337.60 - 2 - - - - 337.60 - 0.00 - 0.00 - 337.60 - 0.00 - 337.60 - 0.00 - 337.60 - - - -