diff --git a/History.md b/History.md
index a829860d..4a695a1a 100644
--- a/History.md
+++ b/History.md
@@ -8,7 +8,14 @@ allow to add includedNotes with type
- 631 multiple invoice referenced documents
- 629
- 630 #296 #565
--
+- 657
+- 658
+- 648
+- 651
+- 652
+- -620
+- 653
+- 654
2.15.2
=======
diff --git a/Mustang-CLI/src/main/resources/logback.xml b/Mustang-CLI/src/main/resources/logback.xml
index d8c56d7e..9efdfd4c 100644
--- a/Mustang-CLI/src/main/resources/logback.xml
+++ b/Mustang-CLI/src/main/resources/logback.xml
@@ -1,38 +1,36 @@
-
-
-
- System.err
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
-
- log/ZUV-%d{yyyy-MM}.log
-
-
- 60
-
-
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ System.err
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+ log/ZUV-%d{yyyy-MM}.log
+
+ 60
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/src/main/java/org/mustangproject/Contact.java b/library/src/main/java/org/mustangproject/Contact.java
index cead6f86..39ef8aa2 100644
--- a/library/src/main/java/org/mustangproject/Contact.java
+++ b/library/src/main/java/org/mustangproject/Contact.java
@@ -114,7 +114,9 @@ public class Contact implements IZUGFeRDExportableContact {
if (currentItemNode.getLocalName() != null) {
if (currentItemNode.getLocalName().equals("PersonName")/*CII*/||currentItemNode.getLocalName().equals("Name")/*UBL*/) {
- setName(currentItemNode.getFirstChild().getNodeValue());
+ if (currentItemNode.getFirstChild()!=null) {
+ setName(currentItemNode.getFirstChild().getNodeValue());
+ }
}
if (currentItemNode.getLocalName().equals("TelephoneUniversalCommunication")) { /*CII*/
NodeList tel = currentItemNode.getChildNodes();
diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java
index 4641a0e3..8fefa87f 100644
--- a/library/src/main/java/org/mustangproject/Item.java
+++ b/library/src/main/java/org/mustangproject/Item.java
@@ -172,6 +172,32 @@ public class Item implements IZUGFeRDExportableItem {
icnm.getAsNodeMap("ApplicableTradeTax")
.flatMap(cnm -> cnm.getAsBigDecimal("RateApplicablePercent", "ApplicablePercent"))
.ifPresent(product::setVATPercent);
+ icnm.getAsNodeMap("SpecifiedTradeAllowanceCharge").ifPresent(stac -> {
+ stac.getAsNodeMap("ChargeIndicator").ifPresent(ci -> {
+ String isChargeString=ci.getAsString("Indicator").get();
+ String percentString=stac.getAsStringOrNull("CalculationPercent");
+ String amountString=stac.getAsStringOrNull("ActualAmount");
+ String reason=stac.getAsStringOrNull("Reason");
+ Charge izac= new Charge();
+ if (isChargeString.equalsIgnoreCase("false")) {
+ izac = new Allowance();
+ } else {
+ izac = new Charge();
+ }
+ if (amountString!=null) {
+ izac.setTotalAmount(new BigDecimal(amountString));
+ }
+ izac.setPercent(new BigDecimal(percentString));
+ izac.setReason(reason);
+
+ if (isChargeString.equalsIgnoreCase("false")) {
+ addAllowance(izac);
+ } else {
+ addCharge(izac);
+ }
+ });
+
+ });
if (recalcPrice && !BigDecimal.ZERO.equals(quantity)) {
icnm.getAsNodeMap("SpecifiedTradeSettlementLineMonetarySummation")
diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/LineCalculator.java b/library/src/main/java/org/mustangproject/ZUGFeRD/LineCalculator.java
index e319ec73..d17ccfec 100644
--- a/library/src/main/java/org/mustangproject/ZUGFeRD/LineCalculator.java
+++ b/library/src/main/java/org/mustangproject/ZUGFeRD/LineCalculator.java
@@ -55,7 +55,7 @@ public class LineCalculator {
BigDecimal basisQuantity = currentItem.getBasisQuantity().compareTo(BigDecimal.ZERO) == 0
? BigDecimal.ONE.setScale(4)
: currentItem.getBasisQuantity();
- itemTotalNetAmount = quantity.multiply(getPrice()).divide(basisQuantity, 18, RoundingMode.HALF_UP)
+ itemTotalNetAmount = quantity.multiply(price).divide(basisQuantity, 18, RoundingMode.HALF_UP)
.subtract(allowanceItemTotal).setScale(2, RoundingMode.HALF_UP);
itemTotalVATAmount = itemTotalNetAmount.multiply(multiplicator);
}
diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
index caff7b6c..2903d81d 100644
--- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
+++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
@@ -737,7 +737,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
}
if ((trans.getZFCharges() != null) && (trans.getZFCharges().length > 0)) {
- if (profile == Profiles.getByName("XRechnung")) {
+ if ((profile == Profiles.getByName("XRechnung")) || (profile == Profiles.getByName("EN16931")) || (profile == Profiles.getByName("EXTENDED"))) {
for (IZUGFeRDAllowanceCharge charge : trans.getZFCharges()) {
xml += "" +
"" +
diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java
index 0417990d..de66b35d 100644
--- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java
+++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java
@@ -897,7 +897,7 @@ public class ZUGFeRDInvoiceImporter {
// be read,
// so the invoice remains arithmetically correct
// -> parse document level charges+allowances
- xpr = xpath.compile("//*[local-name()=\"SpecifiedTradeAllowanceCharge\"]|//*[local-name()=\"AllowanceCharge\"]");//CII and UBL
+ xpr = xpath.compile("//*[local-name()=\"ApplicableHeaderTradeSettlement\"]/*[local-name()=\"SpecifiedTradeAllowanceCharge\"]|/*[local-name()=\"AllowanceCharge\"]");//CII and UBL
NodeList chargeNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
for (int i = 0; i < chargeNodes.getLength(); i++) {
NodeList chargeNodeChilds = chargeNodes.item(i).getChildNodes();
diff --git a/library/src/main/resources/logback.xml b/library/src/main/resources/logback.xml
index 011cab8b..7c5e39d4 100644
--- a/library/src/main/resources/logback.xml
+++ b/library/src/main/resources/logback.xml
@@ -1,33 +1,37 @@
-
-
-
- System.err
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
- log/ZUV-%d{yyyy-MM}.log
-
-
- 60
-
-
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
-
-
-
+
+
+ System.err
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+ log/ZUV-%d{yyyy-MM}.log
+
+ 60
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/library/src/main/resources/stylesheets/result-pdf.xsl b/library/src/main/resources/stylesheets/result-pdf.xsl
index 9ffe8e1e..0dfa7c95 100644
--- a/library/src/main/resources/stylesheets/result-pdf.xsl
+++ b/library/src/main/resources/stylesheets/result-pdf.xsl
@@ -9,11 +9,11 @@
- Es wird empfohlen, das Dokument anzunehmen und weiterzuverarbeiten.
+ Es wird empfohlen, das Dokument anzunehmen und es weiterzuverarbeiten.
Es wird empfohlen, das Dokument zurückzuweisen.
@@ -71,47 +71,59 @@
+ select="'Angaben zum geprüften Dokument'"/>
+ select="'black'"/>
-
-
-
-
-
-
-
- Referenz:
-
-
-
-
-
-
-
-
-
- Zeitpunkt der Prüfung:
-
-
-
-
-
-
-
-
-
- Erkannter Dokumenttyp:
-
-
-
+
+
+
+
+
+
+ Referenz:
+
+
+
+
+
+
+
+
+
+ Zeitpunkt der Prüfung:
+
+
+
+
+
+
+
+
+
+ Erkannter Dokumenttyp:
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -125,35 +137,44 @@
-
+
+ font-weight="bold"
+ border-style="solid">
- Type
+ Type
- Code
+ Code
- Schwere
+ Schwere
- Text
+ Text
-
+
-
-
+
+
-
+
- Es gibt weder Hinweise noch Fehler.
+ Es gibt keine Hinweise, Warnungen oder Fehler.
@@ -164,62 +185,113 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- red
- Fehler
-
-
- Hinweis
-
-
+
+
+
+
+ red
+
+
+ orange
+
+
+ black
+
+
+
+
+
+
+ Fehler
+
+
+ Warnung
+
+
+ Hinweis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- red
-
-
+
+
-
-
-
-
- red
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select="'black'"/>
@@ -234,10 +306,22 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java
index 75aa5324..49c5ce78 100644
--- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java
+++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java
@@ -40,7 +40,6 @@ import java.nio.file.Paths;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
-import java.util.Date;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@@ -103,6 +102,7 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
}
+
public void testInvoiceImportUBL() {
diff --git a/validator/src/main/resources/logback.xml b/validator/src/main/resources/logback.xml
index aed3e946..f48d8621 100644
--- a/validator/src/main/resources/logback.xml
+++ b/validator/src/main/resources/logback.xml
@@ -1,30 +1,25 @@
-
-
-
- System.err
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
- log/ZUV-%d{yyyy-MM}.log
-
-
- 60
-
-
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
-
+
+
+ System.err
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+ log/ZUV-%d{yyyy-MM}.log
+
+ 60
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+