diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index eb3cc6cc..65a3bc63 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -48,6 +48,7 @@ public class Item implements IZUGFeRDExportableItem { protected TradeParty lineSeller; protected String deliveryNoteReferencedDocumentID = null; protected Date deliveryNoteReferencedDocumentDate = null; + protected String deliveryNoteReferencedDocumentLineID = null; //protected HashMap attributes = new HashMap<>(); /*** @@ -194,6 +195,9 @@ public class Item implements IZUGFeRDExportableItem { dn.getAsString("IssuerAssignedID") .ifPresent(this::setDeliveryNoteReferencedDocumentID); + dn.getAsString("LineID") + .ifPresent(this::setDeliveryNoteReferencedDocumentLineID); + dn.getAsNodeMap("FormattedIssueDateTime") .flatMap(fdt -> fdt.getNode("DateTimeString")) .map(XMLTools::getNodeValue) @@ -734,4 +738,15 @@ public class Item implements IZUGFeRDExportableItem { return this; } + @Override + public String getDeliveryNoteReferencedDocumentLineID() { + return deliveryNoteReferencedDocumentLineID; + } + + + public Item setDeliveryNoteReferencedDocumentLineID(String deliveryNoteReferencedDocumentLineID) { + this.deliveryNoteReferencedDocumentLineID = deliveryNoteReferencedDocumentLineID; + return this; + } + } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index 3d8ed971..542ceb7a 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -267,4 +267,14 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ return null; } + /** + * get delivery note document LineID (per Item - ZUGFeRD EXTENDED) + * rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/LineID + * + * @return the LineID of the delivery note document item + */ + default String getDeliveryNoteReferencedDocumentLineID() { + return null; + } + } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 372b2547..24b804c3 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -539,6 +539,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { if (currentItem.getDeliveryNoteReferencedDocumentID() != null && !currentItem.getDeliveryNoteReferencedDocumentID().trim().isEmpty()) { xml += ""; xml += "" + XMLTools.encodeXML(currentItem.getDeliveryNoteReferencedDocumentID()) + ""; + xml += "" + XMLTools.encodeXML(currentItem.getDeliveryNoteReferencedDocumentLineID()) + ""; if (currentItem.getDeliveryNoteReferencedDocumentDate() != null) { final SimpleDateFormat dateFormat102 = new SimpleDateFormat("yyyyMMdd"); xml += ""+XMLTools.encodeXML(dateFormat102.format(currentItem.getDeliveryNoteReferencedDocumentDate()))+""; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index 72860003..e05a8652 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -746,6 +746,10 @@ public class ZUGFeRDImporter extends ZUGFeRDInvoiceImporter { if (subnode != null) { lineItem.setDeliveryNoteReferencedDocumentID(XMLTools.getNodeValue(subnode)); } + subnode = getNodeByName(node.getChildNodes(), "LineID"); + if (subnode != null) { + lineItem.setDeliveryNoteReferencedDocumentLineID(XMLTools.getNodeValue(subnode)); + } node = getNodeByName(node.getChildNodes(), "FormattedIssueDateTime"); if (node != null) { NodeList FormattedIssueDateTimeChilds = node.getChildNodes(); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java index 427b434e..20c9ab42 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java @@ -104,6 +104,7 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { "1.0000\n" + "\n" + "deliverynote123\n" + + "deliverypos456\n" + "\n" + "20260114\n" + "\n" + @@ -288,6 +289,7 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { assertEquals(zi.getHolder(), "Bei Spiel GmbH"); assertEquals(zi.getForeignReference(), "RE-20171118/506"); assertEquals(zi.getLineItemList().get(0).getDeliveryNoteReferencedDocumentID(), "deliverynote123"); + assertEquals(zi.getLineItemList().get(0).getDeliveryNoteReferencedDocumentLineID(), "deliverypos456"); try { assertEquals(zi.getLineItemList().get(0).getDeliveryNoteReferencedDocumentDate(), new SimpleDateFormat("dd.MM.yyyy").parse("14.01.2026")); } catch (ParseException e) { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 117c5bfa..ade0ed6d 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -614,6 +614,7 @@ public class ZF2PushTest extends TestCase { 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")) .setDeliveryNoteReferencedDocumentID("deliverynote123") + .setDeliveryNoteReferencedDocumentLineID("deliverypos456") .setDeliveryNoteReferencedDocumentDate(new SimpleDateFormat("dd.MM.yyyy").parse("14.01.2026")) ) .addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16))) @@ -652,6 +653,7 @@ public class ZF2PushTest extends TestCase { assertTrue(zi.getUTF8().contains(contractID)); assertEquals(zi.importedInvoice.getZFItems()[0].getId(), "a123"); assertEquals(zi.importedInvoice.getZFItems()[0].getDeliveryNoteReferencedDocumentID(), "deliverynote123"); + assertEquals(zi.importedInvoice.getZFItems()[0].getDeliveryNoteReferencedDocumentLineID(), "deliverypos456"); try { assertEquals(zi.importedInvoice.getZFItems()[0].getDeliveryNoteReferencedDocumentDate(), new SimpleDateFormat("dd.MM.yyyy").parse("14.01.2026")); } catch (ParseException e) {