use of com.axelor.apps.bankpayment.db.BankOrderLine in project axelor-open-suite by axelor.
the class BankOrderLineManagementRepository method populate.
@Override
public Map<String, Object> populate(Map<String, Object> json, Map<String, Object> context) {
Long bankOrderLineId = (Long) json.get("id");
BankOrderLine bankOrderLine = find(bankOrderLineId);
String pieceReferenceList = "";
String pieceDateList = "";
String pieceDueDateList = "";
boolean bFirst = true;
for (BankOrderLineOrigin bankOrderLineOrigin : bankOrderLine.getBankOrderLineOriginList()) {
if (bFirst) {
pieceReferenceList += changeNullToEmptyString(bankOrderLineOrigin.getRelatedToSelectName());
pieceDateList += changeDateToString(bankOrderLineOrigin.getRelatedToSelectDate());
pieceDueDateList += changeDateToString(bankOrderLineOrigin.getRelatedToSelectDueDate());
bFirst = false;
} else {
pieceReferenceList += "," + changeNullToEmptyString(bankOrderLineOrigin.getRelatedToSelectName());
pieceDateList += "," + changeDateToString(bankOrderLineOrigin.getRelatedToSelectDate());
pieceDueDateList += "," + changeDateToString(bankOrderLineOrigin.getRelatedToSelectDueDate());
}
}
json.put("$pieceReferenceList", StringTool.cutTooLongString(pieceReferenceList));
json.put("$pieceDateList", StringTool.cutTooLongString(pieceDateList));
json.put("$pieceDueDateList", StringTool.cutTooLongString(pieceDueDateList));
return super.populate(json, context);
}
use of com.axelor.apps.bankpayment.db.BankOrderLine in project axelor-open-suite by axelor.
the class BankOrderFile00800101Service method createDrctDbtTxInf.
/**
* Builds the DirectDebitTransactionInformation part ({@code <DrctDbtTxInf>} tag) of the file, and
* adds it into the provided {@link DirectDebitTransactionInformation1} list
*
* @param directDebitTransactionInformation1List the list to add the {@link
* DirectDebitTransactionInformation1} objects into
* @param creditor the creditor of the SEPA Direct Debit file
* @throws DatatypeConfigurationException
* @throws AxelorException
*/
protected void createDrctDbtTxInf(List<DirectDebitTransactionInformation1> directDebitTransactionInformation1List, PartyIdentification8 creditor) throws DatatypeConfigurationException, AxelorException {
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
for (BankOrderLine bankOrderLine : bankOrderLineList) {
BankDetails receiverBankDetails = bankOrderLine.getReceiverBankDetails();
Umr receiverUmr = bankOrderLine.getPartner().getActiveUmr();
if (receiverUmr == null) {
throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.DIRECT_DEBIT_MISSING_PARTNER_ACTIVE_UMR));
}
/*
* Direct Debit Transaction Information (mandatory)
* Set of elements providing information specific to the individual transaction(s) included in the message.
*/
DirectDebitTransactionInformation1 directDebitTransactionInformation1 = factory.createDirectDebitTransactionInformation1();
directDebitTransactionInformation1List.add(directDebitTransactionInformation1);
/*
* Payment Identification (mandatory)
* Set of elements to reference a payment instruction.
*/
PaymentIdentification1 paymentIdentification1 = factory.createPaymentIdentification1();
directDebitTransactionInformation1.setPmtId(paymentIdentification1);
/*
* Instruction Identification (optional)
* The Instruction Identification is a unique reference assigned by the Initiator to unambiguously identify the transaction.
* It can be used in status messages related to the transaction.
*/
// paymentIdentification1.setInstrId();
/*
* End To End Identification (mandatory)
* Unique identification assigned by the initiating party to unumbiguously identify the transaction.
* This identification is passed on, unchanged, throughout the entire end-to-end chain.
*/
paymentIdentification1.setEndToEndId(bankOrderLine.getSequence());
/*
* Instructed Amount (mandatory)
* Amount of the direct debit, expressed in euro.
*
* Format : Max. 11 digits of which 2 for the fractional part.
* Decimal separator is "."
* Currency "EUR" is explicit, and included in the XML tag.
* Usage : Amount must be between 0.01 and 999999999.99
*/
CurrencyAndAmount currencyAndAmount = factory.createCurrencyAndAmount();
currencyAndAmount.setCcy(CURRENCY_CODE);
currencyAndAmount.setValue(bankOrderLine.getBankOrderAmount());
directDebitTransactionInformation1.setInstdAmt(currencyAndAmount);
/*
* Direct Debit Transaction (mandatory)
* Set of elements providing information specific to the direct debit mandate.
*/
DirectDebitTransaction1 directDebitTransaction1 = factory.createDirectDebitTransaction1();
directDebitTransactionInformation1.setDrctDbtTx(directDebitTransaction1);
/*
* Mandate Related Information (mandatory)
* Set of elements used to provide further details related to a direct debit mandate signed between the creditor and the debtor.
*/
MandateRelatedInformation1 mandateRelatedInformation1 = factory.createMandateRelatedInformation1();
directDebitTransaction1.setMndtRltdInf(mandateRelatedInformation1);
/*
* Mandate Identification (mandatory)
* Reference of the direct debit mandate that has been signed between by the debtor and the creditor.
*/
mandateRelatedInformation1.setMndtId(receiverUmr.getUmrNumber());
/*
* Date of Signature (mandatory)
* Date on which the direct debit mandate has been signed by the debtor.
*
* Format : YYYY-MM-DD
*/
mandateRelatedInformation1.setDtOfSgntr(datatypeFactory.newXMLGregorianCalendar(receiverUmr.getMandateSignatureDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
/*
* Amendment Indicator (optional)
* Indicator notifying whether the underlying mandate is amended or not.
*
* Usage : - If not present, considered as "false".
* - If true, 'Amendment Information Details' is mandatory.
*
* 'true' if : The mandate is amended or migrated from Dom'80.
* 'false' if : The mandate is not amended.
*/
// mandateRelatedInformation1.setAmdmntInd(???);
/*
* Amendment Info Details (optional)
* List of direct debit mandate elements that have been modified.
*/
// AmendmentInformationDetails1 amendmentInformationDetails1 =
// factory.createAmendmentInformationDetails1();
// mandateRelatedInformation1.setAmdmntInfDtls(amendmentInformationDetails1);
// amendmentInformationDetails1.setOrgnlMndtId(???);
// amendmentInformationDetails1.setOrgnlCdtrSchmeId(???);
// amendmentInformationDetails1.setOrgnlDbtrAcct(???);
// amendmentInformationDetails1.setOrgnlDbtrAgt(???);
/*
* Electronic Signature (optional)
* Digital signature as provided by the creditor.
*
* Usage : - If the direct debit is based on an electronic mandate, this data
* element must contain the reference of the Mandate Acceptance Report.
* - If the direct debit is based on a paper mandate, this data element
* is not allowed.
*/
// mandateRelatedInformation1.setElctrncSgntr(???);
/*
* Creditor Scheme Identification (mandatory)
* Credit party that signs the direct debit mandate.
*/
PartyIdentification8 creditorSchemeId = factory.createPartyIdentification8();
directDebitTransaction1.setCdtrSchmeId(creditorSchemeId);
Party2Choice party2Choice = factory.createParty2Choice();
creditorSchemeId.setId(party2Choice);
PersonIdentification3 personIdentification3 = factory.createPersonIdentification3();
party2Choice.getPrvtId().add(personIdentification3);
GenericIdentification4 genericIdentification4 = factory.createGenericIdentification4();
personIdentification3.setOthrId(genericIdentification4);
genericIdentification4.setId(Beans.get(BankPaymentConfigService.class).getIcsNumber(senderCompany.getBankPaymentConfig()));
genericIdentification4.setIdTp("SEPA");
/*
* Ultimate Creditor (optional)
* Ultimate party to which an amount of money is due. Ultimate Creditor is only to be used if different from Creditor.
*/
// directDebitTransaction1.setUltmtCdtr();
/*
* Debtor Agent (mandatory)
* Financial institution servicing an account for the debtor.
*/
BranchAndFinancialInstitutionIdentification3 branchAndFinancialInstitutionIdentification3 = factory.createBranchAndFinancialInstitutionIdentification3();
FinancialInstitutionIdentification5Choice financialInstitutionIdentification5Choice = factory.createFinancialInstitutionIdentification5Choice();
// BIC
fillBic(financialInstitutionIdentification5Choice, receiverBankDetails.getBank());
branchAndFinancialInstitutionIdentification3.setFinInstnId(financialInstitutionIdentification5Choice);
directDebitTransactionInformation1.setDbtrAgt(branchAndFinancialInstitutionIdentification3);
/*
* Debtor (mandatory)
* Party that owes an amount of money to the (ultimate) creditor.
*/
PartyIdentification8 debtor = factory.createPartyIdentification8();
debtor.setNm(receiverBankDetails.getOwnerName());
directDebitTransactionInformation1.setDbtr(debtor);
/*
* Debtor Account (mandatory)
* Identification of the account of the debtor to which a debit entry will be made to execute the transfer.
*/
AccountIdentification3Choice accountIdentification3Choice = factory.createAccountIdentification3Choice();
accountIdentification3Choice.setIBAN(receiverBankDetails.getIban());
CashAccount7 cashAccount7 = factory.createCashAccount7();
cashAccount7.setId(accountIdentification3Choice);
directDebitTransactionInformation1.setDbtrAcct(cashAccount7);
/*
* Ultimate Debtor (optional)
* Ultimate party that owes an amount of money to the (ultimate) creditor. Ultimate Debtor is only to be used if different from Debtor.
*/
// directDebitTransactionInformation1.setUltmtDbtr(???);
/*
* Purpose (optional)
* Underlying reason for the payment transaction.
* Purpose is used by the Debtor to provide information to the Creditor, concerning thenature of the payment transaction.
* It is not used for processing by any of the banks involved.
*/
// Purpose1Choice purpose1Choice = factory.createPurpose1Choice();
// directDebitTransactionInformation1.setPurp(purpose1Choice);
/*
* Code (mandatory)
* Specifies the underlying reason of the payment transaction.
*/
// purpose1Choice.setCd(???);
/*
* Remittance Information (optional)
* Information that enables the matching, ie, reconciliation, of a payment with the items that the payment
* is intended to settle, eg, commercial invoices in an account receivable system.
*
* Usage : Either Structured or Unstructured, but not both.
*/
RemittanceInformation1 remittanceInformation1 = factory.createRemittanceInformation1();
directDebitTransactionInformation1.setRmtInf(remittanceInformation1);
/*
* Unstructured (choice 1 of 2)
* Information supplied to enable the matching of an entry with the items that the transfer is intended
* to settle, eg, commercial invoices in an accounts' receivable system in an unstructured form.
*/
remittanceInformation1.getUstrd().add(bankOrderLine.getReceiverReference());
/*
* Structured (choice 2 of 2)
* Information supplied to enable the matching of an entry with the items that the transfer is intended
* to settle, eg, commercial invoices in an accounts' receivable system in a structured form.
*/
// StructuredRemittanceInformation6 structuredRemittanceInformation6 =
// factory.createStructuredRemittanceInformation6();
// remittanceInformation1.getStrd().add(structuredRemittanceInformation6);
}
}
use of com.axelor.apps.bankpayment.db.BankOrderLine in project axelor-open-suite by axelor.
the class BankOrderFile00800102Service method createDrctDbtTxInf.
/**
* Builds the DirectDebitTransactionInformation part ({@code <DrctDbtTxInf>} tag) of the file, and
* adds it into the provided {@link DirectDebitTransactionInformation9} list
*
* @param directDebitTransactionInformation9List the list to add the {@link
* DirectDebitTransactionInformation9} objects into
* @param creditor the creditor of the SEPA Direct Debit file
* @throws DatatypeConfigurationException
* @throws AxelorException
*/
protected void createDrctDbtTxInf(List<DirectDebitTransactionInformation9> directDebitTransactionInformation9List, PartyIdentification32 creditor) throws DatatypeConfigurationException, AxelorException {
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
for (BankOrderLine bankOrderLine : bankOrderLineList) {
BankDetails receiverBankDetails = bankOrderLine.getReceiverBankDetails();
Umr receiverUmr = bankOrderLine.getPartner().getActiveUmr();
if (receiverUmr == null) {
throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.DIRECT_DEBIT_MISSING_PARTNER_ACTIVE_UMR));
}
/*
* Direct Debit Transaction Information (mandatory)
* Set of elements providing information specific to the individual transaction(s) included in the message.
*/
DirectDebitTransactionInformation9 directDebitTransactionInformation9 = factory.createDirectDebitTransactionInformation9();
directDebitTransactionInformation9List.add(directDebitTransactionInformation9);
/*
* Payment Identification (mandatory)
* Set of elements to reference a payment instruction.
*/
PaymentIdentification1 paymentIdentification1 = factory.createPaymentIdentification1();
directDebitTransactionInformation9.setPmtId(paymentIdentification1);
/*
* Instruction Identification (optional)
* The Instruction Identification is a unique reference assigned by the Initiator to unambiguously identify the transaction.
* It can be used in status messages related to the transaction.
*/
// paymentIdentification1.setInstrId();
/*
* End To End Identification (mandatory)
* Unique identification assigned by the initiating party to unumbiguously identify the transaction.
* This identification is passed on, unchanged, throughout the entire end-to-end chain.
*/
paymentIdentification1.setEndToEndId(bankOrderLine.getSequence());
/*
* Instructed Amount (mandatory)
* Amount of the direct debit, expressed in euro.
*
* Format : Max. 11 digits of which 2 for the fractional part.
* Decimal separator is "."
* Currency "EUR" is explicit, and included in the XML tag.
* Usage : Amount must be between 0.01 and 999999999.99
*/
ActiveOrHistoricCurrencyAndAmount activeOrHistoricCurrencyAndAmount = factory.createActiveOrHistoricCurrencyAndAmount();
activeOrHistoricCurrencyAndAmount.setCcy(CURRENCY_CODE);
activeOrHistoricCurrencyAndAmount.setValue(bankOrderLine.getBankOrderAmount());
directDebitTransactionInformation9.setInstdAmt(activeOrHistoricCurrencyAndAmount);
/*
* Direct Debit Transaction (mandatory)
* Set of elements providing information specific to the direct debit mandate.
*/
DirectDebitTransaction6 directDebitTransaction6 = factory.createDirectDebitTransaction6();
directDebitTransactionInformation9.setDrctDbtTx(directDebitTransaction6);
/*
* Mandate Related Information (mandatory)
* Set of elements used to provide further details related to a direct debit mandate signed between the creditor and the debtor.
*/
MandateRelatedInformation6 mandateRelatedInformation6 = factory.createMandateRelatedInformation6();
directDebitTransaction6.setMndtRltdInf(mandateRelatedInformation6);
/*
* Mandate Identification (mandatory)
* Reference of the direct debit mandate that has been signed between by the debtor and the creditor.
*/
mandateRelatedInformation6.setMndtId(receiverUmr.getUmrNumber());
/*
* Date of Signature (mandatory)
* Date on which the direct debit mandate has been signed by the debtor.
*
* Format : YYYY-MM-DD
*/
mandateRelatedInformation6.setDtOfSgntr(datatypeFactory.newXMLGregorianCalendar(receiverUmr.getMandateSignatureDate().format(DateTimeFormatter.ofPattern(("yyyy-MM-dd")))));
/*
* Amendment Indicator (optional)
* Indicator notifying whether the underlying mandate is amended or not.
*
* Usage : - If not present, considered as "false".
* - If true, 'Amendment Information Details' is mandatory.
*
* 'true' if : The mandate is amended or migrated from Dom'80.
* 'false' if : The mandate is not amended.
*/
// mandateRelatedInformation6.setAmdmntInd(???);
/*
* Amendment Info Details (optional)
* List of direct debit mandate elements that have been modified.
*/
// AmendmentInformationDetails6 amendmentInformationDetails6 =
// factory.createAmendmentInformationDetails6();
// mandateRelatedInformation6.setAmdmntInfDtls(amendmentInformationDetails6);
// amendmentInformationDetails6.setOrgnlMndtId(???);
// amendmentInformationDetails6.setOrgnlCdtrSchmeId(???);
// amendmentInformationDetails6.setOrgnlDbtrAcct(???);
// amendmentInformationDetails6.setOrgnlDbtrAgt(???);
/*
* Electronic Signature (optional)
* Digital signature as provided by the creditor.
*
* Usage : - If the direct debit is based on an electronic mandate, this data
* element must contain the reference of the Mandate Acceptance Report.
* - If the direct debit is based on a paper mandate, this data element
* is not allowed.
*/
// mandateRelatedInformation6.setElctrncSgntr(???);
/*
* Creditor Scheme Identification
* Creditor identification as given by his bank.
*/
PartyIdentification32 creditorSchemeId = factory.createPartyIdentification32();
directDebitTransaction6.setCdtrSchmeId(creditorSchemeId);
Party6Choice party6Choice = factory.createParty6Choice();
creditorSchemeId.setId(party6Choice);
PersonIdentification5 personIdentification5 = factory.createPersonIdentification5();
party6Choice.setPrvtId(personIdentification5);
GenericPersonIdentification1 genericPersonIdentification1 = factory.createGenericPersonIdentification1();
personIdentification5.getOthr().add(genericPersonIdentification1);
genericPersonIdentification1.setId(Beans.get(BankPaymentConfigService.class).getIcsNumber(senderCompany.getBankPaymentConfig()));
PersonIdentificationSchemeName1Choice personIdentificationSchemeName1Choice = factory.createPersonIdentificationSchemeName1Choice();
genericPersonIdentification1.setSchmeNm(personIdentificationSchemeName1Choice);
personIdentificationSchemeName1Choice.setPrtry("SEPA");
/*
* Ultimate Creditor (optional)
* Ultimate party to which an amount of money is due. Ultimate Creditor is only to be used if different from Creditor.
*/
// directDebitTransaction6.setUltmtCdtr();
/*
* Debtor Agent (mandatory)
* Financial institution servicing an account for the debtor.
*/
BranchAndFinancialInstitutionIdentification4 branchAndFinancialInstitutionIdentification4 = factory.createBranchAndFinancialInstitutionIdentification4();
FinancialInstitutionIdentification7 financialInstitutionIdentification7 = factory.createFinancialInstitutionIdentification7();
// BIC
fillBic(financialInstitutionIdentification7, receiverBankDetails.getBank());
branchAndFinancialInstitutionIdentification4.setFinInstnId(financialInstitutionIdentification7);
directDebitTransactionInformation9.setDbtrAgt(branchAndFinancialInstitutionIdentification4);
/*
* Debtor (mandatory)
* Party that owes an amount of money to the (ultimate) creditor.
*/
PartyIdentification32 debtor = factory.createPartyIdentification32();
debtor.setNm(receiverBankDetails.getOwnerName());
directDebitTransactionInformation9.setDbtr(debtor);
/*
* Debtor Account (mandatory)
* Identification of the account of the debtor to which a debit entry will be made to execute the transfer.
*/
AccountIdentification4Choice accountIdentification4Choice = factory.createAccountIdentification4Choice();
accountIdentification4Choice.setIBAN(receiverBankDetails.getIban());
CashAccount16 cashAccount16 = factory.createCashAccount16();
cashAccount16.setId(accountIdentification4Choice);
directDebitTransactionInformation9.setDbtrAcct(cashAccount16);
/*
* Ultimate Debtor (optional)
* Ultimate party that owes an amount of money to the (ultimate) creditor. Ultimate Debtor is only to be used if different from Debtor.
*/
// directDebitTransactionInformation9.setUltmtDbtr(???);
/*
* Purpose (optional)
* Underlying reason for the payment transaction.
* Purpose is used by the Debtor to provide information to the Creditor, concerning thenature of the payment transaction.
* It is not used for processing by any of the banks involved.
*/
// Purpose2Choice purpose2Choice = factory.createPurpose2Choice();
// directDebitTransactionInformation9.setPurp(purpose2Choice);
/*
* Code (mandatory)
* Specifies the underlying reason of the payment transaction.
*/
// purpose2Choice.setCd(???);
/*
* Remittance Information (optional)
* Information that enables the matching, ie, reconciliation, of a payment with the items that the payment
* is intended to settle, eg, commercial invoices in an account receivable system.
*
* Usage : Either Structured or Unstructured, but not both.
*/
RemittanceInformation5 remittanceInformation5 = factory.createRemittanceInformation5();
directDebitTransactionInformation9.setRmtInf(remittanceInformation5);
/*
* Unstructured (choice 1 of 2)
* Information supplied to enable the matching of an entry with the items that the transfer is intended
* to settle, eg, commercial invoices in an accounts' receivable system in an unstructured form.
*/
remittanceInformation5.getUstrd().add(bankOrderLine.getReceiverReference());
/*
* Structured (choice 2 of 2)
* Information supplied to enable the matching of an entry with the items that the transfer is intended
* to settle, eg, commercial invoices in an accounts' receivable system in a structured form.
*/
// StructuredRemittanceInformation7 structuredRemittanceInformation7 =
// factory.createStructuredRemittanceInformation7();
// remittanceInformation5.getStrd().add(structuredRemittanceInformation7);
}
}
use of com.axelor.apps.bankpayment.db.BankOrderLine in project axelor-open-suite by axelor.
the class BankOrderFile00100102Service method generateFile.
/**
* Method to create an XML file for SEPA transfer pain.001.001.02
*
* @throws AxelorException
* @throws DatatypeConfigurationException
* @throws JAXBException
* @throws IOException
*/
@Override
public File generateFile() throws JAXBException, IOException, AxelorException, DatatypeConfigurationException {
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
ObjectFactory factory = new ObjectFactory();
ServiceLevel2Choice svcLvl = factory.createServiceLevel2Choice();
svcLvl.setCd(ServiceLevel1Code.SEPA);
PaymentTypeInformation1 pmtTpInf = factory.createPaymentTypeInformation1();
pmtTpInf.setSvcLvl(svcLvl);
// Payer
PartyIdentification8 dbtr = factory.createPartyIdentification8();
dbtr.setNm(senderBankDetails.getOwnerName());
// IBAN
AccountIdentification3Choice iban = factory.createAccountIdentification3Choice();
iban.setIBAN(senderBankDetails.getIban());
CashAccount7 dbtrAcct = factory.createCashAccount7();
dbtrAcct.setId(iban);
// BIC
FinancialInstitutionIdentification5Choice finInstnId = factory.createFinancialInstitutionIdentification5Choice();
fillBic(finInstnId, senderBankDetails.getBank());
BranchAndFinancialInstitutionIdentification3 dbtrAgt = factory.createBranchAndFinancialInstitutionIdentification3();
dbtrAgt.setFinInstnId(finInstnId);
PaymentInstructionInformation1 pmtInf = factory.createPaymentInstructionInformation1();
pmtInf.setPmtInfId(bankOrderSeq);
pmtInf.setPmtMtd(PaymentMethod3Code.TRF);
pmtInf.setPmtTpInf(pmtTpInf);
/**
* RequestedExecutionDate Definition : Date at which the initiating party asks the Debtor's Bank
* to process the payment. This is the date on which the debtor's account(s) is (are) to be
* debited. XML Tag : <ReqdExctnDt> Occurrences : [1..1] Format : YYYY-MM-DD Rules : date is
* limited to maximum one year in the future.
*/
pmtInf.setReqdExctnDt(datatypeFactory.newXMLGregorianCalendar(bankOrderDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
pmtInf.setDbtr(dbtr);
pmtInf.setDbtrAcct(dbtrAcct);
pmtInf.setDbtrAgt(dbtrAgt);
CreditTransferTransactionInformation1 cdtTrfTxInf = null;
PaymentIdentification1 pmtId = null;
AmountType2Choice amt = null;
CurrencyAndAmount instdAmt = null;
PartyIdentification8 cbtr = null;
CashAccount7 cbtrAcct = null;
BranchAndFinancialInstitutionIdentification3 cbtrAgt = null;
RemittanceInformation1 rmtInf = null;
for (BankOrderLine bankOrderLine : bankOrderLineList) {
BankDetails receiverBankDetails = bankOrderLine.getReceiverBankDetails();
// Reference
pmtId = factory.createPaymentIdentification1();
// pmtId.setInstrId(bankOrderLine.getSequence());
pmtId.setEndToEndId(bankOrderLine.getSequence());
// Amount
instdAmt = factory.createCurrencyAndAmount();
instdAmt.setCcy(bankOrderCurrency.getCode());
instdAmt.setValue(bankOrderLine.getBankOrderAmount());
amt = factory.createAmountType2Choice();
amt.setInstdAmt(instdAmt);
// Receiver
cbtr = factory.createPartyIdentification8();
cbtr.setNm(receiverBankDetails.getOwnerName());
// IBAN
iban = factory.createAccountIdentification3Choice();
iban.setIBAN(receiverBankDetails.getIban());
cbtrAcct = factory.createCashAccount7();
cbtrAcct.setId(iban);
// BIC
finInstnId = factory.createFinancialInstitutionIdentification5Choice();
fillBic(finInstnId, receiverBankDetails.getBank());
cbtrAgt = factory.createBranchAndFinancialInstitutionIdentification3();
cbtrAgt.setFinInstnId(finInstnId);
rmtInf = factory.createRemittanceInformation1();
String ustrd = "";
if (!Strings.isNullOrEmpty(bankOrderLine.getReceiverReference())) {
ustrd += bankOrderLine.getReceiverReference();
}
if (!Strings.isNullOrEmpty(bankOrderLine.getReceiverLabel())) {
if (!Strings.isNullOrEmpty(ustrd)) {
ustrd += " - ";
}
ustrd += bankOrderLine.getReceiverLabel();
}
if (!Strings.isNullOrEmpty(ustrd)) {
rmtInf.getUstrd().add(ustrd);
}
// StructuredRemittanceInformation6 strd = factory.createStructuredRemittanceInformation6();
//
// CreditorReferenceInformation1 cdtrRefInf = factory.createCreditorReferenceInformation1();
// cdtrRefInf.setCdtrRef(bankOrderLine.getReceiverReference());
//
// strd.setCdtrRefInf(cdtrRefInf);
//
// rmtInf.getStrd().add(strd);
// Transaction
cdtTrfTxInf = factory.createCreditTransferTransactionInformation1();
cdtTrfTxInf.setPmtId(pmtId);
cdtTrfTxInf.setAmt(amt);
cdtTrfTxInf.setCdtr(cbtr);
cdtTrfTxInf.setCdtrAcct(cbtrAcct);
cdtTrfTxInf.setCdtrAgt(cbtrAgt);
cdtTrfTxInf.setRmtInf(rmtInf);
pmtInf.getCdtTrfTxInf().add(cdtTrfTxInf);
}
// Header
GroupHeader1 grpHdr = factory.createGroupHeader1();
/**
* Référence du message qui n'est pas utilisée comme référence fonctionnelle.
*/
grpHdr.setMsgId(bankOrderSeq);
/**
* CreationDateTime Definition : Date and Time at which a (group of) payment instruction(s) was
* created by the instructing party. XML Tag : <CreDtTm> Occurrences : [1..1] Format :
* YYYY-MM-DDThh:mm:ss
*/
grpHdr.setCreDtTm(datatypeFactory.newXMLGregorianCalendar(generationDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))));
grpHdr.setNbOfTxs(Integer.toString(nbOfLines));
grpHdr.setCtrlSum(arithmeticTotal);
grpHdr.setGrpg(Grouping1Code.MIXD);
grpHdr.setInitgPty(dbtr);
// Parent
Pain00100102 pain00100102 = factory.createPain00100102();
pain00100102.setGrpHdr(grpHdr);
pain00100102.getPmtInf().add(pmtInf);
// Document
Document xml = factory.createDocument();
xml.setPain00100102(pain00100102);
fileToCreate = factory.createDocument(xml);
return super.generateFile();
}
use of com.axelor.apps.bankpayment.db.BankOrderLine in project axelor-open-suite by axelor.
the class BankOrderFile00100103Service method generateFile.
/**
* Method to create an XML file for SEPA transfer pain.001.001.03
*
* @throws AxelorException
* @throws DatatypeConfigurationException
* @throws JAXBException
* @throws IOException
*/
@Override
public File generateFile() throws JAXBException, IOException, AxelorException, DatatypeConfigurationException {
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
ObjectFactory factory = new ObjectFactory();
ServiceLevel8Choice svcLvl = factory.createServiceLevel8Choice();
svcLvl.setCd("SEPA");
PaymentTypeInformation19 pmtTpInf = factory.createPaymentTypeInformation19();
pmtTpInf.setSvcLvl(svcLvl);
// Payer
PartyIdentification32 dbtr = factory.createPartyIdentification32();
dbtr.setNm(senderBankDetails.getOwnerName());
// IBAN
AccountIdentification4Choice iban = factory.createAccountIdentification4Choice();
iban.setIBAN(senderBankDetails.getIban());
CashAccount16 dbtrAcct = factory.createCashAccount16();
dbtrAcct.setId(iban);
// BIC
FinancialInstitutionIdentification7 finInstnId = factory.createFinancialInstitutionIdentification7();
fillBic(finInstnId, senderBankDetails.getBank());
BranchAndFinancialInstitutionIdentification4 dbtrAgt = factory.createBranchAndFinancialInstitutionIdentification4();
dbtrAgt.setFinInstnId(finInstnId);
PaymentInstructionInformation3 pmtInf = factory.createPaymentInstructionInformation3();
pmtInf.setPmtInfId(bankOrderSeq);
pmtInf.setPmtMtd(PaymentMethod3Code.TRF);
pmtInf.setPmtTpInf(pmtTpInf);
/**
* RequestedExecutionDate Definition : Date at which the initiating party asks the Debtor's Bank
* to process the payment. This is the date on which the debtor's account(s) is (are) to be
* debited. XML Tag : <ReqdExctnDt> Occurrences : [1..1] Format : YYYY-MM-DD Rules : date is
* limited to maximum one year in the future.
*/
pmtInf.setReqdExctnDt(datatypeFactory.newXMLGregorianCalendar(bankOrderDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
pmtInf.setDbtr(dbtr);
pmtInf.setDbtrAcct(dbtrAcct);
pmtInf.setDbtrAgt(dbtrAgt);
CreditTransferTransactionInformation10 cdtTrfTxInf = null;
PaymentIdentification1 pmtId = null;
AmountType3Choice amt = null;
ActiveOrHistoricCurrencyAndAmount instdAmt = null;
PartyIdentification32 cbtr = null;
CashAccount16 cbtrAcct = null;
BranchAndFinancialInstitutionIdentification4 cbtrAgt = null;
RemittanceInformation5 rmtInf = null;
for (BankOrderLine bankOrderLine : bankOrderLineList) {
BankDetails receiverBankDetails = bankOrderLine.getReceiverBankDetails();
// Reference
pmtId = factory.createPaymentIdentification1();
// pmtId.setInstrId(bankOrderLine.getSequence());
pmtId.setEndToEndId(bankOrderLine.getSequence());
// Amount
instdAmt = factory.createActiveOrHistoricCurrencyAndAmount();
instdAmt.setCcy(bankOrderCurrency.getCode());
instdAmt.setValue(bankOrderLine.getBankOrderAmount());
amt = factory.createAmountType3Choice();
amt.setInstdAmt(instdAmt);
// Receiver
cbtr = factory.createPartyIdentification32();
cbtr.setNm(receiverBankDetails.getOwnerName());
// IBAN
iban = factory.createAccountIdentification4Choice();
iban.setIBAN(receiverBankDetails.getIban());
cbtrAcct = factory.createCashAccount16();
cbtrAcct.setId(iban);
// BIC
finInstnId = factory.createFinancialInstitutionIdentification7();
fillBic(finInstnId, receiverBankDetails.getBank());
cbtrAgt = factory.createBranchAndFinancialInstitutionIdentification4();
cbtrAgt.setFinInstnId(finInstnId);
rmtInf = factory.createRemittanceInformation5();
String ustrd = "";
if (!Strings.isNullOrEmpty(bankOrderLine.getReceiverReference())) {
ustrd += bankOrderLine.getReceiverReference();
}
if (!Strings.isNullOrEmpty(bankOrderLine.getReceiverLabel())) {
if (!Strings.isNullOrEmpty(ustrd)) {
ustrd += " - ";
}
ustrd += bankOrderLine.getReceiverLabel();
}
if (!Strings.isNullOrEmpty(ustrd)) {
rmtInf.getUstrd().add(ustrd);
}
// StructuredRemittanceInformation7 strd = factory.createStructuredRemittanceInformation7();
//
// CreditorReferenceInformation2 cdtrRefInf = factory.createCreditorReferenceInformation2();
// cdtrRefInf.setRef(bankOrderLine.getReceiverReference());
//
// strd.setCdtrRefInf(cdtrRefInf);
//
// rmtInf.getStrd().add(strd);
// Transaction
cdtTrfTxInf = factory.createCreditTransferTransactionInformation10();
cdtTrfTxInf.setPmtId(pmtId);
cdtTrfTxInf.setAmt(amt);
cdtTrfTxInf.setCdtr(cbtr);
cdtTrfTxInf.setCdtrAcct(cbtrAcct);
cdtTrfTxInf.setCdtrAgt(cbtrAgt);
cdtTrfTxInf.setRmtInf(rmtInf);
pmtInf.getCdtTrfTxInf().add(cdtTrfTxInf);
}
// Header
GroupHeader32 grpHdr = factory.createGroupHeader32();
/**
* Référence du message qui n'est pas utilisée comme référence fonctionnelle.
*/
grpHdr.setMsgId(bankOrderSeq);
/**
* CreationDateTime Definition : Date and Time at which a (group of) payment instruction(s) was
* created by the instructing party. XML Tag : <CreDtTm> Occurrences : [1..1] Format :
* YYYY-MM-DDThh:mm:ss
*/
grpHdr.setCreDtTm(datatypeFactory.newXMLGregorianCalendar(generationDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))));
grpHdr.setNbOfTxs(Integer.toString(nbOfLines));
grpHdr.setCtrlSum(arithmeticTotal);
grpHdr.setInitgPty(dbtr);
// Parent
CustomerCreditTransferInitiationV03 customerCreditTransferInitiationV03 = factory.createCustomerCreditTransferInitiationV03();
customerCreditTransferInitiationV03.setGrpHdr(grpHdr);
customerCreditTransferInitiationV03.getPmtInf().add(pmtInf);
// Document
Document xml = factory.createDocument();
xml.setCstmrCdtTrfInitn(customerCreditTransferInitiationV03);
fileToCreate = factory.createDocument(xml);
return super.generateFile();
}
Aggregations