From 41bf79cd558599362f949263cca6a328b8fd1581 Mon Sep 17 00:00:00 2001 From: langfr Date: Tue, 3 Jun 2025 12:46:11 +0100 Subject: [PATCH] Suppress pmpty nodes in output XML --- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 10 ++-- .../mustangproject/ZUGFeRD/ZF2PushTest.java | 47 +++++++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 8fe07564..13d47148 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -589,19 +589,19 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml += getTradePartyAsXML(trans.getRecipient(), false, false); xml += ""; - if (trans.getSellerOrderReferencedDocumentID() != null) { + if (trans.getSellerOrderReferencedDocumentID() != null && !trans.getSellerOrderReferencedDocumentID().trim().isEmpty()) { xml += "" + "" + XMLTools.encodeXML(trans.getSellerOrderReferencedDocumentID()) + "" + ""; } - if (trans.getBuyerOrderReferencedDocumentID() != null) { + if (trans.getBuyerOrderReferencedDocumentID() != null && !trans.getBuyerOrderReferencedDocumentID().trim().isEmpty()) { xml += "" + "" + XMLTools.encodeXML(trans.getBuyerOrderReferencedDocumentID()) + "" + ""; } - if (trans.getContractReferencedDocument() != null) { + if (trans.getContractReferencedDocument() != null && !trans.getContractReferencedDocument().trim().isEmpty()) { xml += "" + "" + XMLTools.encodeXML(trans.getContractReferencedDocument()) + "" @@ -655,7 +655,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { * "2013-51112" + * "" */ - if (trans.getDespatchAdviceReferencedDocumentID() != null) { + if (trans.getDespatchAdviceReferencedDocumentID() != null && !trans.getDespatchAdviceReferencedDocumentID().trim().isEmpty()) { xml += ""; xml += "" + XMLTools.encodeXML(trans.getDespatchAdviceReferencedDocumentID()) + ""; xml += ""; @@ -888,7 +888,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } xml += "" + currencyFormat(calc.getDuePayable()) + "" + ""; - if (trans.getInvoiceReferencedDocumentID() != null) { + if (trans.getInvoiceReferencedDocumentID() != null && !trans.getInvoiceReferencedDocumentID().trim().isEmpty()) { xml += "" + "" + XMLTools.encodeXML(trans.getInvoiceReferencedDocumentID()) + ""; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 10f28a3a..c32b1d7d 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -816,4 +816,51 @@ public class ZF2PushTest extends TestCase { } } + public void testEmptyDocumentReference() { + String orgname = "Test company"; + String number = "123"; + BigDecimal price = new BigDecimal(1.0); + BigDecimal qty = new BigDecimal(1.0); + + ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider(); + zf2p.setProfile( Profiles.getByName( "XRechnung" ) ); + + Invoice i = new Invoice().setIssueDate(new Date()).setDueDate(new Date()).setDetailedDeliveryPeriod(new Date(), new Date()).setDeliveryDate(new Date()) + .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815").addBankDetails(new BankDetails("DE88200800000970375700", "COBADEFFXXX"))) + .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0815")) + .setNumber(number) + .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty)); + + // empty strings for document id's + i.setSellerOrderReferencedDocumentID("") + .setBuyerOrderReferencedDocumentID("") + .setContractReferencedDocument("") + .setDespatchAdviceReferencedDocumentID("") + .setInvoiceReferencedDocumentID(""); + + zf2p.generateXML(i); + String theXML = new String(zf2p.getXML()); + + assertFalse(theXML.contains("