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