diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index d4d417c6..2b1520ed 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -22,7 +22,8 @@ public class Item implements IZUGFeRDExportableItem { protected BigDecimal basisQuantity = BigDecimal.ONE; protected Date detailedDeliveryPeriodFrom = null, detailedDeliveryPeriodTo = null; protected String id; - protected String referencedLineID = null; + protected String buyerOrderReferencedDocumentLineID = null; + protected String buyerOrderReferencedDocumentID = null; protected Product product; protected ArrayList notes = null; protected ArrayList referencedDocuments = null; @@ -61,7 +62,8 @@ public class Item implements IZUGFeRDExportableItem { String vatPercent = null; String lineTotal = "0"; String unitCode = "0"; - String referencedLineID = null; + String buyerOrderReferencedDocumentLineID = null; + String buyerOrderReferencedDocumentID = null; ArrayList rdocs = null; ArrayList addRefs = null; @@ -150,7 +152,9 @@ public class Item implements IZUGFeRDExportableItem { for (int docIndex = 0; docIndex < docChilds.getLength(); docIndex++) { String localName = docChilds.item(docIndex).getLocalName(); if ((localName != null) && (localName.equals("LineID"))) { - referencedLineID = docChilds.item(docIndex).getTextContent(); + buyerOrderReferencedDocumentLineID = docChilds.item(docIndex).getTextContent(); + } else if ((localName != null) && (localName.equals("IssuerAssignedID"))) { + buyerOrderReferencedDocumentID = docChilds.item(docIndex).getTextContent(); } } } @@ -310,22 +314,34 @@ public class Item implements IZUGFeRDExportableItem { addAdditionalReference(rdoc); } } - addReferencedLineID( referencedLineID ); + addBuyerOrderReferencedDocumentLineID( buyerOrderReferencedDocumentLineID ); + addBuyerOrderReferencedDocumentID( buyerOrderReferencedDocumentID ); } - public Item addReferencedLineID(String s) { - referencedLineID = s; + public Item addBuyerOrderReferencedDocumentLineID(String s) { + buyerOrderReferencedDocumentLineID = s; + return this; + } + + @Deprecated(since = "2.14.0") + public Item addReferencedLineID(String s) { + return addBuyerOrderReferencedDocumentLineID(s); + } + + @Override + public String getBuyerOrderReferencedDocumentID() { + return buyerOrderReferencedDocumentID; + } + + public Item addBuyerOrderReferencedDocumentID(String s) { + buyerOrderReferencedDocumentID = s; return this; } - /*** - * BT 132 (issue https://github.com/ZUGFeRD/mustangproject/issues/247) - * @return the line ID of the order (BT132) - */ @Override public String getBuyerOrderReferencedDocumentLineID() { - return referencedLineID; + return buyerOrderReferencedDocumentLineID; } public BigDecimal getLineTotalAmount() { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index e5e25cae..be9b3906 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -53,6 +53,13 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ return null; } + /*** + * buyer order reference document id + * @return the document id (defaults to {@code null}) + */ + default String getBuyerOrderReferencedDocumentID() { + return null; + } /*** * BT 132 (issue https://github.com/ZUGFeRD/mustangproject/issues/247) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index f98674c4..e1feab67 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -448,10 +448,17 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { ""; } } - if (currentItem.getBuyerOrderReferencedDocumentLineID() != null) { - xml += " " - + "" + XMLTools.encodeXML(currentItem.getBuyerOrderReferencedDocumentLineID()) + "" - + ""; + if ((currentItem.getBuyerOrderReferencedDocumentLineID() != null) || (currentItem.getBuyerOrderReferencedDocumentID() != null)) { + xml += " "; + if (currentItem.getBuyerOrderReferencedDocumentID() != null) { + xml += "" + XMLTools.encodeXML(currentItem.getBuyerOrderReferencedDocumentID()) + + ""; + } + if (currentItem.getBuyerOrderReferencedDocumentLineID() != null) { + xml += "" + XMLTools.encodeXML(currentItem.getBuyerOrderReferencedDocumentLineID()) + + ""; + } + xml += ""; } if (!allowanceChargeStr.isEmpty()) { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java index 7dba9fdf..f7cf1c7e 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java @@ -82,7 +82,7 @@ public class UBLTest extends ResourceCase { .setSender(new TradeParty("Test company", "teststr", "55232", "teststadt", "DE").addTaxID("DE4711").addVATID("DE0815").setContact(new Contact("Hans Test", "+49123456789", "test@example.org")).addBankDetails(new BankDetails("DE12500105170648489890", "COBADEFXXX"))) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")) .setReferenceNumber("991-01484-64")//leitweg-id - .setNumber("123").addItem(new Item(new Product("Testprodukt", "", "C62", BigDecimal.ZERO), /*price*/ new BigDecimal("1.0"), /*qty*/ new BigDecimal("1.0")).addReferencedLineID("A12")); + .setNumber("123").addItem(new Item(new Product("Testprodukt", "", "C62", BigDecimal.ZERO), /*price*/ new BigDecimal("1.0"), /*qty*/ new BigDecimal("1.0")).addBuyerOrderReferencedDocumentLineID("A12")); try { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 5156950f..dd13aae7 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -454,7 +454,7 @@ 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", "", "C62", new BigDecimal(16)).addGlobalID(gtin).setSellerAssignedID("4711"), price, new BigDecimal(1.0)).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", "", "C62", new BigDecimal(16)).addGlobalID(gtin).setSellerAssignedID("4711"), price, new BigDecimal(1.0)).addBuyerOrderReferencedDocumentID("orderId").addBuyerOrderReferencedDocumentLineID("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)) @@ -483,6 +483,7 @@ public class ZF2PushTest extends TestCase { assertTrue(zi.getUTF8().contains("0088")); assertTrue(zi.getUTF8().contains(orgID)); assertTrue(zi.getUTF8().contains("ram:BuyerOrderReferencedDocument")); + assertThat(zi.getUTF8()).valueByXPath("//*[local-name()='SpecifiedLineTradeAgreement']/*[local-name()='BuyerOrderReferencedDocument']/*[local-name()='IssuerAssignedID']").asString().isEqualTo("orderId"); assertTrue(zi.getUTF8().contains(occurrenceFrom)); assertTrue(zi.getUTF8().contains(occurrenceTo)); assertTrue(zi.getUTF8().contains(contractID));