adding bank details

This commit is contained in:
Jochen Stärk
2020-09-30 23:18:40 +02:00
parent 7dde7e7180
commit 0776960e24
12 changed files with 190 additions and 55 deletions

View File

@@ -0,0 +1,44 @@
package org.mustangproject;
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementPayment;
public class BankDetails implements IZUGFeRDTradeSettlementPayment {
protected String IBAN, BIC;
public BankDetails(String IBAN, String BIC) {
this.IBAN = IBAN;
this.BIC = BIC;
}
public String getIBAN() {
return IBAN;
}
public BankDetails setIBAN(String IBAN) {
this.IBAN = IBAN;
return this;
}
public String getBIC() {
return BIC;
}
public BankDetails setBIC(String BIC) {
this.BIC = BIC;
return this;
}
@Override
public String getOwnBIC() {
return getBIC();
}
@Override
public String getOwnIBAN() {
return getIBAN();
}
}

View File

@@ -41,7 +41,6 @@ public class Invoice implements IExportableTransaction {
protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<IZUGFeRDAllowanceCharge>(),
Charges = new ArrayList<IZUGFeRDAllowanceCharge>(), LogisticsServiceCharges = new ArrayList<IZUGFeRDAllowanceCharge>();
protected IZUGFeRDTradeSettlement[] getTradeSettlement = null;
protected IZUGFeRDPaymentTerms paymentTerms = null;
@@ -139,6 +138,8 @@ public class Invoice implements IExportableTransaction {
return shipToStreet;
}
public Invoice setShipToStreet(String shipToStreet) {
this.shipToStreet = shipToStreet;
return this;
@@ -346,6 +347,10 @@ public class Invoice implements IExportableTransaction {
public Invoice setSender(TradeParty sender) {
this.sender = sender;
if ((sender.getBankDetails()!=null)&&(sender.getBankDetails().size()>0)) {
// convert bankdetails
}
return this;
}
@@ -376,14 +381,17 @@ public class Invoice implements IExportableTransaction {
}
public IZUGFeRDTradeSettlement[] getGetTradeSettlement() {
return getTradeSettlement;
@Override
public IZUGFeRDTradeSettlement[] getTradeSettlement() {
if (getSender()==null) {
return null;
}
return ((TradeParty)getSender()).getAsTradeSettlement();
}
public Invoice setGetTradeSettlement(IZUGFeRDTradeSettlement[] getTradeSettlement) {
this.getTradeSettlement = getTradeSettlement;
return this;
}
@Override
public IZUGFeRDPaymentTerms getPaymentTerms() {

View File

@@ -2,11 +2,15 @@ package org.mustangproject;
import org.mustangproject.ZUGFeRD.IZUGFeRDExportableContact;
import org.mustangproject.ZUGFeRD.IZUGFeRDExportableTradeParty;
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlement;
import java.util.ArrayList;
public class TradeParty implements IZUGFeRDExportableTradeParty {
protected String name, zip, street, location, country;
protected String taxID = null, vatID = null;
protected ArrayList<BankDetails> bankDetails = new ArrayList<BankDetails>();
protected Contact contact = null;
public TradeParty(String name, String street, String zip, String location, String country) {
@@ -22,7 +26,13 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
this.contact = c;
return this;
}
public TradeParty addBankDetails(BankDetails s) {
bankDetails.add(s);
return this;
}
public ArrayList<BankDetails> getBankDetails() {
return bankDetails;
}
public TradeParty addTaxID(String taxID) {
this.taxID = taxID;
return this;
@@ -105,4 +115,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
public IZUGFeRDExportableContact getContact() {
return contact;
}
public IZUGFeRDTradeSettlement[] getAsTradeSettlement() {
if (bankDetails.size()==0) {
return null;
}
return bankDetails.toArray(new IZUGFeRDTradeSettlement[0]);
}
}

View File

@@ -116,6 +116,30 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
return res;
}
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));
}
}
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));
}
}
return res;
}
private BigDecimal getTotal() {
BigDecimal res = new BigDecimal(0);
for (IZUGFeRDExportableItem currentItem : trans.getZFItems()) {
@@ -125,6 +149,11 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
return res;
}
private BigDecimal getTaxBasis() {
BigDecimal res = getTotal().add(getCharges()).subtract(getAllowances());
return res;
}
/**
* which taxes have been used with which amounts in this transaction, empty for
* no taxes, or e.g. 19=>190 and 7=>14 if 1000 Eur were applicable to 19% VAT
@@ -147,6 +176,31 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
hm.put(percent, current.add(itemVATAmount));
}
}
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.setCalculated(theAmount.getCalculated().add(currentCharge.getTotalAmount(trans)));
}
}
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.setCalculated(theAmount.getCalculated().subtract(currentAllowance.getTotalAmount(trans)));
}
}
return hm;
}
@@ -461,7 +515,41 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
}
}
if (trans.getPaymentTerms() == null) {
if ((trans.getZFCharges()!=null)&&(trans.getZFCharges().length>0)) {
xml = xml + " <ram:SpecifiedTradeAllowanceCharge>\n" +
" <ram:ChargeIndicator>\n" +
" <udt:Indicator>true</udt:Indicator>\n" +
" </ram:ChargeIndicator>\n" +
" <ram:ActualAmount>"+currencyFormat(getCharges())+"</ram:ActualAmount>\n" +
" <ram:Reason>Charge</ram:Reason>\n" +
" <ram:CategoryTradeTax>\n" +
" <ram:TypeCode>VAT</ram:TypeCode>\n" +
" <ram:CategoryCode>S</ram:CategoryCode>\n" +
" <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>\n" +
" </ram:CategoryTradeTax>\n" +
" </ram:SpecifiedTradeAllowanceCharge> \n";
}
if ((trans.getZFAllowances()!=null)&&(trans.getZFAllowances().length>0)) {
xml = xml + " <ram:SpecifiedTradeAllowanceCharge>\n" +
" <ram:ChargeIndicator>\n" +
" <udt:Indicator>false</udt:Indicator>\n" +
" </ram:ChargeIndicator>\n" +
" <ram:ActualAmount>"+currencyFormat(getAllowances())+"</ram:ActualAmount>\n" +
" <ram:Reason>Allowance</ram:Reason>\n" +
" <ram:CategoryTradeTax>\n" +
" <ram:TypeCode>VAT</ram:TypeCode>\n" +
" <ram:CategoryCode>S</ram:CategoryCode>\n" +
" <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>\n" +
" </ram:CategoryTradeTax>\n" +
" </ram:SpecifiedTradeAllowanceCharge> \n";
}
if (trans.getPaymentTerms() == null) {
xml = xml + " <ram:SpecifiedTradePaymentTerms>\n"
+ " <ram:Description>" + paymentTermsDescription + "</ram:Description>\n";
@@ -485,31 +573,16 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
}
String chargeTotalLine="";
IZUGFeRDAllowanceCharge[] allowances= trans.getZFAllowances();
BigDecimal allowanceTotal=new BigDecimal(0);
if ((allowances!=null) && (allowances.length>0)) {
for (IZUGFeRDAllowanceCharge currentAllowance:allowances) {
allowanceTotal=allowanceTotal.add(currentAllowance.getTotalAmount(trans));
}
}
String allowanceTotalLine="<ram:AllowanceTotalAmount currencyID=\"+trans.getCurrency()+\">"+currencyFormat(allowanceTotal)+"</ram:AllowanceTotalAmount>";
String allowanceTotalLine="<ram:AllowanceTotalAmount>"+currencyFormat(getAllowances())+"</ram:AllowanceTotalAmount>";
IZUGFeRDAllowanceCharge[] charges= trans.getZFCharges();
BigDecimal chargesTotal=new BigDecimal(0);
if ((charges!=null) && (charges.length>0)) {
for (IZUGFeRDAllowanceCharge currentCharge:charges) {
chargesTotal=chargesTotal.add(currentCharge.getTotalAmount(trans));
}
}
String chargesTotalLine="<ram:ChargeTotalAmount currencyID=\""+trans.getCurrency()+"\">"+currencyFormat(chargesTotal)+"</ram:ChargeTotalAmount>";
String chargesTotalLine="<ram:ChargeTotalAmount>"+currencyFormat(getCharges())+"</ram:ChargeTotalAmount>";
xml = xml + " <ram:SpecifiedTradeSettlementHeaderMonetarySummation>\n"
+ " <ram:LineTotalAmount>" + currencyFormat(getTotal()) + "</ram:LineTotalAmount>\n" //$NON-NLS-2$
+ chargesTotalLine
+ allowanceTotalLine
+ " <ram:TaxBasisTotalAmount>" + currencyFormat(getTotal()) + "</ram:TaxBasisTotalAmount>\n" //$NON-NLS-2$
+ " <ram:TaxBasisTotalAmount>" + currencyFormat(getTaxBasis()) + "</ram:TaxBasisTotalAmount>\n" //$NON-NLS-2$
// //
// currencyID=\"EUR\"
+ " <ram:TaxTotalAmount currencyID=\"" + trans.getCurrency() + "\">"

View File

@@ -90,11 +90,6 @@ public class IExportableTransactionImpl implements IExportableTransaction {
return recipient;
}
@Override
public IZUGFeRDTradeSettlementPayment[] getTradeSettlementPayment() {
return settlementPayments;
}
@Override
public String getOwnTaxID() {
return ownTaxID;

View File

@@ -30,7 +30,7 @@ public abstract class MustangReaderTestCase extends TestCase implements IExporta
@Override
public IZUGFeRDTradeSettlementPayment[] getTradeSettlementPayment() {
public IZUGFeRDTradeSettlement[] getTradeSettlement() {
Payment[] payments = new Payment[1];
payments[0] = new Payment();
return payments;

View File

@@ -181,8 +181,8 @@ public class MustangReaderWriterEdgeTest extends MustangReaderTestCase {
// Reading ZUGFeRD
assertEquals(zi.getAmount(), "571.04");
assertEquals(zi.getBIC(), getTradeSettlementPayment()[0].getOwnBIC());
assertEquals(zi.getIBAN(), getTradeSettlementPayment()[0].getOwnIBAN());
assertEquals(zi.getBIC(), "COBADEFFXXX");
assertEquals(zi.getIBAN(), "DE88 2008 0000 0970 3757 00");
assertEquals(zi.getHolder(), getOwnOrganisationName());
assertEquals(zi.getDueDate(), "20170530");
assertEquals(zi.getForeignReference(), getNumber());
@@ -223,8 +223,8 @@ public class MustangReaderWriterEdgeTest extends MustangReaderTestCase {
// Reading ZUGFeRD
assertEquals("571.04", zi.getAmount());
assertEquals(getTradeSettlementPayment()[0].getOwnBIC(), zi.getBIC());
assertEquals(getTradeSettlementPayment()[0].getOwnIBAN(), zi.getIBAN());
assertEquals("COBADEFFXXX", zi.getBIC());
assertEquals("DE88 2008 0000 0970 3757 00", zi.getIBAN());
assertEquals(zi.getHolder(), getOwnOrganisationName());
assertEquals(zi.getForeignReference(), getNumber());
try {

View File

@@ -196,8 +196,8 @@ public class MustangReaderWriterTest extends MustangReaderTestCase {
// Reading ZUGFeRD
assertEquals(zi.getAmount(), "571.04");
assertEquals(zi.getBIC(), getTradeSettlementPayment()[0].getOwnBIC());
assertEquals(zi.getIBAN(),getTradeSettlementPayment()[0].getOwnIBAN());
assertEquals(zi.getBIC(), "COBADEFFXXX");
assertEquals(zi.getIBAN(), "DE88 2008 0000 0970 3757 00");
assertEquals(zi.getHolder(), getOwnOrganisationName());
assertEquals(zi.getForeignReference(), "RE-20170509/505");
assertEquals(zi.getBankName(), "Commerzbank");
@@ -383,9 +383,9 @@ public class MustangReaderWriterTest extends MustangReaderTestCase {
// Reading ZUGFeRD
assertEquals(zi.getAmount(), "571.04");
assertEquals(zi.getBIC(), getTradeSettlementPayment()[0].getOwnBIC());
assertEquals(zi.getBIC(), "COBADEFFXXX");
assertEquals(zi.getReference(), getReferenceNumber());
assertEquals(zi.getIBAN(), getTradeSettlementPayment()[0].getOwnIBAN());
assertEquals(zi.getIBAN(), "DE88 2008 0000 0970 3757 00");
assertEquals(zi.getHolder(), getOwnOrganisationName());
assertEquals(zi.getForeignReference(), getNumber());
}
@@ -460,8 +460,8 @@ public class MustangReaderWriterTest extends MustangReaderTestCase {
// Reading ZUGFeRD
assertEquals("571.04", zi.getAmount());
assertEquals(getTradeSettlementPayment()[0].getOwnBIC(), zi.getBIC());
assertEquals(getTradeSettlementPayment()[0].getOwnIBAN(), zi.getIBAN());
assertEquals("COBADEFFXXX", zi.getBIC());
assertEquals("DE88 2008 0000 0970 3757 00", zi.getIBAN());
assertEquals(getOwnOrganisationName(), zi.getHolder());
assertEquals(getNumber(), zi.getForeignReference());
}

View File

@@ -100,11 +100,6 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra
}
@Override
public IZUGFeRDTradeSettlementPayment[] getTradeSettlementPayment() {
return null;
}
@Override
public IZUGFeRDTradeSettlement[] getTradeSettlement() {
IZUGFeRDTradeSettlement[] payments = new DebitPayment[1];

View File

@@ -54,9 +54,10 @@ public class ZF2PushTest extends TestCase {
.setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).ignorePDFAErrors()
.load(SOURCE_PDF)) {
ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setContractReferencedDocument("0815").setSender(new TradeParty(orgname,"teststr", "55232","teststadt","DE")).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("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))));
String theXML = new String(ze.getProvider().getXML());
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
// assertTrue(theXML.contains("777666555")); //the iban
// assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_PDF);
} catch (IOException e) {
fail("IOException should not be raised in testEdgeExport");
@@ -207,7 +208,8 @@ public class ZF2PushTest extends TestCase {
assertFalse(zi.getUTF8().contains("EUR"));
// Reading ZUGFeRD
assertEquals("11.07", zi.getAmount());
// assertEquals("11.07", zi.getAmount());
assertEquals("10.71", zi.getAmount());
assertEquals(zi.getHolder(), orgname);
assertEquals(zi.getForeignReference(), number);
try {

View File

@@ -208,8 +208,8 @@ public class ZF2Test extends MustangReaderTestCase {
assertEquals(zi.getDocumentCode(),"380");
assertEquals(zi.getReference(),"AB321");
assertEquals(zi.getAmount(), "571.04");
assertEquals(zi.getBIC(), getTradeSettlementPayment()[0].getOwnBIC());
assertEquals(zi.getIBAN(),getTradeSettlementPayment()[0].getOwnIBAN());
assertEquals(zi.getBIC(), "COBADEFFXXX");
assertEquals(zi.getIBAN(), "DE88 2008 0000 0970 3757 00");
assertEquals(zi.getHolder(), getOwnOrganisationName());
assertEquals(zi.getForeignReference(), getNumber());
assertEquals(zi.getBuyerTradePartyAddress().getPostcodeCode(), "88802");