From 58b13598b3cd4fcae4c16f82a34b2e5ef9c49c8e Mon Sep 17 00:00:00 2001 From: jstaerk Date: Thu, 10 Mar 2022 18:29:02 +0100 Subject: [PATCH] edge test cash discount --- .../ZUGFeRD/OXPullProvider.java | 2 +- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 42 +++--- .../mustangproject/ZUGFeRD/ZF2EdgeTest.java | 120 +++++++++++++++--- .../mustangproject/ZUGFeRD/ZF2PushTest.java | 2 + validator/pom.xml | 3 +- 5 files changed, 135 insertions(+), 34 deletions(-) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java index 95035e8c..1ca123f0 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java @@ -461,7 +461,7 @@ public class OXPullProvider extends ZUGFeRD2PullProvider implements IXMLProvider if (trans.getTradeSettlement() != null) { for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { if ((payment != null) && (payment instanceof IZUGFeRDTradeSettlementDebit)) { - // xml += payment.getPaymentXML(); + //not in order-x xml += payment.getPaymentXML(); } } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 9ca14bba..17248b92 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -45,7 +45,7 @@ import org.mustangproject.XMLTools; public class ZUGFeRD2PullProvider implements IXMLProvider { - protected byte[] zugferdData; + protected byte[] zugferdData; protected IExportableTransaction trans; protected TransactionCalculator calc; private String paymentTermsDescription; @@ -130,10 +130,10 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } xml += " " + XMLTools.encodeXML(party.getName()) + "\n"; - if (party.getLegalOrganisation()!=null) { - xml += " "; - xml += " "+XMLTools.encodeXML(party.getLegalOrganisation().getID())+""; - xml += ""; + if (party.getLegalOrganisation() != null) { + xml += " "; + xml += " " + XMLTools.encodeXML(party.getLegalOrganisation().getID()) + ""; + xml += ""; } if ((party.getContact() != null) && (isSender || profile == Profiles.getByName("Extended") || profile == Profiles.getByName("XRechnung"))) { @@ -488,9 +488,9 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { if (trans.getSpecifiedProcuringProjectID() != null) { xml = xml + " \n" - + " " - + XMLTools.encodeXML(trans.getSpecifiedProcuringProjectID()) + "\n"; - if(trans.getSpecifiedProcuringProjectName()!= null) { + + " " + + XMLTools.encodeXML(trans.getSpecifiedProcuringProjectID()) + "\n"; + if (trans.getSpecifiedProcuringProjectName() != null) { xml += " " + XMLTools.encodeXML(trans.getSpecifiedProcuringProjectName()) + "\n"; } xml += " \n"; @@ -507,7 +507,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " "; if (trans.getDeliveryDate() != null) { - xml += DATE.udtFormat(trans.getDeliveryDate()); + xml += DATE.udtFormat(trans.getDeliveryDate()); } else { throw new IllegalStateException("No delivery date provided"); } @@ -669,10 +669,10 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml = xml + " \n" + " " + XMLTools.encodeXML(trans.getInvoiceReferencedDocumentID()) + "\n"; - if(trans.getInvoiceReferencedIssueDate()!= null){ - xml += "" - + DATE.qdtFormat(trans.getInvoiceReferencedIssueDate()) - + "\n"; + if (trans.getInvoiceReferencedIssueDate() != null) { + xml += "" + + DATE.qdtFormat(trans.getInvoiceReferencedIssueDate()) + + "\n"; } xml += " \n"; } @@ -706,7 +706,6 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } private String buildPaymentTermsXml() { - final IZUGFeRDPaymentTerms paymentTerms = trans.getPaymentTerms(); if (paymentTerms == null) { return ""; @@ -714,18 +713,27 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { String paymentTermsXml = ""; final IZUGFeRDPaymentDiscountTerms discountTerms = paymentTerms.getDiscountTerms(); - final Date dueDate = paymentTerms.getDueDate(); + Date dueDate = paymentTerms.getDueDate(); if (dueDate != null && discountTerms != null && discountTerms.getBaseDate() != null) { throw new IllegalStateException( "if paymentTerms.dueDate is specified, paymentTerms.discountTerms.baseDate has not to be specified"); } paymentTermsXml += "" + paymentTerms.getDescription() + ""; + if (dueDate != null) { paymentTermsXml += ""; - paymentTermsXml += DATE.udtFormat(dueDate) ; + paymentTermsXml += DATE.udtFormat(dueDate); paymentTermsXml += ""; } + if (trans.getTradeSettlement() != null) { + for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { + if ((payment != null) && (payment instanceof IZUGFeRDTradeSettlementDebit)) { + paymentTermsXml += payment.getPaymentXML(); + } + } + } + if (discountTerms != null) { paymentTermsXml += ""; final String currency = trans.getCurrency(); @@ -737,7 +745,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { if (discountTerms.getBaseDate() != null) { final Date baseDate = discountTerms.getBaseDate(); paymentTermsXml += ""; - paymentTermsXml += DATE.udtFormat(baseDate); + paymentTermsXml += DATE.udtFormat(baseDate); paymentTermsXml += ""; paymentTermsXml += "" diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java index 3151dfb4..ee3e1d42 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; @@ -172,7 +173,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra public IZUGFeRDExportableTradeParty getRecipient() { return new RecipientTradeParty(); } - + @Override public IZUGFeRDExportableTradeParty getDeliveryAddress() { return new RecipientTradeParty(); @@ -194,7 +195,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra EdgeProduct designProduct = new EdgeProduct("", "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung", "HUR"); EdgeProduct balloonProduct = new EdgeProduct("", "Bestellerweiterung für E&F Umbau", "C62");// test for issue - // 103 + // 103 EdgeProduct airProduct = new EdgeProduct("", "Heiße Luft pro Liter", "LTR"); Item design=new Item(new BigDecimal("160"), new BigDecimal("1"), designProduct); @@ -211,6 +212,31 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra return "Zahlbar ohne Abzug bis zum " + germanDateFormat.format(getDueDate()); } + @Override + public IZUGFeRDPaymentTerms getPaymentTerms() { + PaymentDiscountTerms paymentDiscountTerms = + new PaymentDiscountTerms( + new BigDecimal(2), // skonto prozent + null, // kein basedate + 14, // anzahl tage + "DAYS"); + + Date due = null; + try { + due = new SimpleDateFormat("yyyyMMdd").parse("20220228"); + } catch (ParseException e) { + e.printStackTrace(); + + } + return + new PaymentTerms( + "14 Tage 2% Skonto, 30 Tage rein netto", + due,// fälligkeitsdatum + paymentDiscountTerms //PaymentDiscountTerms + ); + + } + @Override public IZUGFeRDAllowanceCharge[] getZFAllowances() { return null; @@ -264,8 +290,8 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); ZUGFeRDExporterFromA1 ze = new ZUGFeRDExporterFromA1().setProducer("My Application") - .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).ignorePDFAErrors() - .load(SOURCE_PDF)) { + .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("Extended")).ignorePDFAErrors() + .load(SOURCE_PDF)) { ze.setTransaction(this); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8); assertTrue(theXML.contains("59")); - assertTrue(zi.getUTF8().contains("")); - assertTrue(zi.getUTF8().contains("DE540815")); - assertTrue(zi.getUTF8().contains("DE99XX12345")); - assertFalse(zi.getUTF8().contains("")); - assertFalse(zi.getUTF8().contains("EUR")); - assertTrue(zi.getUTF8().contains("USD"));//currency should be USD, test for #150 + String resultXML=zi.getUTF8(); + assertTrue(resultXML.contains("59")); + assertTrue(resultXML.contains("")); + assertTrue(resultXML.contains("DE540815")); + assertTrue(resultXML.contains("DE99XX12345")); + assertTrue(resultXML.contains("")); + assertFalse(resultXML.contains("EUR")); + assertTrue(resultXML.contains("USD"));//currency should be USD, test for #150 // Reading ZUGFeRD assertEquals("496.00", zi.getAmount()); @@ -311,9 +338,9 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra try (InputStream SOURCE_PDF = this.getClass() .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505PDFA3.pdf"); - IZUGFeRDExporter ze = new ZUGFeRDExporterFromA3().setProducer("My Application") - .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).disableFacturX() - .load(SOURCE_PDF)) { + IZUGFeRDExporter ze = new ZUGFeRDExporterFromA3().setProducer("My Application") + .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).disableFacturX() + .load(SOURCE_PDF)) { ze.setTransaction(this); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8); assertTrue(theXML.contains("")); // maybe add a direct debit mandate to the class in the future then this would fail assertTrue(zi.getUTF8().contains("Hinterhaus")); assertTrue(zi.getUTF8().contains("0009845")); assertTrue(zi.getUTF8().contains("0008734")); diff --git a/validator/pom.xml b/validator/pom.xml index 0245f970..e3f27dcc 100644 --- a/validator/pom.xml +++ b/validator/pom.xml @@ -122,7 +122,7 @@ - +