From 0cde732e4327cfb3d1ef8ac53f039991a79a7225 Mon Sep 17 00:00:00 2001 From: Alexander Berndt Date: Fri, 22 May 2020 15:16:56 +0200 Subject: [PATCH 1/5] Updated ZUGFeRDImporter.java -> getDocumentCode() to fit ZUGFeRD 2.1 Added Test --- .../mustangproject/ZUGFeRD/ZUGFeRDImporter.java | 15 ++++++++++++++- .../java/org/mustangproject/ZUGFeRD/ZF2Test.java | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index fa5a4bfd..e9060de1 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -259,7 +259,16 @@ public class ZUGFeRDImporter { * @return the document code */ public String getDocumentCode() { - return extractString("//HeaderExchangedDocument/TypeCode"); + try { + if (getVersion() == 1) { + return extractString("//HeaderExchangedDocument/TypeCode"); + } else { + return extractString("//ExchangedDocument/TypeCode"); + } + } catch (Exception e) { + e.printStackTrace(); + return ""; + } } @@ -458,6 +467,10 @@ public class ZUGFeRDImporter { return s.hasNext() ? s.next() : ""; } + /** + * returns an instance of PostalTradeAddress for SellerTradeParty section + * @return an instance of PostalTradeAddress + */ public PostalTradeAddress getSellerTradePartyAddress() { NodeList nl = null; diff --git a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java index 2f2b85ee..6dd1eff1 100644 --- a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java +++ b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java @@ -207,7 +207,7 @@ public class ZF2Test extends MustangReaderTestCase { // Reading ZUGFeRD assertEquals(zi.getAmount(), "571.04"); assertEquals(zi.getHolder(), getOwnOrganisationName()); - + assertEquals(zi.getDocumentCode(),"380"); assertEquals(zi.getAmount(), "571.04"); assertEquals(zi.getBIC(), getTradeSettlementPayment()[0].getOwnBIC()); assertEquals(zi.getIBAN(),getTradeSettlementPayment()[0].getOwnIBAN()); From 566ead3c67901ac6a0f28e90236c0c856cd37287 Mon Sep 17 00:00:00 2001 From: Alexander Berndt Date: Fri, 22 May 2020 15:25:18 +0200 Subject: [PATCH 2/5] Updated ZUGFeRDImporter.java -> getReference() to fit ZUGFeRD 1.0 Added Test --- .../org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java | 11 ++++++++++- .../test/java/org/mustangproject/ZUGFeRD/ZF2Test.java | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index e9060de1..5bfa88af 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -276,7 +276,16 @@ public class ZUGFeRDImporter { * @return the referred document */ public String getReference() { - return extractString("//ApplicableHeaderTradeAgreement/BuyerReference"); + try { + if (getVersion() == 1) { + return extractString("//ApplicableSupplyChainTradeAgreement/BuyerReference"); + } else { + return extractString("//ApplicableHeaderTradeAgreement/BuyerReference"); + } + } catch (Exception e) { + e.printStackTrace(); + return ""; + } } diff --git a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java index 6dd1eff1..12700b07 100644 --- a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java +++ b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java @@ -208,6 +208,7 @@ public class ZF2Test extends MustangReaderTestCase { assertEquals(zi.getAmount(), "571.04"); assertEquals(zi.getHolder(), getOwnOrganisationName()); assertEquals(zi.getDocumentCode(),"380"); + assertEquals(zi.getReference(),"AB321"); assertEquals(zi.getAmount(), "571.04"); assertEquals(zi.getBIC(), getTradeSettlementPayment()[0].getOwnBIC()); assertEquals(zi.getIBAN(),getTradeSettlementPayment()[0].getOwnIBAN()); From 02a6958865c2583f841e54ddfaeac0e93df4ee2b Mon Sep 17 00:00:00 2001 From: Alexander Berndt Date: Thu, 28 May 2020 15:03:27 +0200 Subject: [PATCH 3/5] Updated ZUGFeRDImporter.java -> created getLineItemList() for reading LineItems from ZUGFeRD XML Added Test Added fields Item.java -> tax, grossPrice, lineTotalAmount, id, sellerAssignedID and buyerAssignedID, all with Getter&Setter Added field in VATAmount.java -> applicablePercent with Getter&Setter --- .../java/org/mustangproject/ZUGFeRD/Item.java | 59 +++++- .../org/mustangproject/ZUGFeRD/VATAmount.java | 10 +- .../ZUGFeRD/ZUGFeRDImporter.java | 197 +++++++++++++++++- .../org/mustangproject/ZUGFeRD/ZF2Test.java | 16 +- 4 files changed, 275 insertions(+), 7 deletions(-) diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java index b8c2285c..0d254d78 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java @@ -7,7 +7,8 @@ import org.mustangproject.ZUGFeRD.IZUGFeRDExportableProduct; import java.math.BigDecimal; public class Item implements IZUGFeRDExportableItem { - protected BigDecimal price, quantity; + protected BigDecimal price, quantity, tax, grossPrice, lineTotalAmount; + protected String id, sellerAssignedID, buyerAssignedID; protected Product product; public Item(Product product, BigDecimal price, BigDecimal quantity) { @@ -16,6 +17,60 @@ public class Item implements IZUGFeRDExportableItem { this.product = product; } + public BigDecimal getLineTotalAmount() { + return lineTotalAmount; + } + + public Item setLineTotalAmount(BigDecimal lineTotalAmount) { + this.lineTotalAmount = lineTotalAmount; + return this; + } + + public String getSellerAssignedID() { + return sellerAssignedID; + } + + public Item setSellerAssignedID(String sellerAssignedID) { + this.sellerAssignedID = sellerAssignedID; + return this; + } + + public String getBuyerAssignedID() { + return buyerAssignedID; + } + + public Item setBuyerAssignedID(String buyerAssignedID) { + this.buyerAssignedID = buyerAssignedID; + return this; + } + + public BigDecimal getGrossPrice() { + return grossPrice; + } + + public Item setGrossPrice(BigDecimal grossPrice) { + this.grossPrice = grossPrice; + return this; + } + + public BigDecimal getTax() { + return tax; + } + + public Item setTax(BigDecimal tax) { + this.tax = tax; + return this; + } + + public Item setId(String id) { + this.id = id; + return this; + } + + public String getId() { + return id; + } + @Override public BigDecimal getPrice() { return price; @@ -26,6 +81,8 @@ public class Item implements IZUGFeRDExportableItem { return this; } + + @Override public BigDecimal getQuantity() { return quantity; diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/VATAmount.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/VATAmount.java index 3ba0acc1..33775e9b 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/VATAmount.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/VATAmount.java @@ -38,10 +38,18 @@ public class VATAmount { this.categoryCode = categoryCode; } - BigDecimal basis, calculated; + BigDecimal basis, calculated, applicablePercent; String categoryCode; + public BigDecimal getApplicablePercent() { + return applicablePercent; + } + + public void setApplicablePercent(BigDecimal applicablePercent) { + this.applicablePercent = applicablePercent; + } + public BigDecimal getBasis() { return basis; } diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index 5bfa88af..63180e77 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -17,13 +17,11 @@ package org.mustangproject.ZUGFeRD; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Scanner; +import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; @@ -534,6 +532,165 @@ public class ZUGFeRDImporter { return address; } + + /** + * returns a list of LineItems + * @return a List of LineItem instances + */ + public List getLineItemList() { + List nodeList = getLineItemNodes(); + List lineItemList = new ArrayList<>(); + + for (Node n: nodeList + ) { + Item lineItem = new Item(null, null, null); + lineItem.setProduct(new Product(null,null,null,null)); + + NodeList nl = n.getChildNodes(); + for (int i = 0; i < nl.getLength(); i++) { + Node nn = nl.item(i); + Node node = null; + switch (nn.getNodeName()) { + case "ram:SpecifiedLineTradeAgreement": + case "ram:SpecifiedSupplyChainTradeAgreement": + + node = getNodeByName(nn.getChildNodes(), "ram:NetPriceProductTradePrice"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:ChargeAmount"); + lineItem.setPrice(tryBigDecimal(getNodeValue(node))); + } + + node = getNodeByName(nn.getChildNodes(), "ram:GrossPriceProductTradePrice"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:ChargeAmount"); + lineItem.setGrossPrice(tryBigDecimal(getNodeValue(node))); + } + break; + + case "ram:AssociatedDocumentLineDocument": + + node = getNodeByName(nn.getChildNodes(), "ram:LineID"); + lineItem.setId(getNodeValue(node)); + break; + + case "ram:SpecifiedTradeProduct": + + node = getNodeByName(nn.getChildNodes(), "ram:SellerAssignedID"); + lineItem.setSellerAssignedID(getNodeValue(node)); + + node = getNodeByName(nn.getChildNodes(), "ram:BuyerAssignedID"); + lineItem.setBuyerAssignedID(getNodeValue(node)); + + node = getNodeByName(nn.getChildNodes(), "ram:Name"); + lineItem.product.setName(getNodeValue(node)); + + node = getNodeByName(nn.getChildNodes(), "ram:Description"); + lineItem.product.setDescription(getNodeValue(node)); + break; + + case "ram:SpecifiedLineTradeDelivery": + case "ram:SpecifiedSupplyChainTradeDelivery": + node = getNodeByName(nn.getChildNodes(), "ram:BilledQuantity"); + lineItem.setQuantity(tryBigDecimal(getNodeValue(node))); + break; + + case "ram:SpecifiedLineTradeSettlement": + + node = getNodeByName(nn.getChildNodes(), "ram:ApplicableTradeTax"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:RateApplicablePercent"); + lineItem.product.setVATPercent(tryBigDecimal(getNodeValue(node))); + } + + node = getNodeByName(nn.getChildNodes(), "ram:ApplicableTradeTax"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:CalculatedAmount"); + lineItem.setTax(tryBigDecimal(getNodeValue(node))); + } + + node = getNodeByName(nn.getChildNodes(), "ram:SpecifiedTradeSettlementLineMonetarySummation"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:LineTotalAmount"); + lineItem.setLineTotalAmount(tryBigDecimal(getNodeValue(node))); + } + break; + case "ram:SpecifiedSupplyChainTradeSettlement": + //ZF 1! + + node = getNodeByName(nn.getChildNodes(), "ram:ApplicableTradeTax"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:ApplicablePercent"); + lineItem.product.setVATPercent(tryBigDecimal(getNodeValue(node))); + } + + node = getNodeByName(nn.getChildNodes(), "ram:ApplicableTradeTax"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:CalculatedAmount"); + lineItem.setTax(tryBigDecimal(getNodeValue(node))); + } + + node = getNodeByName(nn.getChildNodes(), "ram:SpecifiedTradeSettlementMonetarySummation"); + if (node != null) { + node = getNodeByName(node.getChildNodes(), "ram:LineTotalAmount"); + lineItem.setLineTotalAmount(tryBigDecimal(getNodeValue(node))); + } + break; + } + } + lineItemList.add(lineItem); + } + return lineItemList; + } + + /** + * returns a List of LineItem Nodes from ZUGFeRD XML + * @return a List of Node instances + */ + public List getLineItemNodes() { + List lineItemNodes = new ArrayList<>(); + NodeList nl = null; + try { + if (getVersion() == 1) { + nl = getNodeListByPath("//CrossIndustryDocument//SpecifiedSupplyChainTradeTransaction//IncludedSupplyChainTradeLineItem"); + } else { + nl = getNodeListByPath("//CrossIndustryInvoice//SupplyChainTradeTransaction//IncludedSupplyChainTradeLineItem"); + } + } catch (Exception e) { + e.printStackTrace(); + } + + for (int i = 0; i < nl.getLength(); i++) { + Node n = nl.item(i); + lineItemNodes.add(n); + } + return lineItemNodes; + } + + /** + * Returns a node, found by name. If more nodes with the same name are present, the first occurence will be returned + * @param nl - A NodeList which may contains the searched node + * @param name The nodes name + * @return a Node or null, if nothing is found + */ + private Node getNodeByName(NodeList nl, String name) { + for (int i = 0; i < nl.getLength(); i++) { + if (nl.item(i).getNodeName() == name) { + return nl.item(i); + } else if (nl.item(i).getChildNodes().getLength() > 0) { + Node node = getNodeByName(nl.item(i).getChildNodes(), name); + if (node != null) { + return node; + } + } + } + return null; + } + + /** + * Get a NodeList by providing an path + * @param path a compliable Path + * @return a Nodelist or null, if an error occurs + */ public NodeList getNodeListByPath(String path) { XPathFactory xpathFact = XPathFactory.newInstance(); @@ -549,4 +706,36 @@ public class ZUGFeRDImporter { } } + /** + * returns the value of an node + * @param node the Node to get the value from + * @return A String or empty String, if no value was found + */ + private String getNodeValue(Node node) { + if (node != null) { + if (node.getFirstChild() != null) { + return node.getFirstChild().getNodeValue(); + } + } + return ""; + } + + /** + * tries to convert an String to BigDecimal. + * @param nodeValue The value as String + * @return a BigDecimal with the value provides as String or a BigDecimal with value 0.00 if an error occurs + */ + private BigDecimal tryBigDecimal(String nodeValue) { + try { + return new BigDecimal(nodeValue); + } catch (Exception e) { + e.printStackTrace(); + try { + return new BigDecimal(Float.valueOf(nodeValue)); + } catch (Exception ex) { + ex.printStackTrace(); + return new BigDecimal("0.00"); + } + } + } } diff --git a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java index 12700b07..719f8527 100644 --- a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java +++ b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java @@ -32,6 +32,7 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; +import java.util.List; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ZF2Test extends MustangReaderTestCase { @@ -221,7 +222,20 @@ public class ZF2Test extends MustangReaderTestCase { assertEquals(zi.getSellerTradePartyAddress().getCountrySubDivisionName(), null); assertEquals(zi.getSellerTradePartyAddress().getCountryID(), "DE"); assertEquals(zi.getSellerTradePartyAddress().getCityName(), "Stadthausen"); - + + List li = zi.getLineItemList(); + assertEquals(zi.getLineItemList().get(0).getId().toString(), "1"); + assertEquals(zi.getLineItemList().get(0).getBuyerAssignedID(), ""); + assertEquals(zi.getLineItemList().get(0).getSellerAssignedID(), ""); + assertEquals(zi.getLineItemList().get(0).getLineTotalAmount().toString(), "160.00"); + assertEquals(zi.getLineItemList().get(0).getQuantity().toString(), "1.0000"); + assertEquals(zi.getLineItemList().get(0).getGrossPrice().toString(), "171.2000"); + assertEquals(zi.getLineItemList().get(0).getBuyerAssignedID(), ""); + assertEquals(zi.getLineItemList().get(0).product.getVATPercent().toString(), "7.00"); + assertEquals(zi.getLineItemList().get(0).product.getName(), "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung"); + assertEquals(zi.getLineItemList().get(0).product.getDescription(), ""); + + int i = 1; try { assertEquals(zi.getVersion(), 2); } catch (Exception e) { From ffb7a365006fdb1844745bcb95fa0b21bc068967 Mon Sep 17 00:00:00 2001 From: Alexander Berndt Date: Thu, 28 May 2020 15:21:15 +0200 Subject: [PATCH 4/5] FIX: ZUGFeRDImporter.java -> Deleted output of Stacktrace if tryBigDecimal fails, as Exceptions are catched --- .../main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java | 2 -- .../src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java | 1 - 2 files changed, 3 deletions(-) diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index 63180e77..40e6ca19 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -729,11 +729,9 @@ public class ZUGFeRDImporter { try { return new BigDecimal(nodeValue); } catch (Exception e) { - e.printStackTrace(); try { return new BigDecimal(Float.valueOf(nodeValue)); } catch (Exception ex) { - ex.printStackTrace(); return new BigDecimal("0.00"); } } diff --git a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java index 719f8527..e4bc483d 100644 --- a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java +++ b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java @@ -235,7 +235,6 @@ public class ZF2Test extends MustangReaderTestCase { assertEquals(zi.getLineItemList().get(0).product.getName(), "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung"); assertEquals(zi.getLineItemList().get(0).product.getDescription(), ""); - int i = 1; try { assertEquals(zi.getVersion(), 2); } catch (Exception e) { From 46433710386d003a5eaa3378f7dcfd1f2c0e364a Mon Sep 17 00:00:00 2001 From: Alexander Berndt Date: Tue, 2 Jun 2020 08:39:14 +0200 Subject: [PATCH 5/5] FIX: Moved propterties "SellerAssignedID" and "BuyerAssignedID" from "Item" to "Product" Altered Tests --- .../java/org/mustangproject/ZUGFeRD/Item.java | 20 +----------------- .../org/mustangproject/ZUGFeRD/Product.java | 21 +++++++++++++++++-- .../ZUGFeRD/ZUGFeRDImporter.java | 4 ++-- .../org/mustangproject/ZUGFeRD/ZF2Test.java | 6 ++---- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java index 0d254d78..e6424456 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Item.java @@ -8,7 +8,7 @@ import java.math.BigDecimal; public class Item implements IZUGFeRDExportableItem { protected BigDecimal price, quantity, tax, grossPrice, lineTotalAmount; - protected String id, sellerAssignedID, buyerAssignedID; + protected String id; protected Product product; public Item(Product product, BigDecimal price, BigDecimal quantity) { @@ -26,24 +26,6 @@ public class Item implements IZUGFeRDExportableItem { return this; } - public String getSellerAssignedID() { - return sellerAssignedID; - } - - public Item setSellerAssignedID(String sellerAssignedID) { - this.sellerAssignedID = sellerAssignedID; - return this; - } - - public String getBuyerAssignedID() { - return buyerAssignedID; - } - - public Item setBuyerAssignedID(String buyerAssignedID) { - this.buyerAssignedID = buyerAssignedID; - return this; - } - public BigDecimal getGrossPrice() { return grossPrice; } diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Product.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Product.java index d07186b8..8fcf1c06 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Product.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/Product.java @@ -5,10 +5,9 @@ import org.mustangproject.ZUGFeRD.IZUGFeRDExportableProduct; import java.math.BigDecimal; public class Product implements IZUGFeRDExportableProduct { - protected String unit, name, description; + protected String unit, name, description, sellerAssignedID, buyerAssignedID; protected BigDecimal VATPercent; - public Product(String name, String description, String unit, BigDecimal VATPercent) { this.unit = unit; this.name = name; @@ -17,6 +16,24 @@ public class Product implements IZUGFeRDExportableProduct { } + public String getSellerAssignedID() { + return sellerAssignedID; + } + + public Product setSellerAssignedID(String sellerAssignedID) { + this.sellerAssignedID = sellerAssignedID; + return this; + } + + public String getBuyerAssignedID() { + return buyerAssignedID; + } + + public Product setBuyerAssignedID(String buyerAssignedID) { + this.buyerAssignedID = buyerAssignedID; + return this; + } + @Override public String getUnit() { return unit; diff --git a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index 40e6ca19..3e59bbe1 100644 --- a/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/libraryBasic/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -576,10 +576,10 @@ public class ZUGFeRDImporter { case "ram:SpecifiedTradeProduct": node = getNodeByName(nn.getChildNodes(), "ram:SellerAssignedID"); - lineItem.setSellerAssignedID(getNodeValue(node)); + lineItem.product.setSellerAssignedID(getNodeValue(node)); node = getNodeByName(nn.getChildNodes(), "ram:BuyerAssignedID"); - lineItem.setBuyerAssignedID(getNodeValue(node)); + lineItem.product.setBuyerAssignedID(getNodeValue(node)); node = getNodeByName(nn.getChildNodes(), "ram:Name"); lineItem.product.setName(getNodeValue(node)); diff --git a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java index e4bc483d..b80b8b37 100644 --- a/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java +++ b/libraryBasic/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java @@ -225,12 +225,11 @@ public class ZF2Test extends MustangReaderTestCase { List li = zi.getLineItemList(); assertEquals(zi.getLineItemList().get(0).getId().toString(), "1"); - assertEquals(zi.getLineItemList().get(0).getBuyerAssignedID(), ""); - assertEquals(zi.getLineItemList().get(0).getSellerAssignedID(), ""); + assertEquals(zi.getLineItemList().get(0).product.getBuyerAssignedID(), ""); + assertEquals(zi.getLineItemList().get(0).product.getSellerAssignedID(), ""); assertEquals(zi.getLineItemList().get(0).getLineTotalAmount().toString(), "160.00"); assertEquals(zi.getLineItemList().get(0).getQuantity().toString(), "1.0000"); assertEquals(zi.getLineItemList().get(0).getGrossPrice().toString(), "171.2000"); - assertEquals(zi.getLineItemList().get(0).getBuyerAssignedID(), ""); assertEquals(zi.getLineItemList().get(0).product.getVATPercent().toString(), "7.00"); assertEquals(zi.getLineItemList().get(0).product.getName(), "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung"); assertEquals(zi.getLineItemList().get(0).product.getDescription(), ""); @@ -241,6 +240,5 @@ public class ZF2Test extends MustangReaderTestCase { // TODO Auto-generated catch block e.printStackTrace(); } - } }