diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 38d97195..32f3dfc5 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -45,7 +45,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { protected byte[] zugferdData; private IExportableTransaction trans; private String paymentTermsDescription; - protected Profile profile=Profiles.getByName("EN16931"); + protected Profile profile = Profiles.getByName("EN16931"); /** @@ -118,24 +118,26 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { private BigDecimal getCharges() { BigDecimal res = new BigDecimal(0); - IZUGFeRDAllowanceCharge[] charges= trans.getZFCharges(); - if ((charges!=null) && (charges.length>0)) { - for (IZUGFeRDAllowanceCharge currentCharge:charges) { - res=res.add(currentCharge.getTotalAmount(trans)); + IZUGFeRDAllowanceCharge[] charges = trans.getZFCharges(); + if ((charges != null) && (charges.length > 0)) { + for (IZUGFeRDAllowanceCharge currentCharge : charges) { + res = res.add(currentCharge.getTotalAmount(trans)); } } return res; } + private BigDecimal getAllowances() { BigDecimal res = new BigDecimal(0); - IZUGFeRDAllowanceCharge[] allowances= trans.getZFAllowances(); - if ((allowances!=null) && (allowances.length>0)) { - for (IZUGFeRDAllowanceCharge currentAllowance:allowances) { - res=res.add(currentAllowance.getTotalAmount(trans)); + IZUGFeRDAllowanceCharge[] allowances = trans.getZFAllowances(); + if ((allowances != null) && (allowances.length > 0)) { + for (IZUGFeRDAllowanceCharge currentAllowance : allowances) { + res = res.add(currentAllowance.getTotalAmount(trans)); } } return res; } + private BigDecimal getTotal() { BigDecimal res = new BigDecimal(0); for (IZUGFeRDExportableItem currentItem : trans.getZFItems()) { @@ -174,28 +176,28 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } - IZUGFeRDAllowanceCharge[] charges= trans.getZFCharges(); - if ((charges!=null) && (charges.length>0)) { - for (IZUGFeRDAllowanceCharge currentCharge:charges) { - VATAmount theAmount=hm.get(currentCharge.getTaxPercent()); - if (theAmount==null) { - theAmount=new VATAmount(new BigDecimal(0),new BigDecimal(0),"S"); + IZUGFeRDAllowanceCharge[] charges = trans.getZFCharges(); + if ((charges != null) && (charges.length > 0)) { + for (IZUGFeRDAllowanceCharge currentCharge : charges) { + VATAmount theAmount = hm.get(currentCharge.getTaxPercent()); + if (theAmount == null) { + theAmount = new VATAmount(new BigDecimal(0), new BigDecimal(0), "S"); } theAmount.setBasis(theAmount.getBasis().add(currentCharge.getTotalAmount(trans))); - BigDecimal factor=currentCharge.getTaxPercent().divide(new BigDecimal(100)); + BigDecimal factor = currentCharge.getTaxPercent().divide(new BigDecimal(100)); theAmount.setCalculated(theAmount.getBasis().multiply(factor)); hm.put(currentCharge.getTaxPercent(), theAmount); } } - IZUGFeRDAllowanceCharge[] allowances= trans.getZFAllowances(); - if ((allowances!=null) && (allowances.length>0)) { - for (IZUGFeRDAllowanceCharge currentAllowance:allowances) { - VATAmount theAmount=hm.get(currentAllowance.getTaxPercent()); - if (theAmount==null) { - theAmount=new VATAmount(new BigDecimal(0),new BigDecimal(0),"S"); + IZUGFeRDAllowanceCharge[] allowances = trans.getZFAllowances(); + if ((allowances != null) && (allowances.length > 0)) { + for (IZUGFeRDAllowanceCharge currentAllowance : allowances) { + VATAmount theAmount = hm.get(currentAllowance.getTaxPercent()); + if (theAmount == null) { + theAmount = new VATAmount(new BigDecimal(0), new BigDecimal(0), "S"); } theAmount.setBasis(theAmount.getBasis().subtract(currentAllowance.getTotalAmount(trans))); - BigDecimal factor=currentAllowance.getTaxPercent().divide(new BigDecimal(100)); + BigDecimal factor = currentAllowance.getTaxPercent().divide(new BigDecimal(100)); theAmount.setCalculated(theAmount.getBasis().multiply(factor)); hm.put(currentAllowance.getTaxPercent(), theAmount); @@ -203,7 +205,6 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } - return hm; } @@ -216,14 +217,13 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { String xml = ""; // According EN16931 either GlobalID or seller assigned ID might be present for BuyerTradeParty // and ShipToTradeParty, but not both. Prefer seller assigned ID for now. - if (party.getID()!=null) { + if (party.getID() != null) { xml += " " + XMLTools.encodeXML(party.getID()) + "\n"; - } - else if ((party.getGlobalIDScheme()!=null)&&(party.getGlobalID()!=null)) { + } else if ((party.getGlobalIDScheme() != null) && (party.getGlobalID() != null)) { xml = xml + " " - + XMLTools.encodeXML(party.getGlobalID()) + "\n"; + + XMLTools.encodeXML(party.getGlobalID()) + "\n"; } - xml += " " + XMLTools.encodeXML(party.getName()) + "\n"; //$NON-NLS-2$ + xml += " " + XMLTools.encodeXML(party.getName()) + "\n"; //$NON-NLS-2$ if (party.getContact() != null) { xml = xml + "\n" + " " + XMLTools.encodeXML(party.getContact().getName()) @@ -243,7 +243,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml = xml + " "; } - xml += " \n" + xml += " \n" + " " + XMLTools.encodeXML(party.getZIP()) + "\n" + " " + XMLTools.encodeXML(party.getStreet()) @@ -273,7 +273,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { return xml; } - @Override + + @Override public void generateXML(IExportableTransaction trans) { this.trans = trans; @@ -386,7 +387,6 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } - xml = xml + " " + XMLTools.encodeXML(currentItem.getProduct().getName()) + "\n" //$NON-NLS-2$ + " " + XMLTools.encodeXML(currentItem.getProduct().getDescription()) + "\n" @@ -399,12 +399,12 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + "" + quantityFormat(currentItem.getBasisQuantity()) + "\n" + allowanceChargeStr - // + " \n" - // + " false\n" - // + " 0.6667\n" - // + " Rabatt\n" - // + " \n" - +" \n" + // + " \n" + // + " false\n" + // + " 0.6667\n" + // + " Rabatt\n" + // + " \n" + + " \n" + " \n" + " " + priceFormat(lc.getPrice()) + "\n" // currencyID=\"EUR\" @@ -448,11 +448,11 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + getTradePartyAsXML(trans.getSender()) + " \n" + " \n"; - // + " GE2020211\n" - // + " 4000001987658\n" - - xml+=getTradePartyAsXML(trans.getRecipient()); - xml += " \n"; + // + " GE2020211\n" + // + " 4000001987658\n" + + xml += getTradePartyAsXML(trans.getRecipient()); + xml += " \n"; if (trans.getBuyerOrderReferencedDocumentID() != null) { xml = xml + " \n" @@ -460,6 +460,14 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + XMLTools.encodeXML(trans.getBuyerOrderReferencedDocumentID()) + "\n" + " \n"; } + if (trans.getContractReferencedDocument() != null) { + xml = xml + " \n" + + " " + + XMLTools.encodeXML(trans.getContractReferencedDocument()) + "\n" + + " \n"; + } + + xml = xml + " \n" + " \n"; if (this.trans.getDeliveryAddress() != null) { @@ -524,54 +532,54 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } } - if ((trans.getOccurrencePeriodFrom()!=null) || (trans.getOccurrencePeriodTo()!=null)) { - xml=xml+""; - if (trans.getOccurrencePeriodFrom()!=null) { - xml=xml+""+zugferdDateFormat.format(trans.getOccurrencePeriodFrom())+""; + if ((trans.getOccurrencePeriodFrom() != null) || (trans.getOccurrencePeriodTo() != null)) { + xml = xml + ""; + if (trans.getOccurrencePeriodFrom() != null) { + xml = xml + "" + zugferdDateFormat.format(trans.getOccurrencePeriodFrom()) + ""; } - if (trans.getOccurrencePeriodTo()!=null) { - xml=xml+""+zugferdDateFormat.format(trans.getOccurrencePeriodTo())+""; + if (trans.getOccurrencePeriodTo() != null) { + xml = xml + "" + zugferdDateFormat.format(trans.getOccurrencePeriodTo()) + ""; } - xml=xml+""; + xml = xml + ""; } - if ((trans.getZFCharges()!=null)&&(trans.getZFCharges().length>0)) { - xml = xml + " \n" + - " \n" + - " true\n" + - " \n" + - " "+currencyFormat(getCharges())+"\n" + - " Charge\n" + - " \n" + - " VAT\n" + - " S\n" + - " 19.00\n" + - " \n" + - " \n"; + if ((trans.getZFCharges() != null) && (trans.getZFCharges().length > 0)) { + xml = xml + " \n" + + " \n" + + " true\n" + + " \n" + + " " + currencyFormat(getCharges()) + "\n" + + " Charge\n" + + " \n" + + " VAT\n" + + " S\n" + + " 19.00\n" + + " \n" + + " \n"; - } + } - if ((trans.getZFAllowances()!=null)&&(trans.getZFAllowances().length>0)) { - xml = xml + " \n" + - " \n" + - " false\n" + - " \n" + - " "+currencyFormat(getAllowances())+"\n" + - " Allowance\n" + - " \n" + - " VAT\n" + - " S\n" + - " 19.00\n" + - " \n" + - " \n"; + if ((trans.getZFAllowances() != null) && (trans.getZFAllowances().length > 0)) { + xml = xml + " \n" + + " \n" + + " false\n" + + " \n" + + " " + currencyFormat(getAllowances()) + "\n" + + " Allowance\n" + + " \n" + + " VAT\n" + + " S\n" + + " 19.00\n" + + " \n" + + " \n"; - } + } - if (trans.getPaymentTerms() == null) { + if (trans.getPaymentTerms() == null) { xml = xml + " \n" + " " + paymentTermsDescription + "\n"; @@ -595,12 +603,11 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } + String allowanceTotalLine = "" + currencyFormat(getAllowances()) + ""; - String allowanceTotalLine=""+currencyFormat(getAllowances())+""; + String chargesTotalLine = "" + currencyFormat(getCharges()) + ""; - String chargesTotalLine=""+currencyFormat(getCharges())+""; - - xml = xml + " \n" + xml = xml + " \n" + " " + currencyFormat(getTotal()) + "\n" //$NON-NLS-2$ + chargesTotalLine + allowanceTotalLine @@ -648,7 +655,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { @Override public void setProfile(Profile p) { - profile=p; + profile = p; } private String buildPaymentTermsXml() { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index 8913c922..fd263fa0 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -49,6 +49,9 @@ public class ZF2PushTest extends TestCase { String number = "123"; String amountStr = "1.00"; BigDecimal amount = new BigDecimal(amountStr); + String occurenceFrom="20201001"; + String occurenceTo="20201005"; + String contractID="376zreurzu0983"; try (InputStream SOURCE_PDF = this.getClass() .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); @@ -57,7 +60,7 @@ public class ZF2PushTest extends TestCase { .load(SOURCE_PDF)) { try { - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setOccurrencePeriod(new SimpleDateFormat("yyyy-MM-dd").parse("2020-10-01"), new SimpleDateFormat("yyyy-MM-dd").parse("2020-10-05")).setContractReferencedDocument("0815").setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addBankDetails(new BankDetails("777666555", "DE4321"))).setOwnTaxID("4711").setOwnVATID("DE19990815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").setContact(new Contact("nameRep", "phoneRep", "emailRep@test.com"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)))); + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setContractReferencedDocument(contractID).setOccurrencePeriod(new SimpleDateFormat("yyyyMMdd").parse(occurenceFrom), new SimpleDateFormat("yyyyMMdd").parse(occurenceTo)).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addBankDetails(new BankDetails("777666555", "DE4321"))).setOwnTaxID("4711").setOwnVATID("DE19990815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").setContact(new Contact("nameRep", "phoneRep", "emailRep@test.com"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)))); } catch (ParseException ex) { throw new RuntimeException("Parse exception"); } @@ -74,6 +77,9 @@ public class ZF2PushTest extends TestCase { ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF); assertTrue(zi.getUTF8().contains("EUR")); + assertTrue(zi.getUTF8().contains(occurenceFrom)); + assertTrue(zi.getUTF8().contains(occurenceTo)); + assertTrue(zi.getUTF8().contains(contractID)); assertTrue(zi.getUTF8().contains("0815")); // Reading ZUGFeRD