From 70d110ef6d1644a40e2ffce377438f0b0a4955a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jochen=20Sta=CC=88rk?= Date: Thu, 3 Sep 2020 18:32:34 +0200 Subject: [PATCH] preliminary updates --- History.md | 7 + .../org/mustangproject/commandline/Main.java | 2 +- .../main/java/org/mustangproject/Invoice.java | 1 + .../ZUGFeRD/IExportableTransaction.java | 2 +- .../IZUGFeRDTradeSettlementPayment.java | 33 --- .../ZUGFeRD/ZUGFeRDExporterFromA3.java | 6 + .../ZUGFeRD/BackwardCompatibilityTest.java | 5 - .../IZUGFeRDTradeSettlementPaymentImpl.java | 15 -- .../ZUGFeRD/MustangReaderTestCase.java | 15 -- .../ZUGFeRD/MustangReaderWriterEdgeTest.java | 3 +- .../ZUGFeRD/MustangReaderWriterTest.java | 11 +- .../mustangproject/ZUGFeRD/ZF2PushTest.java | 198 +++++++++++++++++- 12 files changed, 218 insertions(+), 80 deletions(-) diff --git a/History.md b/History.md index c34fbf60..865d410b 100644 --- a/History.md +++ b/History.md @@ -27,6 +27,7 @@ switch - javadoc export - have visualizer + ### 2.0 still todo - release notes - verapdf as prevalidation? @@ -41,11 +42,17 @@ switch - *visualizer tests - *validator not to log to stdout - *validator not to XR error on ZF files (only notices) +- *from A3 does not seem tow ork see mustangreaderwriteredgetest:testedgeexport - xmp errors may not show correctly in log - switch for no log and no notices - merge readmes and history.md - homepage to be updated accordingly - confirm correct generation from pdf/a3 files zf2edgetest +- *correctiontest exports zf1+zf2? +- *use validator in tests of library +- *invoiceprovider currencyid missing +- *USt 0% wird aus invoice-klasse noch nicht sauber abgefangen +- *ownContact sollte in einen Contact schreiben 1.7.7 ===== diff --git a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java index 3b1964d0..d8fa6996 100755 --- a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java +++ b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java @@ -594,7 +594,7 @@ public class Main { System.out.println("ZUGFeRD XML source set to " + sourceName); } if (outName == null) { - outName = getFilenameFromUser("ZUGFeRD 2.0 XML target", "factur-x.html", "html", false, true); + outName = getFilenameFromUser("ZUGFeRD 2.0 HTML target", "factur-x.html", "html", false, true); } else { System.out.println("ZUGFeRD 1.0 XML source set to " + outName); } diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index 3e90490e..dd9ae8e5 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -41,6 +41,7 @@ public class Invoice implements IExportableTransaction { public Invoice() { ZFItems = new ArrayList(); + setCurrency("EUR"); } @Override diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java index 48e9a3d5..e4c89071 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java @@ -47,7 +47,7 @@ public interface IExportableTransaction { /** * * - * @return Code of Document + * @return Code number of Document type, e.g. "380" for invoiceF */ default String getDocumentCode() { return DocumentCodeTypeConstants.INVOICE; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java index 54e1c480..bfb1cc66 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java @@ -43,26 +43,6 @@ public interface IZUGFeRDTradeSettlementPayment extends IZUGFeRDTradeSettlement } - /** - * BLZ of the sender - * - * @return the BLZ code of the recipient sender's bank - */ - default String getOwnBLZ() { - return null; - } - - - /** - * Bank name of the sender - * - * @return the name of the sender's bank - */ - default String getOwnBankName() { - return null; - } - - /** * IBAN of the sender * @@ -73,25 +53,12 @@ public interface IZUGFeRDTradeSettlementPayment extends IZUGFeRDTradeSettlement } - /** - * IBAN of the sender - * - * @return the Account Number of the invoice sender's bank account - */ - default String getOwnKto() { - return null; - } - default String getSettlementXML() { String xml = " \n" + " 42\n" + " Überweisung\n" + " \n" + " " + XMLTools.encodeXML(getOwnIBAN()) + "\n"; //$NON-NLS-2$ - if (getOwnKto()!=null) { - xml+= " " + XMLTools.encodeXML(getOwnKto()) + "\n"; //$NON-NLS-2$ - - } xml+= " \n" + " \n" + " " + XMLTools.encodeXML(getOwnBIC()) + "\n" //$NON-NLS-2$ diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java index 3c5c2067..bb48a4db 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java @@ -113,6 +113,11 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte return xmlProvider; } + public ZUGFeRDExporterFromA3 addAdditionalFile(String name, byte[] content) { + + additionalFiles.put(name,content); + return this; + } /*** * internal helper function: get namespace for given zugferd or factur-x version @@ -512,6 +517,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte PDFAttachGenericFile(doc, filename, "Alternative", "Invoice metadata conforming to ZUGFeRD standard (http://www.ferd-net.de/front_content.php?idcat=231&lang=4)", "text/xml", xmlProvider.getXML()); + for (String filenameAdditional : additionalFiles.keySet()) { PDFAttachGenericFile(doc, filenameAdditional, "Supplement", "ZUGFeRD extension/additional data", "text/xml", additionalFiles.get(filenameAdditional)); } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java index 4415fe65..af5e9cab 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java @@ -198,11 +198,6 @@ public class BackwardCompatibilityTest extends TestCase implements IExportableTr return "bla"; } - @Override - public String getOwnBankName() { - return "bla"; - } - @Override public String getOwnIBAN() { return "bla"; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPaymentImpl.java b/library/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPaymentImpl.java index 8ad9839a..f606e39e 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPaymentImpl.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPaymentImpl.java @@ -27,26 +27,11 @@ public class IZUGFeRDTradeSettlementPaymentImpl implements IZUGFeRDTradeSettleme private String ownIBAN; private String ownPaymentInfoText; - @Override - public String getOwnKto() { - return ownKto; - } - - @Override - public String getOwnBLZ() { - return ownBLZ; - } - @Override public String getOwnBIC() { return ownBIC; } - @Override - public String getOwnBankName() { - return ownBankName; - } - @Override public String getOwnIBAN() { return ownIBAN; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderTestCase.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderTestCase.java index c605ae63..a24f5a2d 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderTestCase.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderTestCase.java @@ -38,26 +38,11 @@ public abstract class MustangReaderTestCase extends TestCase implements IExporta protected class Payment implements IZUGFeRDTradeSettlementPayment { - @Override - public String getOwnKto() { - return "44421800"; - } - - @Override - public String getOwnBLZ() { - return "41441604"; - } - @Override public String getOwnBIC() { return "COBADEFFXXX"; } - @Override - public String getOwnBankName() { - return "Commerzbank"; - } - @Override public String getOwnPaymentInfoText() { return "Überweisung"; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java index 25042dea..cafb8f73 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java @@ -23,6 +23,7 @@ import junit.framework.TestSuite; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; @@ -203,7 +204,7 @@ public class MustangReaderWriterEdgeTest extends MustangReaderTestCase { try (InputStream SOURCE_PDF = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505PDFA3.pdf"); ) { - IZUGFeRDExporter ze = new ZUGFeRDExporterFromA3() + ZUGFeRDExporterFromA3 ze = new ZUGFeRDExporterFromA3() .setProducer("My Application") .setCreator(System.getProperty("user.name")) .setZUGFeRDVersion(1) diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java index 9ed67036..575e2d41 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java @@ -430,7 +430,16 @@ public class MustangReaderWriterTest extends MustangReaderTestCase { try (InputStream SOURCE_PDF = this.getClass() .getResourceAsStream("/MustangGnuaccountingBeispielRE-20171118_506blanko.pdf"); - IZUGFeRDExporter ze = new ZUGFeRDExporterFromA1().setZUGFeRDVersion(2).setProfile(Profiles.EN16931).load(SOURCE_PDF)) { + ZUGFeRDExporterFromA1 ze = new ZUGFeRDExporterFromA1().setZUGFeRDVersion(2).setProfile(Profiles.EN16931).load(SOURCE_PDF)) { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int length; + while ((length = SOURCE_PDF.read(buffer)) != -1) { + result.write(buffer, 0, length); + } + + ze.addAdditionalFile("test.pdf", result.toByteArray()); + ze.setTransaction(this); ze.disableAutoClose(true); ze.export(TARGET_PDF); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 3be92729..02e9be52 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -35,25 +35,68 @@ import junit.framework.TestCase; @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class ZF2PushTest extends TestCase { +public class ZF2PushTest extends TestCase { final String TARGET_PDF = "./target/testout-ZF2Push.pdf"; + final String TARGET_CORRECTIONPDF = "./target/testout-ZF2Correction.pdf"; public void testPushExport() { // the writing part - String orgname="Test company"; - String number="123"; - String amountStr="1.00"; - BigDecimal amount=new BigDecimal(amountStr); + String orgname = "Test company"; + String number = "123"; + String amountStr = "1.00"; + BigDecimal amount = new BigDecimal(amountStr); try (InputStream SOURCE_PDF = this.getClass() .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505.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).ignorePDFAErrors() + .load(SOURCE_PDF)) { - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setOwnOrganisationName(orgname).setOwnStreet("teststr").setOwnZIP("55232").setOwnLocation("teststadt").setOwnCountry("DE").setOwnTaxID("4711").setOwnVATID("0815").setRecipient(new Contact("Franz Müller", "0177123456", "fmueller@test.com", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number).addItem(new Item(new Product("Testprodukt","","C62",new BigDecimal(0)),amount,new BigDecimal(1.0)))); + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setOwnOrganisationName(orgname).setOwnStreet("teststr").setOwnZIP("55232").setOwnLocation("teststadt").setOwnCountry("DE").setOwnTaxID("4711").setOwnVATID("DE19990815").setRecipient(new Contact("Franz Müller", "0177123456", "fmueller@test.com", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(0)), amount, new BigDecimal(1.0)))); + String theXML = new String(ze.getProvider().getXML()); + assertTrue(theXML.contains("