From b557dc752c9291cfd68621f434c05fbe5f149f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jochen=20Sta=CC=88rk?= Date: Mon, 27 Nov 2017 18:31:14 +0100 Subject: [PATCH] allow new ZF2 profiles --- .../ZUGFeRD/XMPSchemaZugferd.java | 6 +- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 4 +- .../ZUGFeRD/ZUGFeRDConformanceLevel.java | 3 +- ...DocumentContextParameterTypeConstants.java | 6 -- .../org/mustangproject/toecount/Toecount.java | 55 +++++++++++++++++-- .../MustangReaderWriterCustomXMLTest.java | 5 +- .../ZUGFeRD/MustangReaderWriterTest.java | 3 +- 7 files changed, 65 insertions(+), 17 deletions(-) delete mode 100644 src/main/java/org/mustangproject/ZUGFeRD/model/DocumentContextParameterTypeConstants.java diff --git a/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaZugferd.java b/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaZugferd.java index ea2ba18b..2d2ee44f 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaZugferd.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/XMPSchemaZugferd.java @@ -20,7 +20,11 @@ public class XMPSchemaZugferd extends XMPSchema { setAboutAsSimple(""); - setTextPropertyValue("ConformanceLevel", conformanceLevel.name()); + String conformanceLevelValue=conformanceLevel.name(); + if (conformanceLevelValue.equals("BASICWL")) { + conformanceLevelValue="BASIC WL"; + } + setTextPropertyValue("ConformanceLevel", conformanceLevelValue); setTextPropertyValue("DocumentType", "INVOICE"); setTextPropertyValue("DocumentFileName", filename); setTextPropertyValue("Version", "1.0"); diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 0ea17a40..b854b8e8 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -181,6 +181,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + "\n"; } + + String xml= "\n" //$NON-NLS-1$ @@ -191,7 +193,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " \n" //$NON-NLS-1$ + " "+testBooleanStr+"\n" //$NON-NLS-1$ + " \n" //$NON-NLS-1$ - + " urn:ferd:CrossIndustryDocument:invoice:1p0:comfort\n" //$NON-NLS-1$ + + " urn:cen.eu:en16931:2017:compliant:factur-x.eu:1p0:extended\n" //$NON-NLS-1$ + " \n" //$NON-NLS-1$ + " \n" //$NON-NLS-1$ + " \n" //$NON-NLS-1$ diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDConformanceLevel.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDConformanceLevel.java index 2f2c7fd3..24acf263 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDConformanceLevel.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDConformanceLevel.java @@ -1,5 +1,6 @@ package org.mustangproject.ZUGFeRD; public enum ZUGFeRDConformanceLevel { - BASIC, COMFORT, EXTENDED; + BASIC, COMFORT, EXTENDED, EN16931/*=Comfort*/, MINIMUM, BASICWL /*basic without lines, less than basic*/, CIUS + ; } diff --git a/src/main/java/org/mustangproject/ZUGFeRD/model/DocumentContextParameterTypeConstants.java b/src/main/java/org/mustangproject/ZUGFeRD/model/DocumentContextParameterTypeConstants.java deleted file mode 100644 index c90ccb99..00000000 --- a/src/main/java/org/mustangproject/ZUGFeRD/model/DocumentContextParameterTypeConstants.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.mustangproject.ZUGFeRD.model; - -public class DocumentContextParameterTypeConstants { - public static final String COMFORT = "urn:ferd:CrossIndustryDocument:invoice:1p0:comfort"; - public static final String EXTENDED = "urn:ferd:CrossIndustryDocument:invoice:1p0:extended"; -} diff --git a/src/main/java/org/mustangproject/toecount/Toecount.java b/src/main/java/org/mustangproject/toecount/Toecount.java index cda35c58..fa2422b0 100755 --- a/src/main/java/org/mustangproject/toecount/Toecount.java +++ b/src/main/java/org/mustangproject/toecount/Toecount.java @@ -13,6 +13,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import org.mustangproject.ZUGFeRD.ZUGFeRDConformanceLevel; import org.mustangproject.ZUGFeRD.ZUGFeRDExporter; import org.mustangproject.ZUGFeRD.ZUGFeRDExporterFromA1Factory; import org.mustangproject.ZUGFeRD.ZUGFeRDExporterFromA3Factory; @@ -273,18 +274,62 @@ public class Toecount { outName = getFilenameFromUser("Ouput PDF", "invoice.ZUGFeRD.pdf", "pdf", false, true); String versionInput = ""; try { - versionInput = getStringFromUser("ZUGFeRD version", "1", "1|2"); + versionInput = getStringFromUser("ZUGFeRD version (1 or 2)", "1", "1|2"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } - // get version - // get profile + + String profileInput = ""; + int zfIntVersion=Integer.valueOf(versionInput); + ZUGFeRDConformanceLevel profile=ZUGFeRDConformanceLevel.EXTENDED; + if (zfIntVersion==1) { + try { + profileInput = getStringFromUser("ZUGFeRD profile b)asic, c)omfort or e)xtended", "e", "B|b|C|c|E|e").toLowerCase(); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (profileInput.equals("b")) { + profile=ZUGFeRDConformanceLevel.BASIC; + } else if (profileInput.equals("c")) { + profile=ZUGFeRDConformanceLevel.COMFORT; + } else if (profileInput.equals("e")) { + profile=ZUGFeRDConformanceLevel.EXTENDED; + + } + + } else if (zfIntVersion==2) { + try { + profileInput = getStringFromUser("ZUGFeRD profile [M]INIMUM, BASIC [W]L, [B]ASIC,\n" + + "[C]IUS, [E]N16931, E[X]TENDED", "E", "M|m|W|w|B|b|C|c|E|e|X|x|").toLowerCase(); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (profileInput.equals("m")) { + profile=ZUGFeRDConformanceLevel.MINIMUM; + } else if (profileInput.equals("w")) { + profile=ZUGFeRDConformanceLevel.BASICWL; + } else if (profileInput.equals("b")) { + profile=ZUGFeRDConformanceLevel.BASIC; + } else if (profileInput.equals("c")) { + profile=ZUGFeRDConformanceLevel.CIUS; + } else if (profileInput.equals("e")) { + profile=ZUGFeRDConformanceLevel.EN16931; + } else if (profileInput.equals("x")) { + profile=ZUGFeRDConformanceLevel.EXTENDED; + } + + } + ZUGFeRDExporter ze = new ZUGFeRDExporterFromA3Factory().setProducer("Toecount") - .setCreator(System.getProperty("user.name")).load(pdfName); - ze.setZUGFeRDVersion(Integer.valueOf(versionInput)); + .setCreator(System.getProperty("user.name")).setZUGFeRDConformanceLevel(profile).load(pdfName); + ze.setZUGFeRDVersion(zfIntVersion); ze.setZUGFeRDXMLData(Files.readAllBytes(Paths.get(xmlName))); diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java index 4960de8e..d42f5ba2 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java @@ -51,13 +51,14 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { InputStream SOURCE_PDF = this.getClass() .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); - ZUGFeRDExporter zea1 = new ZUGFeRDExporterFromA1Factory().setProducer("My Application").setCreator("Test") + ZUGFeRDExporter zea1 = new ZUGFeRDExporterFromA1Factory().setProducer("My Application").setCreator("Test").setZUGFeRDConformanceLevel(ZUGFeRDConformanceLevel.BASIC) .load(SOURCE_PDF); + /* we have much more information than just in the basic profile (comfort or extended) but it's perfectly valid to provide more information, just not less. */ String ownZUGFeRDXML = "\n" + "\n" + "\n" + "false\n" + "\n" + "\n" + "\n" - + "urn:ferd:CrossIndustryDocument:invoice:1p0:extended\n" + "\n" + + "urn:ferd:CrossIndustryDocument:invoice:1p0:basic\n" + "\n" + "\n" + "\n" + "\n" + "RE-20170509/505\n" + "RECHNUNG\n" diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java index 9121edc1..da1c5f59 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java @@ -366,7 +366,7 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta try (InputStream SOURCE_PDF = this.getClass() .getResourceAsStream("/MustangGnuaccountingBeispielRE-20171118_506blanko.pdf"); - ZUGFeRDExporter ze = new ZUGFeRDExporterFromA1Factory().load(SOURCE_PDF)) { + ZUGFeRDExporter ze = new ZUGFeRDExporterFromA1Factory().load(SOURCE_PDF)) { ze.setZUGFeRDVersion(2); ze.PDFattachZugferdFile(this); @@ -379,6 +379,7 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta String pdfContent = baos.toString("UTF-8"); assertFalse(pdfContent.indexOf("(via mustangproject.org") == -1); + assertFalse(pdfContent.indexOf("urn:cen.eu:en16931:2017:compliant:factur-x.eu:1p0:extended")==-1); } // now check the contents (like MustangReaderTest)