diff --git a/.gitignore b/.gitignore index de7b2f4b..ece11c66 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,12 @@ target/ pom.xml.* bin/ /.gradle/ + +# ignore intelliJ foobar +*.iml +.idea + +# ignore test files +ZUGFeRD-*-test + +dependency-reduced-pom.xml \ No newline at end of file diff --git a/ZUGFeRD2-invoice.xml b/ZUGFeRD2-invoice.xml index cf4be5c7..ae3a1a03 100644 --- a/ZUGFeRD2-invoice.xml +++ b/ZUGFeRD2-invoice.xml @@ -26,7 +26,7 @@ Migrated by Mustangproject XSLT 1 - Künstlerische Gestaltung (Stunde): Einer Beispielrechnung + Künstlerische Gestaltung (Stunde): Einer Beispielrechnung @@ -90,7 +90,7 @@ Migrated by Mustangproject XSLT 3 - Heiße Luft pro Liter + Heiße Luft pro Liter @@ -158,12 +158,14 @@ Migrated by Mustangproject XSLT EUR 42 - Überweisung + Überweisung DE88 2008 0000 0970 3757 00 + 44421800 COBADEFFXXX + 41441604 Commerzbank diff --git a/pom.xml b/pom.xml index f3d5aef5..508ced61 100644 --- a/pom.xml +++ b/pom.xml @@ -39,8 +39,8 @@ -Xdoclint:none 1.7 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java b/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java index 3077e610..da6ebed3 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java @@ -83,7 +83,13 @@ public interface IZUGFeRDExportableTransaction { */ String getOwnBIC(); - /*** + /*** + * BLZ of the sender + * @return the BLZ code of the recipient sender's bank + */ + String getOwnBLZ(); + + /*** * Bank name of the sender * @return the name of the sender's bank */ @@ -95,7 +101,13 @@ public interface IZUGFeRDExportableTransaction { */ String getOwnIBAN(); - /** + /** + * IBAN of the sender + * @return the Account Number of the invoice sender's bank account + */ + String getOwnKto(); + + /** * Tax ID (not VAT ID) of the sender * @return Tax ID (not VAT ID) of the sender */ diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 58407e7b..dfac61cc 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -344,9 +344,11 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " Überweisung\n" //$NON-NLS-1$ + " \n" //$NON-NLS-1$ + " "+trans.getOwnIBAN()+"\n" //$NON-NLS-1$ //$NON-NLS-2$ + + " "+trans.getOwnKto()+"\n" //$NON-NLS-1$ //$NON-NLS-2$ + " \n" //$NON-NLS-1$ + " \n" //$NON-NLS-1$ + " "+trans.getOwnBIC()+"\n" //$NON-NLS-1$ //$NON-NLS-2$ + + " "+ trans.getOwnBLZ()+"\n" //$NON-NLS-1$ //$NON-NLS-2$ // + " "+trans.getOwnBankName()+"\n" //$NON-NLS-1$ //$NON-NLS-2$ + " \n" //$NON-NLS-1$ + " \n"; //$NON-NLS-1$ diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java index 582c5596..0b6989bb 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java @@ -161,7 +161,7 @@ public class ZUGFeRDExporter implements Closeable { public static String getFilenameForVersion(int ver) { if (ver == 1) { return "ZUGFeRD-invoice.xml"; - } else if (ver == 2)&&(isFacturX) { + } else if ((ver == 2) || (isFacturX)) { return "factur-x.xml"; } else { throw new IllegalArgumentException("Version not supported"); diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index bf76a855..bac9e128 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -63,8 +63,10 @@ public class ZUGFeRDImporter { private boolean containsMeta = false; /** @var the reference (i.e. invoice number) of the sender */ private String foreignReference; + private String BLZ; private String BIC; private String IBAN; + private String KTO; private String holder; private String amount; private String dueDate; @@ -127,7 +129,7 @@ public class ZUGFeRDImporter { //start InputStream XMP=doc.getDocumentCatalog().getMetadata().exportXMPMetadata(); - xmpString=convertStreamToString(XMP); + xmpString=convertStreamToString(XMP); etn = names.getEmbeddedFiles(); if (etn == null) { return; @@ -283,9 +285,12 @@ public class ZUGFeRDImporter { Node detail = bookingDetails.item(detailIndex); if ((detail.getLocalName() != null) && (detail.getLocalName().equals("IBANID"))) { //$NON-NLS-1$ setIBAN(detail.getTextContent()); - } - } + if ((detail.getLocalName() != null) && (detail.getLocalName().equals("ProprietaryID"))) { //$NON-NLS-1$ + setKTO(detail.getTextContent()); + + } + } } ndList = document.getElementsByTagNameNS("*", "PayeeSpecifiedCreditorFinancialInstitution");// ZF1 //$NON-NLS-1$ @@ -299,6 +304,9 @@ public class ZUGFeRDImporter { if ((detail.getLocalName() != null) && (detail.getLocalName().equals("BICID"))) { //$NON-NLS-1$ setBIC(detail.getTextContent()); } + if ((detail.getLocalName() != null) && (detail.getLocalName().equals("GermanBankleitzahlID"))) { //$NON-NLS-1$ + setBLZ(detail.getTextContent()); + } if ((detail.getLocalName() != null) && (detail.getLocalName().equals("Name"))) { //$NON-NLS-1$ setBankName(detail.getTextContent()); } @@ -393,6 +401,24 @@ public class ZUGFeRDImporter { this.foreignReference = foreignReference; } + /** + * + * @return the sender's bank's BLZ code + */ + public String getBLZ() { + if (!parsed) { + throw new RuntimeException("use extract() before requesting a value"); + } + if (BLZ==null) { + parse(); + } + return BLZ; + } + + private void setBLZ(String blz) { + this.BLZ = blz; + } + /** * * @return the sender's bank's BIC code @@ -433,7 +459,21 @@ public class ZUGFeRDImporter { return IBAN; } - /** + /** + * + * @return the sender's KTO + */ + public String getKTO() { + if (!parsed) { + throw new RuntimeException("use extract() before requesting a value"); + } + if (KTO==null) { + parse(); + } + return KTO; + } + + /** * * @return the sender's bank name */ @@ -451,7 +491,11 @@ public class ZUGFeRDImporter { this.IBAN = IBAN; } - /** + private void setKTO(String KTO) { + this.KTO = KTO; + } + + /** * * @return the name of the owner of the sender's bank account */ diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java index f50cc697..ff9fd022 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java @@ -363,6 +363,9 @@ class ZUGFeRDTransactionModelConverter { IDType iban = xmlFactory.createIDType(); iban.setValue(trans.getOwnIBAN()); bankAccount.setIBANID(iban); + IDType kto = xmlFactory.createIDType(); + kto.setValue(trans.getOwnKto()); + bankAccount.setProprietaryID(kto); paymentData.setPayeePartyCreditorFinancialAccount(bankAccount); CreditorFinancialInstitutionType bankData = xmlFactory @@ -373,6 +376,10 @@ class ZUGFeRDTransactionModelConverter { TextType bankName = xmlFactory.createTextType(); bankName.setValue(trans.getOwnBankName()); bankData.setName(bankName); + IDType blz = xmlFactory.createIDType(); + blz.setValue(trans.getOwnBLZ()); + bankData.setGermanBankleitzahlID(blz); + paymentData.setPayeeSpecifiedCreditorFinancialInstitution(bankData); return paymentData; } diff --git a/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransactionImpl.java b/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransactionImpl.java index fd46abb2..2ac05c96 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransactionImpl.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransactionImpl.java @@ -30,6 +30,8 @@ public class IZUGFeRDExportableTransactionImpl implements IZUGFeRDExportableTran private IZUGFeRDAllowanceCharge[] zFLogisticsServiceCharges; private IZUGFeRDExportableItem[] zFItems; private IZUGFeRDExportableContact recipient; + private String ownKto; + private String ownBLZ; private String ownBIC; private String ownBankName; private String ownIBAN; @@ -91,6 +93,16 @@ public class IZUGFeRDExportableTransactionImpl implements IZUGFeRDExportableTran return recipient; } + @Override + public String getOwnKto() { + return ownKto; + } + + @Override + public String getOwnBLZ() { + return ownBLZ; + } + @Override public String getOwnBIC() { return ownBIC; @@ -211,6 +223,11 @@ public class IZUGFeRDExportableTransactionImpl implements IZUGFeRDExportableTran return this; } + public IZUGFeRDExportableTransactionImpl setOwnBLZ(String ownBLZ) { + this.ownBLZ = ownBLZ; + return this; + } + public IZUGFeRDExportableTransactionImpl setOwnBIC(String ownBIC) { this.ownBIC = ownBIC; return this; @@ -221,6 +238,11 @@ public class IZUGFeRDExportableTransactionImpl implements IZUGFeRDExportableTran return this; } + public IZUGFeRDExportableTransactionImpl setOwnKto(String ownKto) { + this.ownKto = ownKto; + return this; + } + public IZUGFeRDExportableTransactionImpl setOwnIBAN(String ownIBAN) { this.ownIBAN = ownIBAN; return this; diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java index a184e89e..2245a3dc 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java @@ -216,10 +216,12 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { " 42\n" + " Überweisung\n" + " \n" + - " DE88 2008 0000 0970 3757 00\n" + - " \n" + + " DE88 2008 0000 0970 3757 00\n" + + " 44421800\n" + + " \n" + " \n" + - " COBADEFFXXX\n" + + " COBADEFFXXX\n" + + " 41441604\n" + " Commerzbank\n" + " \n" + " \n" + @@ -276,22 +278,28 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { String amount = null; String bic = null; + String blz = null; String iban = null; + String kto = null; String holder = null; String ref = null; if (zi.canParse()) { zi.parse(); amount = zi.getAmount(); + blz = zi.getBLZ(); bic = zi.getBIC(); iban = zi.getIBAN(); + kto = zi.getKTO(); holder = zi.getHolder(); ref = zi.getForeignReference(); } assertEquals(amount, "571.04"); + assertEquals(blz, "41441604"); assertEquals(bic, "COBADEFFXXX"); assertEquals(iban, "DE88 2008 0000 0970 3757 00"); + assertEquals(kto, "44421800"); assertEquals(holder, "Bei Spiel GmbH"); assertEquals(ref, "RE-20171118/506"); } @@ -350,9 +358,13 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { + "\n" + "42\n" + "Überweisung\n" + "\n" + "DE88 2008 0000 0970 3757 00\n" + + "44421800\n" + "\n" - + "\n" + "COBADEFFXXX\n" - + "Commerzbank\n" + "\n" + + "\n" + + "COBADEFFXXX\n" + + "41441604\n" + + "Commerzbank\n" + + "\n" + "\n" + "\n" + "11.20\n" + "VAT\n" @@ -467,7 +479,9 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { String amount = null; String bic = null; + String blz = null; String iban = null; + String kto = null; String holder = null; String ref = null; @@ -475,14 +489,18 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { zi.parse(); amount = zi.getAmount(); bic = zi.getBIC(); + blz = zi.getBLZ(); iban = zi.getIBAN(); + kto = zi.getKTO(); holder = zi.getHolder(); ref = zi.getForeignReference(); } assertEquals(amount, "571.04"); assertEquals(bic, "COBADEFFXXX"); + assertEquals(blz, "41441604"); assertEquals(iban, "DE88 2008 0000 0970 3757 00"); + assertEquals(kto, "44421800"); assertEquals(holder, "Bei Spiel GmbH"); assertEquals(ref, "RE-20170509/505"); } diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java index 288a0d81..e813dbe4 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java @@ -59,6 +59,18 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp return "RE-20170509/505"; } + @Override + public String getOwnKto() + { + return "44421800"; + } + + @Override + public String getOwnBLZ() + { + return "41441604"; + } + @Override public String getOwnBIC() { @@ -364,7 +376,7 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp // //////// TESTS ////////////////////////////////////////////////////////////////////////////////////////// /** - * The importer test imports from ./src/test/MustangGnuaccountingBeispielRE-20151008_504.pdf to check the values. + * The importer test imports from ./src/test/MustangGnuaccountingBeispielRE-20170509_505.pdf to check the values. * --> as only Name Ascending is supported for Test Unit sequence, I renamed the this test-A-Export to run before * testZExport * @@ -379,7 +391,9 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp String amount = null; String bic = null; + String blz = null; String iban = null; + String kto = null; String holder = null; String ref = null; String dueDate = null; @@ -389,7 +403,9 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp zi.parse(); amount = zi.getAmount(); bic = zi.getBIC(); + blz = zi.getBLZ(); iban = zi.getIBAN(); + kto = zi.getKTO(); holder = zi.getHolder(); dueDate = zi.getDueDate(); ref = zi.getForeignReference(); @@ -397,7 +413,9 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp assertEquals(amount, "571.04"); assertEquals(bic, getOwnBIC()); + assertEquals(blz, getOwnBLZ()); assertEquals(iban, getOwnIBAN()); + assertEquals(kto, getOwnKto()); assertEquals(holder, getOwnOrganisationName()); assertEquals(dueDate, "20170530"); @@ -439,7 +457,9 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp String amount = null; String bic = null; + String blz = null; String iban = null; + String kto = null; String holder = null; String ref = null; @@ -448,14 +468,18 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp zi.parse(); amount = zi.getAmount(); bic = zi.getBIC(); + blz = zi.getBLZ(); iban = zi.getIBAN(); + kto = zi.getKTO(); holder = zi.getHolder(); ref = zi.getForeignReference(); } assertEquals(amount, "571.04"); assertEquals(bic, getOwnBIC()); + assertEquals(blz, getOwnBLZ()); assertEquals(iban, getOwnIBAN()); + assertEquals(kto, getOwnKto()); assertEquals(holder, getOwnOrganisationName()); assertEquals(ref, getNumber()); diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java index b7a63266..621fb874 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java @@ -56,7 +56,17 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta return "RE-20171118/506"; } - @Override + @Override + public String getOwnKto() { + return "44421800"; + } + + @Override + public String getOwnBLZ() { + return "41441604"; + } + + @Override public String getOwnBIC() { return "COBADEFFXXX"; } @@ -345,23 +355,29 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta // Reading ZUGFeRD String amount = null; + String blz = null; String bic = null; String iban = null; + String kto = null; String holder = null; String ref = null; if (zi.canParse()) { zi.parse(); amount = zi.getAmount(); + blz = zi.getBLZ(); bic = zi.getBIC(); iban = zi.getIBAN(); + kto = zi.getKTO(); holder = zi.getHolder(); ref = zi.getForeignReference(); } // this resembles the data written in MustangReaderWriterCustomXMLTest assertEquals(amount, "571.04"); - assertEquals(bic, "COBADEFFXXX"); + assertEquals(blz, "41441604"); + assertEquals(bic, "COBADEFFXXX"); assertEquals(iban, "DE88 2008 0000 0970 3757 00"); + assertEquals(kto, "44421800"); assertEquals(holder, "Bei Spiel GmbH"); assertEquals(ref, "RE-20170509/505"); @@ -514,6 +530,7 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta String amount = null; String bic = null; String iban = null; + String kto = null; String holder = null; String ref = null; if (zi.canParse()) { @@ -521,6 +538,7 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta amount = zi.getAmount(); bic = zi.getBIC(); iban = zi.getIBAN(); + kto = zi.getKTO(); holder = zi.getHolder(); ref = zi.getForeignReference(); } @@ -528,6 +546,7 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta assertEquals(amount, "571.04"); assertEquals(bic, getOwnBIC()); assertEquals(iban, getOwnIBAN()); + assertEquals(kto, getOwnKto()); assertEquals(holder, getOwnOrganisationName()); assertEquals(ref, getNumber()); diff --git a/src/test/resources/MustangGnuaccountingBeispielRE-20170509_505.pdf b/src/test/resources/MustangGnuaccountingBeispielRE-20170509_505.pdf index 14976a45..d2bcf218 100644 Binary files a/src/test/resources/MustangGnuaccountingBeispielRE-20170509_505.pdf and b/src/test/resources/MustangGnuaccountingBeispielRE-20170509_505.pdf differ diff --git a/src/test/resources/migration/input/ZUGFeRD1-invoice-adjusted.xml b/src/test/resources/migration/input/ZUGFeRD1-invoice-adjusted.xml index f3729478..70db824b 100644 --- a/src/test/resources/migration/input/ZUGFeRD1-invoice-adjusted.xml +++ b/src/test/resources/migration/input/ZUGFeRD1-invoice-adjusted.xml @@ -77,9 +77,11 @@ Überweisung DE88 2008 0000 0970 3757 00 + 44421800 COBADEFFXXX + 41441604 Commerzbank diff --git a/src/test/resources/migration/input/ZUGFeRD1-invoice.xml b/src/test/resources/migration/input/ZUGFeRD1-invoice.xml index c9dbbe2c..4b3ddba2 100644 --- a/src/test/resources/migration/input/ZUGFeRD1-invoice.xml +++ b/src/test/resources/migration/input/ZUGFeRD1-invoice.xml @@ -77,9 +77,11 @@ Überweisung DE88 2008 0000 0970 3757 00 + 44421800 COBADEFFXXX + 41441604 Commerzbank diff --git a/src/test/resources/migration/reference/ZUGFeRD2-invoice.xml b/src/test/resources/migration/reference/ZUGFeRD2-invoice.xml index 4247df96..12043217 100644 --- a/src/test/resources/migration/reference/ZUGFeRD2-invoice.xml +++ b/src/test/resources/migration/reference/ZUGFeRD2-invoice.xml @@ -177,9 +177,11 @@ Migrated by Mustangproject XSLT Überweisung DE88 2008 0000 0970 3757 00 + 44421800 COBADEFFXXX + 41441604 Commerzbank