From 12dd49a54e7450b28b73aab0defeb88e2a85b24f Mon Sep 17 00:00:00 2001 From: jstaerk Date: Tue, 8 Apr 2025 08:41:55 +0200 Subject: [PATCH] closes #809 --- History.md | 13 + .../main/java/org/mustangproject/Item.java | 2 +- .../ZUGFeRD/CalculationTest.java | 37 +- .../test/resources/Extended_fremdwaehrung.xml | 345 ++++++++++++++++++ 4 files changed, 395 insertions(+), 2 deletions(-) create mode 100644 library/src/test/resources/Extended_fremdwaehrung.xml diff --git a/History.md b/History.md index f11df7d0..718e3b1c 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,18 @@ - #722 - #774 +- #742/#753 +- #778 +- #759 +- #614, #770 +- #728 +- #776 +- #741 +- #782 +- #772 +- #775 +- #802 +- #809 + 2.16.3 ======= diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 4052eaf9..552084d6 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -175,7 +175,7 @@ public class Item implements IZUGFeRDExportableItem { icnm.getAsNodeMap("ApplicableTradeTax") .flatMap(cnm -> cnm.getAsString("ExemptionReason")) .ifPresent(product::setTaxExemptionReason); - icnm.getAsNodeMap("SpecifiedTradeAllowanceCharge").ifPresent(stac -> { + icnm.getAllNodes("SpecifiedTradeAllowanceCharge").map(NodeMap::new).forEach(stac -> { stac.getAsNodeMap("ChargeIndicator").ifPresent(ci -> { String isChargeString=ci.getAsString("Indicator").get(); String percentString=stac.getAsStringOrNull("CalculationPercent"); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java index 6d84a0f6..1e993dc9 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java @@ -3,20 +3,27 @@ package org.mustangproject.ZUGFeRD; import static java.math.BigDecimal.TEN; import static java.math.BigDecimal.valueOf; import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import org.junit.Test; import org.mustangproject.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.xml.xpath.XPathExpressionException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.math.BigDecimal; +import java.text.ParseException; import java.text.SimpleDateFormat; /*** * tests the linecalculator and transactioncalculator classes * */ -public class CalculationTest { +public class CalculationTest extends ResourceCase { private static final Logger LOGGER = LoggerFactory.getLogger(CalculationTest.class); @Test @@ -72,6 +79,34 @@ public class CalculationTest { assertEquals(valueOf(314.1184).stripTrailingZeros(), calculator.getItemTotalVATAmount().stripTrailingZeros()); } + @Test + public void testLineCalculatorForeignCurrencyExample() { + + + File inputCII = getResourceAsFile("Extended_fremdwaehrung.xml"); +inputCII=new File("C:\\Users\\jstaerk\\workspace\\XMLExamples\\zfdiverses\\20250407\\fremdwaehrung.xml"); + ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter(); + Invoice invoice=null; + zii.doIgnoreCalculationErrors(); + boolean hasExceptions=false; + try { + zii.setInputStream(new FileInputStream(inputCII)); + + invoice=zii.extractInvoice(); + } catch (XPathExpressionException | ParseException e) { +// handle Exceptions + hasExceptions=true; + } catch (FileNotFoundException e) { + hasExceptions=true; + } + assertFalse(hasExceptions); + // Reading ZUGFeRD + + final TransactionCalculator calculator = new TransactionCalculator(invoice); + + assertEquals(valueOf(521.91).stripTrailingZeros(), calculator.getGrandTotal().stripTrailingZeros()); + } + @Test public void testTotalCalculatorGrandTotalRounding() { diff --git a/library/src/test/resources/Extended_fremdwaehrung.xml b/library/src/test/resources/Extended_fremdwaehrung.xml new file mode 100644 index 00000000..4d10dea8 --- /dev/null +++ b/library/src/test/resources/Extended_fremdwaehrung.xml @@ -0,0 +1,345 @@ + + + + + + + + + + Beispielgeschäftsprozess + + + urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended + + + + 47110815 + RECHNUNG + 380 + + 20241115 + + + Mitglieder der Geschäftsleitung + H. Meier Geschäftsführer + T. Müller Prokurist + HRB Braunschweig 12345 + REG + + + Vom 17. Dezember 2024 bis 6. Januar 2025 haben wir Betriebsferien. + AAI + + + Aus konzern-internen Gründen wird der Steuerbetrag sowohl in der Rechungswährung (EUR) als auch in der Buchwährung (GBP) ausgegeben. + TXD + + + + + + 1 + + Materialzertifikat X-234 gem ISO XYZ. + Ware bleibt bis zur vollständigen Bezahlung unser Eigentum. + + + + + CO-123/V2A + Toolbox 0815 + Stahlcoil + + DE + + + + + ORDER84359 + 1 + + + 100.00 + 1 + + + 100 + 1 + + + + 10 + + + + VAT + S + 19 + + + + false + + 10 + 1000 + 100 + 64 + Lagerware + + + + false + + 1000 + 50 + 70 + Direktbelieferung + + + 850 + + + + + + 12345676 + Rohstoff AG Salzgitter + + 38226 + Marktstr. 153 + Salzgitter + DE + + + DE123456789 + + + + 75969813 + Metallbau Leipzig GmbH & Co. KG + + 12345 + Pappelallee 15 + Hof 3 + Leipzig + DE + + + 04 0 11 000 - 12345 12345 - 35 + + + + Global Supplies Financial Services + + 12345 + Friedrichstraße 165 + Berlin + DE + + + DE1334567 + + + + + + 75969815 + Metallbau Leipzig GmbH & Co. KG + + 12347 + Eichenpromenade 37 + Tor 1 + Metallstadt + DE + + + 999999999 + + + + + 20241111 + + + + + EUR + GBP + + 432156789 + Global Supplies Financial Services + + 12345 + Friedrichstraße 165 + Berlin + DE + + + + GBP + EUR + 1.12244 + + 20181031 + + + + 58 + + DE77 3707 0060 0321 9870 00 + Global Supplies Financial Services + + + + 163.16 + VAT + 858.75 + 850 + 8.75 + S + 19 + + + + 20181001 + + + 20181031 + + + + + true + + 30 + ABK + Einwegverpackung + + VAT + S + 19 + + + + + false + + 2.5 + 850 + 21.25 + 102 + Stammkundenrabatt + + VAT + S + 19 + + + + Zahlbar ohne Abschlag bis + + 20241201 + + + + Zahlbar mit 2% Skonto bis + + 20241120 + + + + 850 + 30 + 21.25 + 858.75 + 163.16 + 183.14 + 1021.91 + 500 + 521.91 + + + +