From 3466f6e3db8caaba5626857c269ce50b03489f95 Mon Sep 17 00:00:00 2001 From: gundermann Date: Thu, 22 Aug 2024 10:38:03 +0200 Subject: [PATCH 1/5] changed additional references by line from String to List and implemented it on Item --- .../main/java/org/mustangproject/Item.java | 23 +++++++++++++++++++ .../ZUGFeRD/IZUGFeRDExportableItem.java | 6 ++--- .../ZUGFeRD/ZUGFeRD1PullProvider.java | 4 ++-- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 11 ++++++--- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 321b4723..0dc76b83 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -465,6 +465,29 @@ public class Item implements IZUGFeRDExportableItem { return referencedDocuments.toArray(new IReferencedDocument[0]); } + + /*** + * adds item level references along with their typecodes and issuerassignedIDs (contract ID, cost centre, ...) + * @param doc the ReferencedDocument to add + * @return fluent setter + */ + public Item addAdditionalReference(ReferencedDocument doc) { + if (referencedDocuments == null) { + referencedDocuments = new ArrayList<>(); + } + referencedDocuments.add(doc); + return this; + } + + @Override + public IReferencedDocument[] getAdditionalReferences() { + if (referencedDocuments == null) { + return null; + } + return referencedDocuments.toArray(new IReferencedDocument[0]); + } + + /*** * specify a item level delivery period * (apart from the document level delivery period, and the document level diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index f6e03242..3c20e519 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -91,10 +91,10 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ } /*** - * the ID of an additionally referenced document for this item - * @return the id as string + * allows to specify multiple references (billing information) + * @return the referenced documents */ - default String getAdditionalReferencedDocumentID() { + default IReferencedDocument[] getAdditionalReferences() { return null; } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index ba43dd94..0b028806 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -387,8 +387,8 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider { + "" + currencyFormat(lc.getItemTotalNetAmount()) + "" + ""; - if (currentItem.getAdditionalReferencedDocumentID() != null) { - xml += "" + currentItem.getAdditionalReferencedDocumentID() + "130"; + if (currentItem.getAdditionalReferences() != null) { + xml += "" + currentItem.getAdditionalReferences()[0].getIssuerAssignedID() + "130"; } xml += "" diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 64bfb738..bbadfdae 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -503,9 +503,14 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + "" + currencyFormat(lc.getItemTotalNetAmount()) + "" // currencyID=\"EUR\" + ""; - if (currentItem.getAdditionalReferencedDocumentID() != null) { - xml += "" + currentItem.getAdditionalReferencedDocumentID() + "130"; - + if (currentItem.getAdditionalReferences() != null) { + for (final IReferencedDocument currentReference : currentItem.getAdditionalReferences()) { + xml += "" + + "" + XMLTools.encodeXML(currentReference.getIssuerAssignedID()) + "" + + "130" + + "" + XMLTools.encodeXML(currentReference.getReferenceTypeCode()) + "" + + ""; + } } xml += "" + ""; From 44d63a075ee00b46ee7fb44c500cf605fe978fe2 Mon Sep 17 00:00:00 2001 From: MellowGiant Date: Thu, 22 Aug 2024 11:27:42 +0200 Subject: [PATCH 2/5] changed additional references by line from String to List and implemented it on Item --- .../main/java/org/mustangproject/Item.java | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 0dc76b83..cb1c83fa 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -26,6 +26,7 @@ public class Item implements IZUGFeRDExportableItem { protected Product product; protected ArrayList notes = null; protected ArrayList referencedDocuments = null; + protected ArrayList additionalReference = null; protected ArrayList Allowances = new ArrayList<>(), Charges = new ArrayList<>(); @@ -248,6 +249,35 @@ public class Item implements IZUGFeRDExportableItem { } } } + + if (tradeSettlementName.equals("AdditionalReferencedDocument")) { + String IssuerAssignedID = ""; + String TypeCode = ""; + String ReferenceTypeCode = ""; + + NodeList refDocChilds = tradeSettlementChilds.item(tradeSettlementChildIndex).getChildNodes(); + for (int refDocIndex = 0; refDocIndex < refDocChilds.getLength(); refDocIndex++) { + String localName = refDocChilds.item(refDocIndex).getLocalName(); + if ((localName != null) && (localName.equals("IssuerAssignedID"))) { + IssuerAssignedID = refDocChilds.item(refDocIndex).getTextContent(); + } + if ((localName != null) && (localName.equals("TypeCode"))) { + TypeCode = refDocChilds.item(refDocIndex).getTextContent(); + } + if ((localName != null) && (localName.equals("ReferenceTypeCode"))) { + ReferenceTypeCode = refDocChilds.item(refDocIndex).getTextContent(); + } + } + + ReferencedDocument rd = new ReferencedDocument(IssuerAssignedID, TypeCode, + ReferenceTypeCode); + if (rdocs == null) { + rdocs = new ArrayList<>(); + } + rdocs.add(rd); + + } + } } } @@ -472,19 +502,19 @@ public class Item implements IZUGFeRDExportableItem { * @return fluent setter */ public Item addAdditionalReference(ReferencedDocument doc) { - if (referencedDocuments == null) { - referencedDocuments = new ArrayList<>(); + if (additionalReference == null) { + additionalReference = new ArrayList<>(); } - referencedDocuments.add(doc); + additionalReference.add(doc); return this; } @Override public IReferencedDocument[] getAdditionalReferences() { - if (referencedDocuments == null) { + if (additionalReference == null) { return null; } - return referencedDocuments.toArray(new IReferencedDocument[0]); + return additionalReference.toArray(new IReferencedDocument[0]); } From 40f35d8764e3286060fb142e1f2ae59ffc9ff806 Mon Sep 17 00:00:00 2001 From: MellowGiant Date: Thu, 22 Aug 2024 11:40:22 +0200 Subject: [PATCH 3/5] changed additional references by line from String to List and implemented it on Item --- library/src/main/java/org/mustangproject/Item.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index cb1c83fa..11d78f2f 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -64,6 +64,7 @@ public class Item implements IZUGFeRDExportableItem { String referencedLineID = null; ArrayList rdocs = null; + ArrayList additionalReferences = null; // nodes.item(i).getTextContent())) { @@ -271,10 +272,10 @@ public class Item implements IZUGFeRDExportableItem { ReferencedDocument rd = new ReferencedDocument(IssuerAssignedID, TypeCode, ReferenceTypeCode); - if (rdocs == null) { - rdocs = new ArrayList<>(); + if (additionalReferences == null) { + additionalReferences = new ArrayList<>(); } - rdocs.add(rd); + additionalReferences.add(rd); } @@ -304,6 +305,11 @@ public class Item implements IZUGFeRDExportableItem { addReferencedDocument(rdoc); } } + if (additionalReferences != null) { + for (ReferencedDocument rdoc : additionalReferences) { + addAdditionalReference(rdoc); + } + } addReferencedLineID( referencedLineID ); } From a69b1ea60d8e405681a9a242d61660c5061288a6 Mon Sep 17 00:00:00 2001 From: MellowGiant Date: Tue, 27 Aug 2024 15:28:18 +0200 Subject: [PATCH 4/5] getAdditionalReferencedDocumentID() reinserted and marked as deprecated --- .../mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java | 10 ++++++++++ .../mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java | 3 ++- .../mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index 3c20e519..e5e25cae 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -90,6 +90,16 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ return BigDecimal.ONE.setScale(4); } + /*** + * the ID of an additionally referenced document for this item + * @deprecated use {@link #getAdditionalReferences()} instead. + * @return the id as string + */ + @Deprecated + default String getAdditionalReferencedDocumentID() { + return null; + } + /*** * allows to specify multiple references (billing information) * @return the referenced documents diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index 0b028806..b98abebc 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -389,7 +389,8 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider { + ""; if (currentItem.getAdditionalReferences() != null) { xml += "" + currentItem.getAdditionalReferences()[0].getIssuerAssignedID() + "130"; - + } else if (currentItem.getAdditionalReferencedDocumentID() != null) { + xml += "" + currentItem.getAdditionalReferencedDocumentID() + "130"; } xml += "" + ""; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index bbadfdae..eaefecaa 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -511,6 +511,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { "" + XMLTools.encodeXML(currentReference.getReferenceTypeCode()) + "" + ""; } + } else if (currentItem.getAdditionalReferencedDocumentID() != null) { + xml += "" + currentItem.getAdditionalReferencedDocumentID() + "130"; } xml += "" + ""; From 136c8a8865795adf47195cff8b5de539f3a8b1ea Mon Sep 17 00:00:00 2001 From: MellowGiant Date: Tue, 27 Aug 2024 15:33:19 +0200 Subject: [PATCH 5/5] variable name changed from "additionalReferences" to "addRefs" to avoid confusion with "additionalReference" --- library/src/main/java/org/mustangproject/Item.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 11d78f2f..d4d417c6 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -64,7 +64,7 @@ public class Item implements IZUGFeRDExportableItem { String referencedLineID = null; ArrayList rdocs = null; - ArrayList additionalReferences = null; + ArrayList addRefs = null; // nodes.item(i).getTextContent())) { @@ -272,10 +272,10 @@ public class Item implements IZUGFeRDExportableItem { ReferencedDocument rd = new ReferencedDocument(IssuerAssignedID, TypeCode, ReferenceTypeCode); - if (additionalReferences == null) { - additionalReferences = new ArrayList<>(); + if (addRefs == null) { + addRefs = new ArrayList<>(); } - additionalReferences.add(rd); + addRefs.add(rd); } @@ -305,8 +305,8 @@ public class Item implements IZUGFeRDExportableItem { addReferencedDocument(rdoc); } } - if (additionalReferences != null) { - for (ReferencedDocument rdoc : additionalReferences) { + if (addRefs != null) { + for (ReferencedDocument rdoc : addRefs) { addAdditionalReference(rdoc); } }