From 53c055576c4f0828d2753ce6c47ea463cd844a1d Mon Sep 17 00:00:00 2001 From: langfr Date: Fri, 6 Mar 2026 11:52:00 +0000 Subject: [PATCH] Add ability to mark an Invoice as a test invoice. --- .../main/java/org/mustangproject/Invoice.java | 11 +++++++++++ .../ZUGFeRD/CustomXMLProvider.java | 6 ------ .../ZUGFeRD/IExportableTransaction.java | 6 +++++- .../org/mustangproject/ZUGFeRD/IXMLProvider.java | 4 ---- .../ZUGFeRD/UBLDAPullProvider.java | 6 ------ .../ZUGFeRD/ZUGFeRD1PullProvider.java | 8 -------- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 16 ++++------------ .../org/mustangproject/ZUGFeRD/ZF2PushTest.java | 3 ++- 8 files changed, 22 insertions(+), 38 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index 60de0622..ee836d0c 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -39,6 +39,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonInclude(JsonInclude.Include.NON_EMPTY) public class Invoice implements IExportableTransaction { + protected boolean testIndicator; protected String documentName = null, documentCode = null, number = null, ownOrganisationFullPlaintextInfo = null, referenceNumber = null, shipToOrganisationID = null, shipToOrganisationName = null, shipToStreet = null, shipToZIP = null, shipToLocation = null, shipToCountry = null, buyerOrderReferencedDocumentID = null, buyerOrderReferencedDocumentIssueDateTime = null, ownForeignOrganisationID = null, ownOrganisationName = null, currency = null, paymentTermDescription = null; protected Date issueDate = null, dueDate = null, deliveryDate = null; protected TradeParty sender = null, recipient = null, deliveryAddress = null, payee = null, invoicer = null, invoicee = null; @@ -82,6 +83,16 @@ public class Invoice implements IExportableTransaction { setCurrency("EUR"); } + @Override + public boolean getTestIndicator() { + return testIndicator; + } + + public Invoice setTestIndicator() { + this.testIndicator = true; + return this; + } + @Override public String getDocumentName() { return documentName; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java index 45f79f2f..211b0103 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java @@ -49,12 +49,6 @@ public class CustomXMLProvider implements IXMLProvider { } - @Override - public void setTest() { - // TODO Auto-generated method stub - - } - @Override public Profile getProfile() { return profile; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java index 85eca73a..4e4166a5 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java @@ -38,7 +38,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import org.mustangproject.FileAttachment; import org.mustangproject.IncludedNote; import org.mustangproject.ReferencedDocument; -import org.mustangproject.TradeParty; import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants; /*** @@ -49,6 +48,11 @@ import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants; */ public interface IExportableTransaction { + @JsonIgnore + default boolean getTestIndicator() { + return false; + } + /** * appears in /rsm:CrossIndustryDocument/rsm:HeaderExchangedDocument/ram:Name * diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IXMLProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IXMLProvider.java index b6136f37..24cc7607 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IXMLProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IXMLProvider.java @@ -22,13 +22,9 @@ public interface IXMLProvider { public byte[] getXML(); - public void setTest(); - public void generateXML(IExportableTransaction trans); public void setProfile(Profile p); public Profile getProfile(); - - } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java index 3e39c51b..15e52edf 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/UBLDAPullProvider.java @@ -136,11 +136,6 @@ public class UBLDAPullProvider implements IXMLProvider { } - @Override - public void setTest() { - - } - @Override public void setProfile(Profile p) { profile = p; @@ -150,5 +145,4 @@ public class UBLDAPullProvider implements IXMLProvider { public Profile getProfile() { return profile; } - } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index 91901a19..dbe8b69c 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -49,14 +49,6 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider { private String paymentTermsDescription; protected Profile profile = Profiles.getByName("COMFORT", 1); - - /** - * enables the flag to indicate a test invoice in the XML structure - */ - @Override - public void setTest() { - } - @Override protected String vatFormat(BigDecimal value) { return XMLTools.nDigitFormat(value, 2); diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index d7aab617..5763fe05 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -35,7 +35,6 @@ import java.util.Date; import java.util.List; import java.util.Map.Entry; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; import org.dom4j.Document; @@ -61,14 +60,6 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { private String paymentTermsDescription; protected Profile profile = Profiles.getByName("EN16931"); - - /** - * enables the flag to indicate a test invoice in the XML structure - */ - @Override - public void setTest() { - } - protected String vatFormat(BigDecimal value) { return XMLTools.nDigitFormat(value, 2); } @@ -384,9 +375,10 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " xmlns:qdt=\"urn:un:unece:uncefact:data:standard:QualifiedDataType:100\">" + "" + "\n"; - // + " - // "+testBooleanStr+"" - // + + if (trans.getTestIndicator()) { + xml += "" + trans.getTestIndicator() + ""; + } if (getProfile() == Profiles.getByName("XRechnung")) { xml += "\n" diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index ade0ed6d..997b32cf 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -600,7 +600,7 @@ public class ZF2PushTest extends TestCase { ReferencedDocument dr1=new ReferencedDocument("90-kl-98798-C", sdf.parse("2025-10-12")); ReferencedDocument dr2=new ReferencedDocument("90-kl-98798-C1", sdf.parse("2025-10-13")); dr2.setReferenceTypeCode("AAG"); - 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") + ze.setTransaction(new Invoice().setTestIndicator().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)) .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID).setEmail("sender@test.org").setID(orgID).addVATID("DE0815")) @@ -630,6 +630,7 @@ public class ZF2PushTest extends TestCase { String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8); assertTrue(theXML.contains("