diff --git a/History.md b/History.md index 96705d78..811f1657 100644 --- a/History.md +++ b/History.md @@ -45,6 +45,7 @@ switch - delivery period, - corrected invoices, - contacts also for recipients + - absolute and relative allowances and charges on item and document level, ### 2.0 still todo - dont show empty tax number field @@ -57,7 +58,6 @@ switch - confirm correct generation from pdf/a3 files zf2edgetest - *correctiontest exports zf1+zf2? - *USt 0% wird aus invoice-klasse noch nicht sauber abgefangen -- absolute and relative allowances and charges on item and document level, - finalize invoiceimporter Alpha2 2020-09-15 Alpha1 2020-08-06 diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java index a4ae4fed..2ab750e6 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java @@ -12,10 +12,15 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter { public ZUGFeRDInvoiceImporter(String filename) { super(filename); } + public Invoice extractInvoice() { - String number="AB123"; - Invoice zpp=new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty("company","teststr","55232","teststadt","DE")).setOwnTaxID("4711").setOwnVATID("0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number); + String number = "AB123"; + /** + * dummywerte sind derzeit noch setDueDate setIssueDate setDeliveryDate setSender setRecipient setnumber + * bspw. due date //ExchangedDocument//IssueDateTime//DateTimeString : due date optional + */ + Invoice zpp = new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty("company", "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number); //.addItem(new Item(new Product("Testprodukt","","C62",new BigDecimal(0)),amount,new BigDecimal(1.0))) zpp.setOwnOrganisationName(extractString("//SellerTradeParty/Name")); @@ -27,36 +32,45 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter { "//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]"); NodeList nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); - if (nodes.getLength() == 0) { - } else { - for (int i = 0; i < nodes.getLength(); i++) { - //nodes.item(i).getTextContent())) { - Node currentItemNode=nodes.item(i); - NodeList itemChilds=currentItemNode.getChildNodes(); - String price="0"; - for (int itemChildIndex = 0; itemChildIndex < itemChilds.getLength(); itemChildIndex++) { - if (itemChilds.item(itemChildIndex).getNodeName().equals("ram:SpecifiedLineTradeAgreement")) { - NodeList tradeLineChilds = itemChilds.item(itemChildIndex).getChildNodes(); - for (int tradeLineChildIndex = 0; tradeLineChildIndex < tradeLineChilds.getLength(); tradeLineChildIndex++) { - if (tradeLineChilds.item(tradeLineChildIndex).getNodeName().equals("ram:NetPriceProductTradePrice")) { - NodeList netChilds = tradeLineChilds.item(tradeLineChildIndex).getChildNodes(); - for (int netIndex = 0; netIndex < netChilds.getLength(); netIndex++) { - if (netChilds.item(netIndex).getNodeName().equals("ram:ChargeAmount")) { - price = netChilds.item(netIndex).getTextContent();//ram:ChargeAmount + if (nodes.getLength() == 0) { + } else { + for (int i = 0; i < nodes.getLength(); i++) { + //nodes.item(i).getTextContent())) { + Node currentItemNode = nodes.item(i); + NodeList itemChilds = currentItemNode.getChildNodes(); + String price = "0"; + String quantity = "0"; + for (int itemChildIndex = 0; itemChildIndex < itemChilds.getLength(); itemChildIndex++) { + if (itemChilds.item(itemChildIndex).getNodeName().equals("ram:SpecifiedLineTradeAgreement")) { + NodeList tradeLineChilds = itemChilds.item(itemChildIndex).getChildNodes(); + for (int tradeLineChildIndex = 0; tradeLineChildIndex < tradeLineChilds.getLength(); tradeLineChildIndex++) { + if (tradeLineChilds.item(tradeLineChildIndex).getNodeName().equals("ram:NetPriceProductTradePrice")) { + NodeList netChilds = tradeLineChilds.item(tradeLineChildIndex).getChildNodes(); + for (int netIndex = 0; netIndex < netChilds.getLength(); netIndex++) { + if (netChilds.item(netIndex).getNodeName().equals("ram:ChargeAmount")) { + price = netChilds.item(netIndex).getTextContent();//ram:ChargeAmount + } } } } } + if (itemChilds.item(itemChildIndex).getNodeName().equals("ram:SpecifiedLineTradeDelivery")) { + NodeList tradeLineChilds = itemChilds.item(itemChildIndex).getChildNodes(); + for (int tradeLineChildIndex = 0; tradeLineChildIndex < tradeLineChilds.getLength(); tradeLineChildIndex++) { + if (tradeLineChilds.item(tradeLineChildIndex).getNodeName().equals("ram:BilledQuantity")) { + quantity = tradeLineChilds.item(tradeLineChildIndex).getTextContent(); + } + } + } } - } // Logger.getLogger(ZUGFeRDInvoiceImporter.class.getName()).log(Level.INFO, "deb "+price); +// dummywerte sind derzeit noch produkname, beschreibung, unit, VAT percent, menge + zpp.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(0)), new BigDecimal(price), new BigDecimal(quantity))); + } - zpp.addItem(new Item(new Product("Testprodukt","","C62",new BigDecimal(0)),new BigDecimal(price),new BigDecimal(1.0))); } - } - } catch (XPathExpressionException e) { e.printStackTrace(); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java index b3c87e39..5bc69996 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java @@ -40,7 +40,7 @@ import java.util.List; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class UXTest extends TestCase { - final String TARGET_PDF = "./target/testout-ZF2new.pdf"; + final String TARGET_PDF = "./target/testout-UX.pdf"; public void testShortExport() { // the writing part diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java index 9de700a3..21d2c1f7 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java @@ -260,7 +260,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra // the writing part try (InputStream SOURCE_PDF = this.getClass() - .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505.pdf"); + .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); ZUGFeRDExporterFromA1 ze = new ZUGFeRDExporterFromA1().setProducer("My Application") .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).ignorePDFAErrors() diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java index e3faf10c..e9f9afb9 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java @@ -43,8 +43,9 @@ public class ZF2ZInvoiceImporterTest extends TestCase { // Reading ZUGFeRD assertEquals("Bei Spiel GmbH", invoice.getOwnOrganisationName()); assertEquals(3, invoice.getZFItems().length); - /* assertEquals("160.0000", invoice.getZFItems()[0].getPrice().toString()); assertEquals("400.0000", invoice.getZFItems()[1].getQuantity().toString()); + + /* assertEquals("160.0000", invoice.getZFItems()[0].getPrice().toString()); assertEquals("Heiße Luft pro Liter", invoice.getZFItems()[2].getProduct().getName()); assertEquals("7", invoice.getZFItems()[0].getProduct().getVATPercent().toString());