diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index c8e66c0b..d42a011f 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -4,7 +4,7 @@ org.mustangproject.ZUGFeRD mustang Mustang - 1.4.0 + 1.4.1-SNAPSHOT The Mustang project is a java library to read and write ZUGFeRD meta data inside your invoice PDFs http://www.mustangproject.org/ @@ -98,6 +98,39 @@ true + + org.codehaus.mojo + templating-maven-plugin + 1.0.0 + + + filtering-java-templates + + filter-sources + + + + + + org.codehaus.mojo + jaxb2-maven-plugin + 2.3.1 + + + xjc + + xjc + + + + + 2.1 + org.mustangproject.ZUGFeRD.model + + src/main/schema/ZUGFeRD1p0.xsd + + + @@ -113,6 +146,30 @@ + + com.helger + ph-schematron + 4.3.1 + test + + + ph-commons + com.helger + + + ph-xml + com.helger + + + ph-jaxb + com.helger + + + Saxon-HE + net.sf.saxon + + + @@ -122,10 +179,12 @@ - 1.6 + 1.7 github + 1.7 -Xdoclint:none UTF-8 + 1.7 diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java new file mode 100644 index 00000000..8653e00c --- /dev/null +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java @@ -0,0 +1,228 @@ +package org.mustangproject.ZUGFeRD; + +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import javax.xml.transform.TransformerException; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.junit.FixMethodOrder; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class MustangReaderWriterCustomXMLTest extends TestCase { + + /** + * Create the test case + * + * @param testName + * name of the test case + */ + public MustangReaderWriterCustomXMLTest(String testName) { + super(testName); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() { + return new TestSuite(MustangReaderWriterCustomXMLTest.class); + } + + // //////// TESTS + // ////////////////////////////////////////////////////////////////////////////////////////// + + /** + * The exporter test bases on @{code + * ./src/test/MustangGnuaccountingBeispielRE-20140703_502blanko.pdf}, adds + * metadata, writes to @{code ./target/testout-*} and then imports to check the + * values. It would not make sense to have it run before the less complex + * importer test (which is probably redundant) --> as only Name Ascending is + * supported for Test Unit sequence, I renamed the Exporter Test test-Z-Export + */ + public void testZExport() throws Exception { + + final String TARGET_PDF = "./target/testout-MustangGnuaccountingBeispielRE-20170509_505newEdge.pdf"; + // the writing part + + try { + InputStream SOURCE_PDF = this.getClass() + .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); + + ZUGFeRDExporter zea1 = new ZUGFeRDExporterFromA1Factory().setProducer("My Application").setCreator("Test") + .loadFromPDFA1("./Source.pdf"); + String ownZUGFeRDXML = "\n" + + "\n" + "\n" + + "false\n" + "\n" + + "\n" + "\n" + + "urn:ferd:CrossIndustryDocument:invoice:1p0:extended\n" + "\n" + + "\n" + + "\n" + "\n" + + "RE-20170509/505\n" + "RECHNUNG\n" + + "380\n" + "\n" + + "20170509\n" + "\n" + + "\n" + "\n" + + "\n" + "\n" + + "Bei Spiel GmbH\n" + "\n" + + "12345\n" + "Ecke 12\n" + + "Stadthausen\n" + "DE\n" + + "\n" + "\n" + + "22/815/0815/4\n" + "\n" + + "\n" + "DE136695976\n" + + "\n" + "\n" + "\n" + + "Theodor Est\n" + "\n" + + "88802\n" + "Bahnstr. 42\n" + + "Spielkreis\n" + "DE\n" + + "\n" + "\n" + + "DE999999999\n" + "\n" + + "\n" + "\n" + + "\n" + "\n" + + "\n" + + "20170507\n" + + "\n" + "\n" + + "\n" + "\n" + + "RE-20170509/505\n" + + "EUR\n" + + "\n" + "42\n" + + "Überweisung\n" + "\n" + + "DE88 2008 0000 0970 3757 00\n" + + "\n" + + "\n" + "COBADEFFXXX\n" + + "Commerzbank\n" + "\n" + + "\n" + "\n" + + "11.20\n" + + "VAT\n" + + "160.00\n" + + "S\n" + + "7.00\n" + "\n" + + "\n" + + "63.84\n" + + "VAT\n" + + "336.00\n" + + "S\n" + + "19.00\n" + "\n" + + "\n" + + "Zahlbar ohne Abzug bis zum 30.05.2017\n" + + "\n" + "20170530\n" + + "\n" + "\n" + + "\n" + + "496.00\n" + + "0.00\n" + + "0.00\n" + + "496.00\n" + + "75.04\n" + + "571.04\n" + + "571.04\n" + + "\n" + + "\n" + "\n" + + "\n" + "1\n" + + "\n" + "\n" + + "\n" + + "160.0000\n" + + "1.0000\n" + + "\n" + "\n" + + "160.0000\n" + + "1.0000\n" + + "\n" + "\n" + + "\n" + + "1.0000\n" + + "\n" + "\n" + + "\n" + "VAT\n" + + "S\n" + + "7.00\n" + "\n" + + "\n" + + "160.00\n" + + "\n" + + "\n" + "\n" + "\n" + + "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung\n" + "\n" + + "\n" + "\n" + + "\n" + "\n" + + "\n" + "2\n" + + "\n" + "\n" + + "\n" + + "0.7900\n" + + "1.0000\n" + + "\n" + "\n" + + "0.7900\n" + + "1.0000\n" + + "\n" + "\n" + + "\n" + + "400.0000\n" + + "\n" + "\n" + + "\n" + "VAT\n" + + "S\n" + + "19.00\n" + "\n" + + "\n" + + "316.00\n" + + "\n" + + "\n" + "\n" + + "Luftballon: Bunt, ca. 500ml\n" + "\n" + + "\n" + "\n" + + "\n" + "\n" + + "3\n" + "\n" + + "\n" + "\n" + + "0.1000\n" + + "1.0000\n" + + "\n" + "\n" + + "0.1000\n" + + "1.0000\n" + + "\n" + "\n" + + "\n" + + "200.0000\n" + + "\n" + "\n" + + "\n" + "VAT\n" + + "S\n" + + "19.00\n" + "\n" + + "\n" + + "20.00\n" + + "\n" + + "\n" + "\n" + + "Heiße Luft pro Liter\n" + "\n" + + "\n" + "\n" + + "\n" + ""; + zea1.setZUGFeRDXMLData(ownZUGFeRDXML.getBytes()); + zea1.PDFattachZugferdFile(null); + + zea1.export(TARGET_PDF); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // now check the contents (like MustangReaderTest) + ZUGFeRDImporter zi = new ZUGFeRDImporter(); + zi.extract(TARGET_PDF); + // Reading ZUGFeRD + + String amount = null; + String bic = null; + String iban = null; + String holder = null; + String ref = null; + + if (zi.canParse()) { + zi.parse(); + amount = zi.getAmount(); + bic = zi.getBIC(); + iban = zi.getIBAN(); + holder = zi.getHolder(); + ref = zi.getForeignReference(); + } + + assertEquals(amount, "571.04"); + assertEquals(bic, "COBADEFFXXX"); + assertEquals(iban, "DE88 2008 0000 0970 3757 00"); + assertEquals(holder, "Bei Spiel GmbH"); + assertEquals(ref, "RE-20170509/505"); + + } + +}