From 51ebbd8fb1a1b539440d61034b5a20d9529b3640 Mon Sep 17 00:00:00 2001 From: ean Date: Wed, 12 Feb 2025 08:30:47 +0100 Subject: [PATCH] read position accountingReference To new field ReceivableSpecifiedTradeAccountingAccount --- library/src/main/java/org/mustangproject/Item.java | 8 ++++++++ .../ZUGFeRD/IZUGFeRDExportableItem.java | 4 ++++ .../ZUGFeRD/ZF2ZInvoiceImporterTest.java | 12 ++++++++++++ 3 files changed, 24 insertions(+) diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 0688530a..456e465a 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -42,6 +42,7 @@ public class Item implements IZUGFeRDExportableItem { protected ArrayList Allowances = new ArrayList<>(); protected ArrayList Charges = new ArrayList<>(); protected List includedNotes = null; + protected String accountingReference; //protected HashMap attributes = new HashMap<>(); /*** @@ -214,6 +215,8 @@ public class Item implements IZUGFeRDExportableItem { icnm.getAllNodes("AdditionalReferencedDocument").map(ReferencedDocument::fromNode).forEach(this::addAdditionalReference); + icnm.getAsString("ReceivableSpecifiedTradeAccountingAccount").ifPresent(s -> this.accountingReference = s == null ? null : s.trim()); + icnm.getAsNodeMap("BillingSpecifiedPeriod").ifPresent(periodNode -> { Date start = periodNode.getAsNodeMap("StartDateTime").flatMap(dateTimeNode -> dateTimeNode.getNode("DateTimeString")).map(dts -> XMLTools.tryDate(dts)).orElse(null); Date end = periodNode.getAsNodeMap("EndDateTime").flatMap(dateTimeNode -> dateTimeNode.getNode("DateTimeString")).map(dts -> XMLTools.tryDate(dts)).orElse(null); @@ -538,4 +541,9 @@ public class Item implements IZUGFeRDExportableItem { public List getNotesWithSubjectCode() { return includedNotes; } + + @Override + public String getAccountingReference() { + return accountingReference; + } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index 45c210ea..6d68cdff 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -172,4 +172,8 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ default List getNotesWithSubjectCode() { return null; } + + default String getAccountingReference() { + return null; + } } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java index b0454510..f5ecb15a 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java @@ -585,4 +585,16 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase { assertEquals("0", zii.importedInvoice.getDuePayable().toPlainString()); } + + @Test + public void test() throws FileNotFoundException, XPathExpressionException, ParseException { + File inputFile = getResourceAsFile("ORDER-X_EX01_ORDER_FULL_DATA-COMFORTorder-x.xml"); + ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(); + zii.doIgnoreCalculationErrors(); + zii.setInputStream(new FileInputStream(inputFile)); + + Invoice invoice = zii.extractInvoice(); + assertEquals(3, invoice.getZFItems().length); + assertEquals("BUYER_ACCOUNTING_REF", invoice.getZFItems()[0].getAccountingReference()); + } }