diff --git a/History.md b/History.md
index cbfe26eb..5641348b 100644
--- a/History.md
+++ b/History.md
@@ -1,3 +1,5 @@
+- correcly write charge reason codes also for non-Xrechnung
+
2.15.1
=======
2024-12-07
diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
index ff5aa321..6bd4f95d 100644
--- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
+++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
@@ -277,11 +277,11 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
}
String reason = "";
- if ((allowance.getReason() != null) && (profile == Profiles.getByName("Extended") || profile == Profiles.getByName("XRechnung"))) {
+ if ((allowance.getReason() != null) && (profile == Profiles.getByName("Extended") || profile == Profiles.getByName("XRechnung")) || profile == Profiles.getByName("EN16931")) {
reason = "" + XMLTools.encodeXML(allowance.getReason()) + "";
}
String reasonCode = "";
- if ((allowance.getReasonCode() != null) && (profile == Profiles.getByName("XRechnung"))) {
+ if (allowance.getReasonCode() != null) {
// only in XRechnung profile
reasonCode = "" + allowance.getReasonCode() + "";
}
diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java
index d435e58e..ce0ee767 100644
--- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java
+++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java
@@ -22,6 +22,7 @@
package org.mustangproject.ZUGFeRD;
import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
@@ -247,6 +248,8 @@ public class ZF2PushTest extends TestCase {
ZUGFeRDExporterFromA1 ze = new ZUGFeRDExporterFromA1();
ze.ignorePDFAErrors().load(SOURCE_PDF);
+ ze.setProfile(Profiles.getByName("Extended"));
+
ze.setProducer("My Application").setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile("extended");
// ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname,"teststr", "55232","teststadt","DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number)
// .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance().setPercent(new BigDecimal(50)))));
@@ -258,7 +261,7 @@ public class ZF2PushTest extends TestCase {
.setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance(new BigDecimal("0.1"))))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance().setPercent(new BigDecimal(50))))
- .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(2.0)).addCharge(new Charge(new BigDecimal(1))))
+ .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(2.0)).addCharge(new Charge(new BigDecimal(1)).setReasonCode("AK")))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addCharge(new Charge(new BigDecimal(1))).addAllowance(new Allowance(new BigDecimal("1"))))
);
@@ -800,4 +803,24 @@ public class ZF2PushTest extends TestCase {
match the read grand total */
}
}
+ public void testRead() {
+
+
+
+ ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter("\\Users\\jstaerk\\temp\\1424413_anonymized.xml");
+ try {
+ Invoice i = zii.extractInvoice();
+
+ TransactionCalculator tc=new TransactionCalculator(i);
+ assertEquals(0,tc.getGrandTotal().compareTo(new BigDecimal("442.83")));
+
+ } catch (XPathExpressionException e) {
+ fail("XPathExpressionException should not be raised");
+ } catch (ParseException e) {
+ fail("ParseException should not be raised");
+ /* a parseException would also be fired if the calculated grand total does not
+ match the read grand total */
+ }
+ }
+
}