Merge pull request #439 from langfr/feature/436

Direct Debit: add field CreditorReferenceID.
This commit is contained in:
Jochen Staerk
2024-08-08 14:08:17 +02:00
committed by GitHub
6 changed files with 66 additions and 14 deletions

View File

@@ -0,0 +1,42 @@
package org.mustangproject;
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementDebit;
/**
* provides e.g. the IBAN to transfer money to :-)
*/
public class DirectDebit implements IZUGFeRDTradeSettlementDebit {
/**
* Debited account identifier (BT-91)
*/
protected final String IBAN;
/**
* Mandate reference identifier (BT-89)
*/
protected final String mandate;
/***
* constructor for normal use :-)
* @param IBAN the IBAN as string
* @param mandate the mandate as string
*/
public DirectDebit(String IBAN, String mandate) {
this.IBAN = IBAN;
this.mandate = mandate;
}
/***
* getter for the IBAN
* @return IBAN
*/
@Override
public String getIBAN() {
return this.IBAN;
}
@Override
public String getMandate() {
return this.mandate;
}
}

View File

@@ -63,6 +63,7 @@ public class Invoice implements IExportableTransaction {
protected String specifiedProcuringProjectName = null;
protected String despatchAdviceReferencedDocumentID = null;
protected String vatDueDateTypeCode = null;
protected String creditorReferenceID; // required when direct debit is used.
public Invoice() {
ZFItems = new ArrayList<>();
@@ -878,4 +879,13 @@ public class Invoice implements IExportableTransaction {
return this;
}
public String getCreditorReferenceID() {
return creditorReferenceID;
}
public Invoice setCreditorReferenceID(String creditorReferenceID) {
this.creditorReferenceID = creditorReferenceID;
return this;
}
}

View File

@@ -9,7 +9,6 @@ import org.mustangproject.ZUGFeRD.IZUGFeRDExportableContact;
import org.mustangproject.ZUGFeRD.IZUGFeRDExportableTradeParty;
import org.mustangproject.ZUGFeRD.IZUGFeRDLegalOrganisation;
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlement;
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementDebit;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -27,7 +26,7 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
protected String additionalAddress = null;
protected String additionalAddressExtension = null;
protected List<BankDetails> bankDetails = new ArrayList<>();
protected List<IZUGFeRDTradeSettlementDebit> debitDetails = new ArrayList<>();
protected List<DirectDebit> debitDetails = new ArrayList<>();
protected Contact contact = null;
protected LegalOrganisation legalOrg = null;
protected SchemedID globalId = null;
@@ -483,7 +482,7 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
* @param debitDetail e.g. containing IBAN and mandate
* @return fluent setter
*/
public TradeParty addDebitDetails(IZUGFeRDTradeSettlementDebit debitDetail) {
public TradeParty addDebitDetails(DirectDebit debitDetail) {
debitDetails.add(debitDetail);
return this;
}

View File

@@ -522,4 +522,7 @@ public interface IExportableTransaction {
return null;
}
default String getCreditorReferenceID() {
return null;
}
}

View File

@@ -22,18 +22,14 @@ import org.mustangproject.XMLTools;
public interface IZUGFeRDTradeSettlementDebit extends IZUGFeRDTradeSettlement {
@Override
default String getSettlementXML() {
String xml = "<ram:SpecifiedTradeSettlementPaymentMeans>"
+ "<ram:TypeCode>59</ram:TypeCode>"
+ "<ram:Information>SEPA direct debit</ram:Information>"
+ "<ram:PayerPartyDebtorFinancialAccount>"
+ "<ram:IBANID>"+XMLTools.encodeXML(getIBAN())+"</ram:IBANID>"
+ "</ram:PayerPartyDebtorFinancialAccount>";
+ "<ram:IBANID>" + XMLTools.encodeXML(getIBAN()) + "</ram:IBANID>"
+ "</ram:PayerPartyDebtorFinancialAccount>";
xml += "</ram:SpecifiedTradeSettlementPaymentMeans>";
return xml;
@@ -41,7 +37,7 @@ public interface IZUGFeRDTradeSettlementDebit extends IZUGFeRDTradeSettlement {
@Override
default String getPaymentXML() {
return "<ram:DirectDebitMandateID>"+XMLTools.encodeXML(getMandate())+"</ram:DirectDebitMandateID>";
return "<ram:DirectDebitMandateID>" + XMLTools.encodeXML(getMandate()) + "</ram:DirectDebitMandateID>";
}
@@ -50,7 +46,6 @@ public interface IZUGFeRDTradeSettlementDebit extends IZUGFeRDTradeSettlement {
*/
String getIBAN();
/***
* @return sepa direct debit mandate reference
*/

View File

@@ -598,6 +598,9 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
xml += "</ram:ApplicableHeaderTradeDelivery>";
xml += "<ram:ApplicableHeaderTradeSettlement>";
if ((trans.getCreditorReferenceID() != null) && (getProfile() != Profiles.getByName("Minimum"))) {
xml += "<ram:CreditorReferenceID>" + XMLTools.encodeXML(trans.getCreditorReferenceID()) + "</ram:CreditorReferenceID>";
}
if ((trans.getNumber() != null) && (getProfile() != Profiles.getByName("Minimum"))) {
xml += "<ram:PaymentReference>" + XMLTools.encodeXML(trans.getNumber()) + "</ram:PaymentReference>";
}