From 71d2b98702f7f695574a1353ad1c4e2ff5c6ef8c Mon Sep 17 00:00:00 2001 From: langfr Date: Sun, 21 Jul 2024 10:13:32 +0100 Subject: [PATCH] Add ApplicableProductCharacteristic (BG-32:BT-160/BT-161) and OriginTradeCountry (BT-159) to Product. --- .../main/java/org/mustangproject/Product.java | 33 +++++++++++++++++++ .../ZUGFeRD/IZUGFeRDExportableProduct.java | 9 +++++ .../ZUGFeRD/ZUGFeRD2PullProvider.java | 13 ++++++++ 3 files changed, 55 insertions(+) diff --git a/library/src/main/java/org/mustangproject/Product.java b/library/src/main/java/org/mustangproject/Product.java index 3d21f588..b90a70cd 100644 --- a/library/src/main/java/org/mustangproject/Product.java +++ b/library/src/main/java/org/mustangproject/Product.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import org.mustangproject.ZUGFeRD.IZUGFeRDExportableProduct; import java.math.BigDecimal; +import java.util.HashMap; /*** * describes a product, good or service used in an invoice item line @@ -15,6 +16,8 @@ public class Product implements IZUGFeRDExportableProduct { protected boolean isReverseCharge = false; protected boolean isIntraCommunitySupply = false; protected SchemedID globalId = null; + protected String countryOfOrigin = null; + protected HashMap attributes = null; /*** * default constructor @@ -63,6 +66,7 @@ public class Product implements IZUGFeRDExportableProduct { } + @Override public String getSellerAssignedID() { return sellerAssignedID; } @@ -77,6 +81,7 @@ public class Product implements IZUGFeRDExportableProduct { return this; } + @Override public String getBuyerAssignedID() { return buyerAssignedID; } @@ -183,4 +188,32 @@ public class Product implements IZUGFeRDExportableProduct { this.VATPercent = VATPercent; return this; } + + @Override + public String getCountryOfOrigin() { + return this.countryOfOrigin; + } + + public Product setCountryOfOrigin(String countryOfOrigin) { + this.countryOfOrigin = countryOfOrigin; + return this; + } + + @Override + public HashMap getAttributes() { + return this.attributes; + } + + public Product setAttributes(HashMap attributes) { + this.attributes = attributes; + return this; + } + + public Product addAttribute(String name, String value ) { + if ( this.attributes == null ) { + this.attributes = new HashMap<>(); + } + this.attributes.put(name, value); + return this; + } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableProduct.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableProduct.java index 3b82786e..049bb546 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableProduct.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableProduct.java @@ -21,6 +21,7 @@ package org.mustangproject.ZUGFeRD; import java.math.BigDecimal; +import java.util.HashMap; import org.mustangproject.ZUGFeRD.model.TaxCategoryCodeTypeConstants; @@ -156,4 +157,12 @@ public interface IZUGFeRDExportableProduct { } return null; } + + default String getCountryOfOrigin() { + return null; + } + + default HashMap getAttributes() { + 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 06a6ab28..c937f87a 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -34,6 +34,7 @@ import java.util.Base64; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Optional; import java.util.stream.Collectors; @@ -397,6 +398,18 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { XMLTools.encodeXML(currentItem.getProduct().getDescription()) + ""; } + if (currentItem.getProduct().getAttributes() != null) { + xml += ""; + for ( Entry entry : currentItem.getProduct().getAttributes().entrySet() ) { + xml += "" + XMLTools.encodeXML(entry.getKey()) + "" + "" + XMLTools.encodeXML(entry.getValue()) + ""; + } + xml += ""; + } + if (currentItem.getProduct().getCountryOfOrigin() != null) { + xml += "" + + XMLTools.encodeXML(currentItem.getProduct().getCountryOfOrigin()) + + ""; + } xml += "" + "";