diff --git a/History.md b/History.md index b2b4ab64..e8f81cdd 100644 --- a/History.md +++ b/History.md @@ -1,4 +1,6 @@ #558 +#686 +#739 2.16.2 ======= diff --git a/library/src/main/java/org/mustangproject/XMLTools.java b/library/src/main/java/org/mustangproject/XMLTools.java index d890c3d1..3fd71c63 100644 --- a/library/src/main/java/org/mustangproject/XMLTools.java +++ b/library/src/main/java/org/mustangproject/XMLTools.java @@ -129,7 +129,13 @@ public class XMLTools extends XMLWriter { * @return a util.Date, or null, if not parseable */ public static Date tryDate(String toParse) { - final SimpleDateFormat formatter = ZUGFeRDDateFormat.DATE.getFormatter(); + SimpleDateFormat formatter = null; + if (toParse.contains("-")) { + // from ubl + formatter = new SimpleDateFormat("yyyy-MM-dd"); + } else { + formatter = ZUGFeRDDateFormat.DATE.getFormatter(); + } try { return formatter.parse(toParse); } catch (final Exception e) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java index 6e5eb051..dc261749 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java @@ -775,6 +775,21 @@ public class ZUGFeRDInvoiceImporter { } } + xpr = xpath.compile("/*[local-name()=\"Invoice\"]/*[local-name()=\"InvoicePeriod\"]/*"); //UBL only + NodeList periodNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); + + for (int periodChildIndex = 0; periodChildIndex < periodNodes.getLength(); periodChildIndex++) { + String localName=periodNodes.item(periodChildIndex).getLocalName(); + if ((localName != null) && (periodNodes.item(periodChildIndex).getLocalName().equals("StartDate"))) { + deliveryPeriodStart = XMLTools.trimOrNull(periodNodes.item(periodChildIndex)); + } + if ((localName != null) && (periodNodes.item(periodChildIndex).getLocalName().equals("EndDate"))) { + deliveryPeriodEnd = XMLTools.trimOrNull(periodNodes.item(periodChildIndex)); + } + + } + + if ((deliveryPeriodStart != null) && (deliveryPeriodEnd != null)) { zpp.setDetailedDeliveryPeriod(XMLTools.tryDate(deliveryPeriodStart), XMLTools.tryDate(deliveryPeriodEnd)); } else if (deliveryPeriodStart != null) { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index b1b61257..10f28a3a 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -32,6 +32,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import com.fasterxml.jackson.databind.ObjectMapper; import org.mustangproject.*; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; @@ -254,7 +255,7 @@ public class ZF2PushTest extends TestCase { // 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))))); - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()) + Invoice i=new Invoice().setDueDate(new Date()).setIssueDate(new Date()) .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE") .setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562"))) @@ -263,8 +264,9 @@ public class ZF2PushTest extends TestCase { .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)).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")))); + ze.setTransaction(i); + String theXML = new String(ze.getProvider().getXML()); assertTrue(theXML.contains(" + + urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended + 123 + 2025-02-10 + 2025-02-10 + 380 + document level 1/2 + document level 2/2 + CHF + + 2020-10-01 + 2020-10-05 + 432 + + + 28934 + 9384 + + + + abc123 + + + + 376zreurzu0983 + + + + sender@test.org + + 0009845 + + + teststr + teststadt + 55232 + + DE + + + + DE0815 + + VAT + + + + 9990815 + + NOVAT + + + + Test company + + + + + + recipient@test.org + + 0088:4304171000002 + + + teststr.12 + Hinterhaus 3 + Entenhausen + 55232 + + DE + + + + DE4711 + + VAT + + + + Franz Müller + + + 01779999999 + franz@mueller.de + + + + + 2020-11-02 + + + teststr.12a + Entenhausen + 55232 + + DE + + + + + + just the other side of the street + + + + + Verwendungszweck + + + Please remit until 10.02.2025 + + + false + discount + 0.20 + + S + 16.00 + + VAT + + + + + true + quick delivery charge + 0.50 + + S + 16.00 + + VAT + + + + + 0.20 + + 1.28 + 0.20 + + S + 16.00 + + VAT + + + + + + 0.98 + 1.28 + 1.48 + 0.20 + 0.50 + 1.48 + + + a123 + item level 1/1 + 1.00000000 + 0.98 + + 2020-01-13 + 2020-01-15 + + + xxx + + + Testprodukt + + 4711 + + + 2001015001325 + + + S + 16.00 + + VAT + + + + + 0.98 + 1.00 + + false + 0.0200 + 1.0000 + + + +