Merge pull request #855 from langfr/issue/EmptyDocumentID

Suppress empty nodes in output XML
This commit is contained in:
Jochen Staerk
2025-06-26 10:46:03 +02:00
committed by GitHub
2 changed files with 52 additions and 5 deletions

View File

@@ -600,19 +600,19 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
xml += getTradePartyAsXML(trans.getRecipient(), false, false);
xml += "</ram:BuyerTradeParty>";
if (trans.getSellerOrderReferencedDocumentID() != null) {
if (trans.getSellerOrderReferencedDocumentID() != null && !trans.getSellerOrderReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:SellerOrderReferencedDocument>"
+ "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getSellerOrderReferencedDocumentID()) + "</ram:IssuerAssignedID>"
+ "</ram:SellerOrderReferencedDocument>";
}
if (trans.getBuyerOrderReferencedDocumentID() != null) {
if (trans.getBuyerOrderReferencedDocumentID() != null && !trans.getBuyerOrderReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:BuyerOrderReferencedDocument>"
+ "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getBuyerOrderReferencedDocumentID()) + "</ram:IssuerAssignedID>"
+ "</ram:BuyerOrderReferencedDocument>";
}
if (trans.getContractReferencedDocument() != null) {
if (trans.getContractReferencedDocument() != null && !trans.getContractReferencedDocument().trim().isEmpty()) {
xml += "<ram:ContractReferencedDocument>"
+ "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getContractReferencedDocument()) + "</ram:IssuerAssignedID>"
@@ -666,7 +666,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
* "<ID>2013-51112</ID>" +
* "</DeliveryNoteReferencedDocument>"
*/
if (trans.getDespatchAdviceReferencedDocumentID() != null) {
if (trans.getDespatchAdviceReferencedDocumentID() != null && !trans.getDespatchAdviceReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:DespatchAdviceReferencedDocument>";
xml += "<ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getDespatchAdviceReferencedDocumentID()) + "</ram:IssuerAssignedID>";
xml += "</ram:DespatchAdviceReferencedDocument>";
@@ -902,7 +902,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
}
xml += "<ram:DuePayableAmount>" + currencyFormat(calc.getDuePayable()) + "</ram:DuePayableAmount>"
+ "</ram:SpecifiedTradeSettlementHeaderMonetarySummation>";
if (trans.getInvoiceReferencedDocumentID() != null) {
if (trans.getInvoiceReferencedDocumentID() != null && !trans.getInvoiceReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:InvoiceReferencedDocument>"
+ "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getInvoiceReferencedDocumentID()) + "</ram:IssuerAssignedID>";

View File

@@ -817,4 +817,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("<ram:SellerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:ContractReferencedDocument"));
assertFalse(theXML.contains("<ram:DespatchAdviceReferencedDocument"));
assertFalse(theXML.contains("<ram:InvoiceReferencedDocument"));
// effective empty strings for document id's
i.setSellerOrderReferencedDocumentID(" ")
.setBuyerOrderReferencedDocumentID(" ")
.setContractReferencedDocument(" ")
.setDespatchAdviceReferencedDocumentID(" ")
.setInvoiceReferencedDocumentID(" ");
zf2p.generateXML(i);
theXML = new String(zf2p.getXML());
assertFalse(theXML.contains("<ram:SellerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:ContractReferencedDocument"));
assertFalse(theXML.contains("<ram:DespatchAdviceReferencedDocument"));
assertFalse(theXML.contains("<ram:InvoiceReferencedDocument"));
}
}