#328 parse SpecifiedTradeProduct/SellerAssignedID, SellerOrderReferencedDocument/ram:IssuerAssignedID and BuyerOrderReferencedDocument/ram:IssuerAssignedID in invoiceparser

This commit is contained in:
jstaerk
2023-06-15 16:14:27 +02:00
parent 309fa207ce
commit a5a59a5ed8
4 changed files with 148 additions and 67 deletions

View File

@@ -1,18 +1,21 @@
2.7.3
=======
- \#328 parse SpecifiedTradeProduct/SellerAssignedID, SellerOrderReferencedDocument/ram:IssuerAssignedID and BuyerOrderReferencedDocument/ram:IssuerAssignedID in invoiceparser
2.7.2 2.7.2
======= =======
2023-06-09 2023-06-09
- #322 support basis quantity in item class, invoice importer - \#322 support basis quantity in item class, invoice importer
- #327 expose validation results and location item (thanks to jpep-in) - \#327 expose validation results and location item (thanks to jpep-in)
2.7.1 2.7.1
======= =======
2023-05-25 2023-05-25
- #317 (support conversion towards peppol #282) - \#317 (support conversion towards peppol #282)
- #313 Update CII2UBL library - \#313 Update CII2UBL library
- https://github.com/ZUGFeRD/mustangproject/pull/315 invoiceimporter constructor for InputStream - https://github.com/ZUGFeRD/mustangproject/pull/315 invoiceimporter constructor for InputStream
- be able to extract data into existing invoice objects - be able to extract data into existing invoice objects

View File

@@ -146,6 +146,47 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter {
} }
} }
xpr = xpath.compile("//*[local-name()=\"ApplicableHeaderTradeAgreement\"]");
NodeList headerTradeAgreementNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
String buyerOrderIssuerAssignedID = null;
String sellerOrderIssuerAssignedID = null;
for (int i = 0; i < headerTradeAgreementNodes.getLength(); i++) {
// nodes.item(i).getTextContent())) {
Node headerTradeAgreementNode = headerTradeAgreementNodes.item(i);
NodeList headerTradeAgreementChilds = headerTradeAgreementNode.getChildNodes();
for (int agreementChildIndex = 0; agreementChildIndex < headerTradeAgreementChilds
.getLength(); agreementChildIndex++) {
if ((headerTradeAgreementChilds.item(agreementChildIndex).getLocalName() != null)
&& (headerTradeAgreementChilds.item(agreementChildIndex).getLocalName()
.equals("BuyerOrderReferencedDocument"))) {
NodeList buyerOrderChilds = headerTradeAgreementChilds.item(agreementChildIndex).getChildNodes();
for (int buyerOrderChildIndex = 0; buyerOrderChildIndex < buyerOrderChilds
.getLength(); buyerOrderChildIndex++) {
if ((buyerOrderChilds.item(buyerOrderChildIndex).getLocalName() != null)
&& (buyerOrderChilds.item(buyerOrderChildIndex).getLocalName()
.equals("IssuerAssignedID"))) {
buyerOrderIssuerAssignedID = buyerOrderChilds.item(buyerOrderChildIndex).getTextContent();
}
}
}
if ((headerTradeAgreementChilds.item(agreementChildIndex).getLocalName() != null)
&& (headerTradeAgreementChilds.item(agreementChildIndex).getLocalName()
.equals("SellerOrderReferencedDocument"))) {
NodeList sellerOrderChilds = headerTradeAgreementChilds.item(agreementChildIndex).getChildNodes();
for (int sellerOrderChildIndex = 0; sellerOrderChildIndex < sellerOrderChilds
.getLength(); sellerOrderChildIndex++) {
if ((sellerOrderChilds.item(sellerOrderChildIndex).getLocalName() != null)
&& (sellerOrderChilds.item(sellerOrderChildIndex).getLocalName()
.equals("IssuerAssignedID"))) {
sellerOrderIssuerAssignedID = sellerOrderChilds.item(sellerOrderChildIndex).getTextContent();
}
}
}
}
}
xpr = xpath.compile("//*[local-name()=\"ApplicableHeaderTradeSettlement\"]|//*[local-name()=\"ApplicableSupplyChainTradeSettlement\"]"); xpr = xpath.compile("//*[local-name()=\"ApplicableHeaderTradeSettlement\"]|//*[local-name()=\"ApplicableSupplyChainTradeSettlement\"]");
NodeList headerTradeSettlementNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); NodeList headerTradeSettlementNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
@@ -180,6 +221,13 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter {
zpp.setDueDate(dueDate).setDeliveryDate(deliveryDate).setIssueDate(issueDate) zpp.setDueDate(dueDate).setDeliveryDate(deliveryDate).setIssueDate(issueDate)
.setSender(new TradeParty(SellerNodes)).setRecipient(new TradeParty(BuyerNodes)).setNumber(number); .setSender(new TradeParty(SellerNodes)).setRecipient(new TradeParty(BuyerNodes)).setNumber(number);
if (buyerOrderIssuerAssignedID != null) {
zpp.setBuyerOrderReferencedDocumentID(buyerOrderIssuerAssignedID);
}
if (sellerOrderIssuerAssignedID != null) {
zpp.setSellerOrderReferencedDocumentID(sellerOrderIssuerAssignedID);
}
//.addItem(new Item(new Product("Testprodukt","","C62",BigDecimal.ZERO),amount,new BigDecimal(1.0))) //.addItem(new Item(new Product("Testprodukt","","C62",BigDecimal.ZERO),amount,new BigDecimal(1.0)))
zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]")); zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]"));
@@ -203,6 +251,7 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter {
String price = "0"; String price = "0";
String basisQuantity = "1"; String basisQuantity = "1";
String name = ""; String name = "";
String sellerAssignedID = null;
String description = ""; String description = "";
SchemedID gid = null; SchemedID gid = null;
String quantity = "0"; String quantity = "0";
@@ -295,6 +344,11 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter {
.equals("Name"))) { .equals("Name"))) {
name = tradeProductChilds.item(tradeProductChildIndex).getTextContent(); name = tradeProductChilds.item(tradeProductChildIndex).getTextContent();
} }
if ((tradeProductChilds.item(tradeProductChildIndex).getLocalName() != null)
&& (tradeProductChilds.item(tradeProductChildIndex).getLocalName()
.equals("SellerAssignedID"))) {
sellerAssignedID = tradeProductChilds.item(tradeProductChildIndex).getTextContent();
}
if ((tradeProductChilds.item(tradeProductChildIndex).getLocalName() != null) if ((tradeProductChilds.item(tradeProductChildIndex).getLocalName() != null)
&& (tradeProductChilds.item(tradeProductChildIndex).getLocalName() && (tradeProductChilds.item(tradeProductChildIndex).getLocalName()
.equals("GlobalID"))) { .equals("GlobalID"))) {
@@ -356,6 +410,9 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter {
if (gid != null) { if (gid != null) {
p.addGlobalID(gid); p.addGlobalID(gid);
} }
if (sellerAssignedID != null) {
p.setSellerAssignedID(sellerAssignedID);
}
Item it = new Item(p, prc, qty); Item it = new Item(p, prc, qty);
it.setBasisQuantity(new BigDecimal(basisQuantity)); it.setBasisQuantity(new BigDecimal(basisQuantity));
if (rdocs != null) { if (rdocs != null) {
@@ -457,11 +514,11 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter {
/*** /***
* This will parse a XML into a invoice object * This will parse a XML into a invoice object
* *
* @return the parsed invoice object * @return the parsed invoice object
*/ */
public Invoice extractInvoice() throws XPathExpressionException, ParseException { public Invoice extractInvoice() throws XPathExpressionException, ParseException {
Invoice i=new Invoice(); Invoice i = new Invoice();
return extractInto(i); return extractInto(i);

View File

@@ -384,12 +384,13 @@ public class ZF2PushTest extends TestCase {
SchemedID gtin=new SchemedID("0160","2001015001325"); SchemedID gtin=new SchemedID("0160","2001015001325");
SchemedID gln=new SchemedID("0088","4304171000002"); SchemedID gln=new SchemedID("0088","4304171000002");
ze.setTransaction(new Invoice().setCurrency("CHF").addNote("document level 1/2").addNote("document level 2/2").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()) ze.setTransaction(new Invoice().setCurrency("CHF").addNote("document level 1/2").addNote("document level 2/2").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date())
.setSellerOrderReferencedDocumentID("9384").setBuyerOrderReferencedDocumentID("28934")
.setDetailedDeliveryPeriod(new SimpleDateFormat("yyyyMMdd").parse(occurrenceFrom), new SimpleDateFormat("yyyyMMdd").parse(occurrenceTo)) .setDetailedDeliveryPeriod(new SimpleDateFormat("yyyyMMdd").parse(occurrenceFrom), new SimpleDateFormat("yyyyMMdd").parse(occurrenceTo))
.setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID).setID("0009845")) .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID).setID("0009845"))
.setDeliveryAddress(new TradeParty("just the other side of the street", "teststr.12a", "55232", "Entenhausen", "DE").addVATID("DE47110")) .setDeliveryAddress(new TradeParty("just the other side of the street", "teststr.12a", "55232", "Entenhausen", "DE").addVATID("DE47110"))
.setContractReferencedDocument(contractID) .setContractReferencedDocument(contractID)
.setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addGlobalID(gln).addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE").setFax("++49555123456")).setAdditionalAddress("Hinterhaus 3")) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addGlobalID(gln).addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE").setFax("++49555123456")).setAdditionalAddress("Hinterhaus 3"))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(16)).addGlobalID(gtin), price, new BigDecimal(1.0)).addReferencedLineID("xxx").addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16))).setDetailedDeliveryPeriod(sdf.parse("2020-01-13"), sdf.parse("2020-01-15"))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(16)).addGlobalID(gtin).setSellerAssignedID("4711"), price, new BigDecimal(1.0)).addReferencedLineID("xxx").addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16))).setDetailedDeliveryPeriod(sdf.parse("2020-01-13"), sdf.parse("2020-01-15")))
.addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16))) .addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16)))
.addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16))) .addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16)))
.setDeliveryDate(sdf.parse("2020-11-02")).setOwnVATID("DE0815").setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE) .setDeliveryDate(sdf.parse("2020-11-02")).setOwnVATID("DE0815").setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE)

View File

@@ -1,22 +1,24 @@
/** ********************************************************************** /**
* * *********************************************************************
* <p>
* Copyright 2019 Jochen Staerk * Copyright 2019 Jochen Staerk
* * <p>
* Use is subject to license terms. * Use is subject to license terms.
* * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not * Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy * use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0. * of the License at http://www.apache.org/licenses/LICENSE-2.0.
* * <p>
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * <p>
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
* * <p>
*********************************************************************** */ * **********************************************************************
*/
package org.mustangproject.ZUGFeRD; package org.mustangproject.ZUGFeRD;
import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile;
@@ -46,18 +48,19 @@ import java.text.SimpleDateFormat;
* Classname ZF2ZInvoiceImporterTest is alphabetical behind the tests which will create the file * Classname ZF2ZInvoiceImporterTest is alphabetical behind the tests which will create the file
* used for this import, testout-ZF2New.pdf * used for this import, testout-ZF2New.pdf
*/ */
public class ZF2ZInvoiceImporterTest extends ResourceCase { public class ZF2ZInvoiceImporterTest extends ResourceCase {
public void testInvoiceImport() { public void testInvoiceImport() {
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter("./target/testout-ZF2new.pdf"); ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("./target/testout-ZF2new.pdf");
boolean hasExceptions=false; boolean hasExceptions = false;
Invoice invoice=null; Invoice invoice = null;
try { try {
invoice=zii.extractInvoice(); invoice = zii.extractInvoice();
} catch (XPathExpressionException | ParseException e) { } catch (XPathExpressionException | ParseException e) {
hasExceptions=true; hasExceptions = true;
} }
assertFalse(hasExceptions); assertFalse(hasExceptions);
// Reading ZUGFeRD // Reading ZUGFeRD
@@ -72,10 +75,10 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
assertEquals("7.00", invoice.getZFItems()[0].getProduct().getVATPercent().toString()); assertEquals("7.00", invoice.getZFItems()[0].getProduct().getVATPercent().toString());
assertEquals("RE-20170509/505", invoice.getNumber()); assertEquals("RE-20170509/505", invoice.getNumber());
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
assertEquals("2017-05-09",sdf.format(invoice.getIssueDate())); assertEquals("2017-05-09", sdf.format(invoice.getIssueDate()));
assertEquals("2017-05-07",sdf.format(invoice.getDeliveryDate())); assertEquals("2017-05-07", sdf.format(invoice.getDeliveryDate()));
assertEquals("2017-05-30",sdf.format(invoice.getDueDate())); assertEquals("2017-05-30", sdf.format(invoice.getDueDate()));
assertEquals("Bahnstr. 42", invoice.getRecipient().getStreet()); assertEquals("Bahnstr. 42", invoice.getRecipient().getStreet());
assertEquals("Hinterhaus", invoice.getRecipient().getAdditionalAddress()); assertEquals("Hinterhaus", invoice.getRecipient().getAdditionalAddress());
@@ -89,25 +92,43 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
assertEquals("DE", invoice.getSender().getCountry()); assertEquals("DE", invoice.getSender().getCountry());
assertEquals("Stadthausen", invoice.getSender().getLocation()); assertEquals("Stadthausen", invoice.getSender().getLocation());
TransactionCalculator tc=new TransactionCalculator(invoice); TransactionCalculator tc = new TransactionCalculator(invoice);
assertEquals(new BigDecimal("571.04"),tc.getGrandTotal()); assertEquals(new BigDecimal("571.04"), tc.getGrandTotal());
// name street location zip country, contact name phone email, total amount // name street location zip country, contact name phone email, total amount
}
public void testEdgeInvoiceImport() {
ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("./target/testout-ZF2PushEdge.pdf");
boolean hasExceptions = false;
Invoice invoice = null;
try {
invoice = zii.extractInvoice();
} catch (XPathExpressionException | ParseException e) {
hasExceptions = true;
}
assertFalse(hasExceptions);
// Reading ZUGFeRD
assertEquals("4711", invoice.getZFItems()[0].getProduct().getSellerAssignedID());
assertEquals("9384", invoice.getSellerOrderReferencedDocumentID());
assertEquals("28934", invoice.getBuyerOrderReferencedDocumentID());
} }
public void testZF1Import() { public void testZF1Import() {
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter("./target/testout-MustangGnuaccountingBeispielRE-20171118_506zf1.pdf"); ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("./target/testout-MustangGnuaccountingBeispielRE-20171118_506zf1.pdf");
boolean hasExceptions=false; boolean hasExceptions = false;
Invoice invoice=null; Invoice invoice = null;
try { try {
invoice=zii.extractInvoice(); invoice = zii.extractInvoice();
} catch (XPathExpressionException | ParseException e) { } catch (XPathExpressionException | ParseException e) {
hasExceptions=true; hasExceptions = true;
} }
assertFalse(hasExceptions); assertFalse(hasExceptions);
// Reading ZUGFeRD // Reading ZUGFeRD
@@ -121,9 +142,9 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
assertEquals("7.00", invoice.getZFItems()[0].getProduct().getVATPercent().toString()); assertEquals("7.00", invoice.getZFItems()[0].getProduct().getVATPercent().toString());
assertEquals("RE-20190610/507", invoice.getNumber()); assertEquals("RE-20190610/507", invoice.getNumber());
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
assertEquals("2019-06-10",sdf.format(invoice.getIssueDate())); assertEquals("2019-06-10", sdf.format(invoice.getIssueDate()));
assertEquals("2019-07-01",sdf.format(invoice.getDueDate())); assertEquals("2019-07-01", sdf.format(invoice.getDueDate()));
assertEquals("street", invoice.getRecipient().getStreet()); assertEquals("street", invoice.getRecipient().getStreet());
assertEquals("zip", invoice.getRecipient().getZIP()); assertEquals("zip", invoice.getRecipient().getZIP());
@@ -135,85 +156,84 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
assertEquals("DE", invoice.getSender().getCountry()); assertEquals("DE", invoice.getSender().getCountry());
assertEquals("city", invoice.getSender().getLocation()); assertEquals("city", invoice.getSender().getLocation());
TransactionCalculator tc=new TransactionCalculator(invoice); TransactionCalculator tc = new TransactionCalculator(invoice);
assertEquals(new BigDecimal("571.04"),tc.getGrandTotal()); assertEquals(new BigDecimal("571.04"), tc.getGrandTotal());
// name street location zip country, contact name phone email, total amount // name street location zip country, contact name phone email, total amount
} }
public void testItemAllowancesChargesImport() { public void testItemAllowancesChargesImport() {
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter("./target/testout-ZF2PushItemChargesAllowances.pdf"); ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("./target/testout-ZF2PushItemChargesAllowances.pdf");
boolean hasExceptions=false; boolean hasExceptions = false;
Invoice invoice=null; Invoice invoice = null;
try { try {
invoice=zii.extractInvoice(); invoice = zii.extractInvoice();
} catch (XPathExpressionException | ParseException e) { } catch (XPathExpressionException | ParseException e) {
hasExceptions=true; hasExceptions = true;
} }
assertFalse(hasExceptions); assertFalse(hasExceptions);
TransactionCalculator tc=new TransactionCalculator(invoice); TransactionCalculator tc = new TransactionCalculator(invoice);
assertEquals(new BigDecimal("18.33"),tc.getGrandTotal()); assertEquals(new BigDecimal("18.33"), tc.getGrandTotal());
} }
public void testBasisQuantityImport() { public void testBasisQuantityImport() {
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter("./target/testout-ZF2newEdge.pdf"); ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("./target/testout-ZF2newEdge.pdf");
boolean hasExceptions=false; boolean hasExceptions = false;
Invoice invoice=null; Invoice invoice = null;
try { try {
invoice=zii.extractInvoice(); invoice = zii.extractInvoice();
} catch (XPathExpressionException | ParseException e) { } catch (XPathExpressionException | ParseException e) {
hasExceptions=true; hasExceptions = true;
} }
assertFalse(hasExceptions); assertFalse(hasExceptions);
TransactionCalculator tc=new TransactionCalculator(invoice); TransactionCalculator tc = new TransactionCalculator(invoice);
assertEquals(new BigDecimal("337.60"),tc.getGrandTotal()); assertEquals(new BigDecimal("337.60"), tc.getGrandTotal());
} }
public void testAllowancesChargesImport() { public void testAllowancesChargesImport() {
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter("./target/testout-ZF2PushChargesAllowances.pdf"); ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("./target/testout-ZF2PushChargesAllowances.pdf");
boolean hasExceptions=false; boolean hasExceptions = false;
Invoice invoice=null; Invoice invoice = null;
try { try {
invoice=zii.extractInvoice(); invoice = zii.extractInvoice();
} catch (XPathExpressionException | ParseException e) { } catch (XPathExpressionException | ParseException e) {
hasExceptions=true; hasExceptions = true;
} }
assertFalse(hasExceptions); assertFalse(hasExceptions);
TransactionCalculator tc=new TransactionCalculator(invoice); TransactionCalculator tc = new TransactionCalculator(invoice);
assertEquals(new BigDecimal("11.07"),tc.getGrandTotal()); assertEquals(new BigDecimal("11.07"), tc.getGrandTotal());
} }
public void testXRImport() { public void testXRImport() {
boolean hasExceptions=false; boolean hasExceptions = false;
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter(); ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter();
try { try {
zii.fromXML(new String(Files.readAllBytes(Paths.get("./target/testout-XR-Edge.xml")), StandardCharsets.UTF_8)); zii.fromXML(new String(Files.readAllBytes(Paths.get("./target/testout-XR-Edge.xml")), StandardCharsets.UTF_8));
} catch (IOException e) { } catch (IOException e) {
hasExceptions=true; hasExceptions = true;
} }
Invoice invoice=null; Invoice invoice = null;
try { try {
invoice=zii.extractInvoice(); invoice = zii.extractInvoice();
} catch (XPathExpressionException | ParseException e) { } catch (XPathExpressionException | ParseException e) {
hasExceptions=true; hasExceptions = true;
} }
assertFalse(hasExceptions); assertFalse(hasExceptions);
TransactionCalculator tc=new TransactionCalculator(invoice); TransactionCalculator tc = new TransactionCalculator(invoice);
assertEquals(new BigDecimal("1.00"),tc.getGrandTotal()); assertEquals(new BigDecimal("1.00"), tc.getGrandTotal());
} }