Merge branch 'ZUGFeRD:master' into master

This commit is contained in:
Kemal Taskin
2025-01-20 08:47:32 +01:00
committed by GitHub
7 changed files with 36 additions and 9 deletions

View File

@@ -1,6 +1,10 @@
- #678 - #678
- #679 - #679
- #681 - #681
- #689
- be able to set detailedDeliveryPeriodFrom, detailedDeliveryPeriodTo MS188
- updated verapdf from 1.26.1 to 1.26.2
- cashDiscount JSON now corrently ignores values for cii and xr methods
2.16.0 2.16.0
======= =======

View File

@@ -1,5 +1,6 @@
package org.mustangproject; package org.mustangproject;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import org.mustangproject.ZUGFeRD.IZUGFeRDCashDiscount; import org.mustangproject.ZUGFeRD.IZUGFeRDCashDiscount;
@@ -63,6 +64,7 @@ public class CashDiscount implements IZUGFeRDCashDiscount {
/*** /***
* @return this particular cash discount as cross industry invoice XML * @return this particular cash discount as cross industry invoice XML
*/ */
@JsonIgnore
public String getAsCII() { public String getAsCII() {
return "<ram:SpecifiedTradePaymentTerms>"+ return "<ram:SpecifiedTradePaymentTerms>"+
"<ram:Description>Cash Discount</ram:Description>"+ "<ram:Description>Cash Discount</ram:Description>"+
@@ -78,6 +80,7 @@ public class CashDiscount implements IZUGFeRDCashDiscount {
* XRechnung CIUS defined it's own proprietary format for a freetext field * XRechnung CIUS defined it's own proprietary format for a freetext field
* @return this particular cash discount in proprietary xrechnung format * @return this particular cash discount in proprietary xrechnung format
*/ */
@JsonIgnore
public String getAsXRechnung() { public String getAsXRechnung() {
return "#SKONTO#TAGE="+days+"#PROZENT="+XMLTools.nDigitFormat(percent,2)+"#\n"; return "#SKONTO#TAGE="+days+"#PROZENT="+XMLTools.nDigitFormat(percent,2)+"#\n";
} }

View File

@@ -783,11 +783,20 @@ public class Invoice implements IExportableTransaction {
return detailedDeliveryDateStart; return detailedDeliveryDateStart;
} }
public Invoice setDetailedDeliveryPeriodFrom(Date dt) {
detailedDeliveryDateStart=dt;
return this;
}
@Override @Override
public Date getDetailedDeliveryPeriodTo() { public Date getDetailedDeliveryPeriodTo() {
return detailedDeliveryPeriodEnd; return detailedDeliveryPeriodEnd;
} }
public Invoice setDetailedDeliveryPeriodTo(Date dt) {
detailedDeliveryPeriodEnd=dt;
return this;
}
/** /**
* adds a free text paragraph, which will become an includedNote element * adds a free text paragraph, which will become an includedNote element

View File

@@ -288,8 +288,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
final String allowanceChargeStr = "<ram:AppliedTradeAllowanceCharge><ram:ChargeIndicator><udt:Indicator>" + final String allowanceChargeStr = "<ram:AppliedTradeAllowanceCharge><ram:ChargeIndicator><udt:Indicator>" +
chargeIndicator + "</udt:Indicator></ram:ChargeIndicator>" + percentage + chargeIndicator + "</udt:Indicator></ram:ChargeIndicator>" + percentage +
"<ram:ActualAmount>" + priceFormat(allowance.getTotalAmount(item)) + "</ram:ActualAmount>" + "<ram:ActualAmount>" + priceFormat(allowance.getTotalAmount(item)) + "</ram:ActualAmount>" +
reason +
reasonCode + reasonCode +
reason +
"</ram:AppliedTradeAllowanceCharge>"; "</ram:AppliedTradeAllowanceCharge>";
return allowanceChargeStr; return allowanceChargeStr;
} }
@@ -323,8 +323,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
final String itemTotalAllowanceChargeStr = "<ram:SpecifiedTradeAllowanceCharge><ram:ChargeIndicator><udt:Indicator>" + final String itemTotalAllowanceChargeStr = "<ram:SpecifiedTradeAllowanceCharge><ram:ChargeIndicator><udt:Indicator>" +
chargeIndicator + "</udt:Indicator></ram:ChargeIndicator>" + percentage + chargeIndicator + "</udt:Indicator></ram:ChargeIndicator>" + percentage +
"<ram:ActualAmount>" + currencyFormat(allowance.getTotalAmount(item)) + "</ram:ActualAmount>" + "<ram:ActualAmount>" + currencyFormat(allowance.getTotalAmount(item)) + "</ram:ActualAmount>" +
reason +
reasonCode + reasonCode +
reason +
"</ram:SpecifiedTradeAllowanceCharge>"; "</ram:SpecifiedTradeAllowanceCharge>";
return itemTotalAllowanceChargeStr; return itemTotalAllowanceChargeStr;
} }
@@ -744,12 +744,12 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
"<udt:Indicator>true</udt:Indicator>" + "<udt:Indicator>true</udt:Indicator>" +
"</ram:ChargeIndicator>" + "</ram:ChargeIndicator>" +
"<ram:ActualAmount>" + currencyFormat(charge.getTotalAmount(calc)) + "</ram:ActualAmount>"; "<ram:ActualAmount>" + currencyFormat(charge.getTotalAmount(calc)) + "</ram:ActualAmount>";
if (charge.getReason() != null) {
xml += "<ram:Reason>" + XMLTools.encodeXML(charge.getReason()) + "</ram:Reason>";
}
if (charge.getReasonCode() != null) { if (charge.getReasonCode() != null) {
xml += "<ram:ReasonCode>" + charge.getReasonCode() + "</ram:ReasonCode>"; xml += "<ram:ReasonCode>" + charge.getReasonCode() + "</ram:ReasonCode>";
} }
if (charge.getReason() != null) {
xml += "<ram:Reason>" + XMLTools.encodeXML(charge.getReason()) + "</ram:Reason>";
}
xml += "<ram:CategoryTradeTax>" + xml += "<ram:CategoryTradeTax>" +
"<ram:TypeCode>VAT</ram:TypeCode>" + "<ram:TypeCode>VAT</ram:TypeCode>" +
"<ram:CategoryCode>" + charge.getCategoryCode() + "</ram:CategoryCode>"; "<ram:CategoryCode>" + charge.getCategoryCode() + "</ram:CategoryCode>";

View File

@@ -102,6 +102,8 @@ public class DeSerializationTest extends ResourceCase {
" \"currency\": \"EUR\",\n" + " \"currency\": \"EUR\",\n" +
" \"issueDate\": \"2018-03-03T23:00:00.000+00:00\",\n" + " \"issueDate\": \"2018-03-03T23:00:00.000+00:00\",\n" +
" \"deliveryDate\": \"2018-03-03T23:00:00.000+00:00\",\n" + " \"deliveryDate\": \"2018-03-03T23:00:00.000+00:00\",\n" +
" \"detailedDeliveryPeriodFrom\": \"2017-03-03T13:00:00.000+00:00\",\n" +
" \"detailedDeliveryPeriodTo\": \"2017-03-04T13:00:00.000+00:00\",\n" +
" \"sender\": {\n" + " \"sender\": {\n" +
" \"name\": \"Lieferant GmbH\",\n" + " \"name\": \"Lieferant GmbH\",\n" +
" \"zip\": \"80333\",\n" + " \"zip\": \"80333\",\n" +
@@ -162,7 +164,15 @@ public class DeSerializationTest extends ResourceCase {
TransactionCalculator tc = new TransactionCalculator(fromJSON); TransactionCalculator tc = new TransactionCalculator(fromJSON);
assertEquals(tc.getGrandTotal(), new BigDecimal("234.43")); assertEquals(tc.getGrandTotal(), new BigDecimal("234.43"));
assertEquals(fromJSON.getNumber(), fromJSON.getNumber()); assertEquals(fromJSON.getNumber(), fromJSON.getNumber());
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.setProfile(Profiles.getByName("XRechnung"));
zf2p.generateXML(fromJSON);
String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
assertEquals(fromJSON.getZFItems().length, fromJSON.getZFItems().length); assertEquals(fromJSON.getZFItems().length, fromJSON.getZFItems().length);
assertTrue(theXML.contains("20170303"));
assertTrue(theXML.contains("20170304"));
} }

View File

@@ -259,9 +259,10 @@ public class ZF2PushTest extends TestCase {
.setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE") .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")
.setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562"))) .setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562")))
.setNumber(number) .setNumber(number)
.addCharge(new Charge(new BigDecimal(1)).setReasonCode("ABK").setReason("AReason").setTaxPercent(new BigDecimal(19)))
.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(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(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)).setReasonCode("ABK"))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(2.0)).addCharge(new Charge(new BigDecimal(1)).setReasonCode("ABK").setReason("AnotherReason")))
.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")))) .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"))))
); );
@@ -280,7 +281,7 @@ public class ZF2PushTest extends TestCase {
assertTrue(zi.getUTF8().contains("ABK")); assertTrue(zi.getUTF8().contains("ABK"));
// Reading ZUGFeRD // Reading ZUGFeRD
assertEquals("18.33", zi.getAmount()); assertEquals("19.52", zi.getAmount());
assertEquals(orgname, zi.getHolder()); assertEquals(orgname, zi.getHolder());
assertEquals(number, zi.getForeignReference()); assertEquals(number, zi.getForeignReference());
try { try {

View File

@@ -73,7 +73,7 @@
<dependency> <dependency>
<groupId>org.verapdf</groupId> <groupId>org.verapdf</groupId>
<artifactId>validation-model-jakarta</artifactId> <artifactId>validation-model-jakarta</artifactId>
<version>1.26.1</version> <version>1.26.2</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.helger/ph-schematron --> <!-- https://mvnrepository.com/artifact/com.helger/ph-schematron -->
<dependency> <dependency>