diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 3249419d..eff70131 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -35,7 +35,6 @@ public class Item implements IZUGFeRDExportableItem { protected String id; protected String buyerOrderReferencedDocumentLineID = null; protected String buyerOrderReferencedDocumentID = null; - protected ReferencedDocument tenderReferencedDocument=null; protected Product product; protected ArrayList notes = null; protected ArrayList referencedDocuments = null; @@ -132,28 +131,7 @@ public class Item implements IZUGFeRDExportableItem { product = new Product(); } } - itemMap.getAsNodeMap("DocumentReference").ifPresent(drnm -> { - // BT-128 - ReferencedDocument rd=getTenderReferencedDocument(); - if (rd==null) { - rd=new ReferencedDocument(); - } - Node idNode=drnm.getNode("ID").get(); - if (idNode!=null) { - rd.setIssuerAssignedID(idNode.getTextContent()); - Node schemeIDAttr; - schemeIDAttr=idNode.getAttributes().getNamedItem("schemeID"); - if (schemeIDAttr!=null) { - rd.setReferenceTypeCode(schemeIDAttr.getNodeValue()); - } - } - - drnm.getAsString("DocumentTypeCode").ifPresent(rd::setTypeCode); - if (rd!=null) { - setTenderReferencedDocument(rd); - } - }); itemMap.getAsNodeMap("SpecifiedLineTradeAgreement", "SpecifiedSupplyChainTradeAgreement").ifPresent(icnm -> { icnm.getAsNodeMap("BuyerOrderReferencedDocument") @@ -645,21 +623,6 @@ public class Item implements IZUGFeRDExportableItem { return detailedDeliveryPeriodTo; } - @Override - public ReferencedDocument getTenderReferencedDocument() { - return tenderReferencedDocument; - } - - public Item setTenderReferencedDocument(ReferencedDocument idr) { - tenderReferencedDocument=idr; - return this; - } - - public Item setTenderReferencedDocument(String id) { - ReferencedDocument rd=new ReferencedDocument(id); - setTenderReferencedDocument(rd); - return this; - } public IZUGFeRDExportableItem addNotes(Collection notes) { if (notes == null) { diff --git a/library/src/main/java/org/mustangproject/ReferencedDocument.java b/library/src/main/java/org/mustangproject/ReferencedDocument.java index 01a975a2..b5eb239a 100644 --- a/library/src/main/java/org/mustangproject/ReferencedDocument.java +++ b/library/src/main/java/org/mustangproject/ReferencedDocument.java @@ -2,6 +2,7 @@ package org.mustangproject; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; + import java.util.Date; import org.mustangproject.ZUGFeRD.IReferencedDocument; @@ -40,7 +41,7 @@ public class ReferencedDocument implements IReferencedDocument { this(issuerAssingedID); this.formattedIssueDateTime = formattedIssueDateTime; } - + public ReferencedDocument(String issuerAssignedID) { this.issuerAssignedID = issuerAssignedID; } @@ -55,6 +56,7 @@ public class ReferencedDocument implements IReferencedDocument { /** * which type is the document? e.g. "916" for additional invoice related + * * @param typeCode as String, e.g. 916 */ public void setTypeCode(String typeCode) { @@ -63,6 +65,7 @@ public class ReferencedDocument implements IReferencedDocument { /** * type of the reference of this line, a UNTDID 1153 code + * * @param referenceTypeCode three uppercase character reference type code as string */ public void setReferenceTypeCode(String referenceTypeCode) { @@ -94,8 +97,7 @@ public class ReferencedDocument implements IReferencedDocument { } @Override - public Date getFormattedIssueDateTime() - { + public Date getFormattedIssueDateTime() { return formattedIssueDateTime; } @@ -104,9 +106,20 @@ public class ReferencedDocument implements IReferencedDocument { return null; } NodeMap nodes = new NodeMap(node); - return new ReferencedDocument(nodes.getAsStringOrNull("IssuerAssignedID", "ID"), + ReferencedDocument rd = new ReferencedDocument(nodes.getAsStringOrNull("IssuerAssignedID", "ID"), nodes.getAsStringOrNull("TypeCode", "DocumentTypeCode"), nodes.getAsStringOrNull("ReferenceTypeCode"), XMLTools.tryDate(nodes.getAsStringOrNull("FormattedIssueDateTime"))); + if (nodes.getAsStringOrNull("ID") != null) { + //sure sign for UBL: here ReferenceTypeCode is no element but a "schemeID" attribute to ID + Node idNode = nodes.getNode("ID").get(); + if (idNode != null) { + Node schemeIDAttr = idNode.getAttributes().getNamedItem("schemeID"); + if (schemeIDAttr != null) { + rd.setReferenceTypeCode(schemeIDAttr.getNodeValue()); + } + } + } + return rd; } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index 54873510..05f4d437 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -156,14 +156,6 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ } - /*** - * tender reference on line level BT-128 - * @return BT-17 on line level - */ - default IReferencedDocument getTenderReferencedDocument() { - return null; - } - /*** * specifies the item level delivery period (there is also one on document level), diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 218136b9..c8a4c3bd 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -607,7 +607,8 @@ public class ZF2PushTest extends TestCase { .setContractReferencedDocument(contractID) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addGlobalID(gln).setEmail("recipient@test.org").addVATID("DE4711") .setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE").setFax("++49555123456")).setAdditionalAddress("Hinterhaus 3")) - .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(16)).addGlobalID(gtin).setSellerAssignedID("4711"), price, new BigDecimal(1.0)).setId("a123").setTenderReferencedDocument(dr2).addBuyerOrderReferencedDocumentID("orderId").addBuyerOrderReferencedDocumentLineID("xxx").addReferencedLineID("xxx").addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16))).setDetailedDeliveryPeriod(sdf.parse("2020-01-13"), sdf.parse("2020-01-15"))) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(16)).addGlobalID(gtin).setSellerAssignedID("4711"), price, new BigDecimal(1.0)).setId("a123"). + addAdditionalReference(dr2).addBuyerOrderReferencedDocumentID("orderId").addBuyerOrderReferencedDocumentLineID("xxx").addReferencedLineID("xxx").addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16))).setDetailedDeliveryPeriod(sdf.parse("2020-01-13"), sdf.parse("2020-01-15"))) .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)) diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java index e946dbf1..24c9cac1 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java @@ -185,10 +185,9 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase { assertEquals("9384", invoice.getSellerOrderReferencedDocumentID()); assertEquals("90-kl-98798-C", invoice.getTenderReferencedDocument().getIssuerAssignedID()); - IReferencedDocument rd=invoice.getZFItems()[0].getTenderReferencedDocument(); - assertEquals("90-kl-98798-C1", rd.getIssuerAssignedID()); - assertEquals("AAG", rd.getReferenceTypeCode()); - assertEquals("2025-10-13", sdf.format(rd.getFormattedIssueDateTime())); + IReferencedDocument[] rd=invoice.getZFItems()[0].getAdditionalReferences(); + assertEquals("90-kl-98798-C1", rd[0].getIssuerAssignedID()); + assertEquals("AAG", rd[0].getReferenceTypeCode()); @@ -248,8 +247,8 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase { assertFalse(hasExceptions); SimpleDateFormat sdf=new SimpleDateFormat("YYYY-mm-dd"); // Reading ZUGFeRD - assertEquals("90-kl-98798-C1", invoice.getZFItems()[0].getTenderReferencedDocument().getIssuerAssignedID()); - assertEquals("AAG", invoice.getZFItems()[0].getTenderReferencedDocument().getReferenceTypeCode()); + assertEquals("90-kl-98798-C1", invoice.getZFItems()[0].getAdditionalReferences()[0].getIssuerAssignedID()); + assertEquals("AAG", invoice.getZFItems()[0].getAdditionalReferences()[0].getReferenceTypeCode()); }