From b7b0dd28f986b8e96dba6316bdda0223b2d049c2 Mon Sep 17 00:00:00 2001 From: langfr Date: Wed, 7 Aug 2024 21:51:15 +0100 Subject: [PATCH] Direct Debit: add field CreditorReferenceID. --- .../java/org/mustangproject/DirectDebit.java | 42 +++++++++++++++++++ .../main/java/org/mustangproject/Invoice.java | 10 +++++ .../java/org/mustangproject/TradeParty.java | 5 +-- .../ZUGFeRD/IExportableTransaction.java | 3 ++ .../ZUGFeRD/IZUGFeRDTradeSettlementDebit.java | 17 +++----- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 3 ++ 6 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 library/src/main/java/org/mustangproject/DirectDebit.java diff --git a/library/src/main/java/org/mustangproject/DirectDebit.java b/library/src/main/java/org/mustangproject/DirectDebit.java new file mode 100644 index 00000000..4eef6cb3 --- /dev/null +++ b/library/src/main/java/org/mustangproject/DirectDebit.java @@ -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; + } +} diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index fd85bb87..fc71df6e 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -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; + } + } diff --git a/library/src/main/java/org/mustangproject/TradeParty.java b/library/src/main/java/org/mustangproject/TradeParty.java index 91af21b3..91b81ca5 100644 --- a/library/src/main/java/org/mustangproject/TradeParty.java +++ b/library/src/main/java/org/mustangproject/TradeParty.java @@ -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 = new ArrayList<>(); - protected List debitDetails = new ArrayList<>(); + protected List 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; } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java index 219b7022..87a29aaa 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java @@ -522,4 +522,7 @@ public interface IExportableTransaction { return null; } + default String getCreditorReferenceID() { + return null; + } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java index bc5f3533..7402b92c 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java @@ -22,35 +22,30 @@ import org.mustangproject.XMLTools; public interface IZUGFeRDTradeSettlementDebit extends IZUGFeRDTradeSettlement { - - @Override default String getSettlementXML() { - - - String xml = "" + "59" + + "SEPA direct debit" + "" - + ""+XMLTools.encodeXML(getIBAN())+"" - + ""; + + "" + XMLTools.encodeXML(getIBAN()) + "" + + ""; xml += ""; return xml; } - + @Override default String getPaymentXML() { - return ""+XMLTools.encodeXML(getMandate())+""; + return "" + XMLTools.encodeXML(getMandate()) + ""; } - + /*** * @return IBAN of the debtor (optional) */ String getIBAN(); - /*** * @return sepa direct debit mandate reference */ diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 345fed91..20fcc322 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -597,6 +597,9 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml += ""; xml += ""; + if ((trans.getCreditorReferenceID() != null) && (getProfile() != Profiles.getByName("Minimum"))) { + xml += "" + XMLTools.encodeXML(trans.getCreditorReferenceID()) + ""; + } if ((trans.getNumber() != null) && (getProfile() != Profiles.getByName("Minimum"))) { xml += "" + XMLTools.encodeXML(trans.getNumber()) + ""; }