Add ApplicableProductCharacteristic (BG-32:BT-160/BT-161) and OriginTradeCountry (BT-159) to Product.

This commit is contained in:
langfr
2024-07-21 10:13:32 +01:00
parent be7bded6e4
commit 71d2b98702
3 changed files with 55 additions and 0 deletions

View File

@@ -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<String, String> 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<String, String> getAttributes() {
return this.attributes;
}
public Product setAttributes(HashMap<String, String> 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;
}
}

View File

@@ -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<String, String> getAttributes() {
return null;
}
}

View File

@@ -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()) +
"</ram:Description>";
}
if (currentItem.getProduct().getAttributes() != null) {
xml += "<ram:ApplicableProductCharacteristic>";
for ( Entry<String, String> entry : currentItem.getProduct().getAttributes().entrySet() ) {
xml += "<ram:Description>" + XMLTools.encodeXML(entry.getKey()) + "</ram:Description>" + "<ram:Value>" + XMLTools.encodeXML(entry.getValue()) + "</ram:Value>";
}
xml += "</ram:ApplicableProductCharacteristic>";
}
if (currentItem.getProduct().getCountryOfOrigin() != null) {
xml += "<ram:OriginTradeCountry><ram:ID>" +
XMLTools.encodeXML(currentItem.getProduct().getCountryOfOrigin()) +
"</ram:ID></ram:OriginTradeCountry>";
}
xml += "</ram:SpecifiedTradeProduct>"
+ "<ram:SpecifiedLineTradeAgreement>";