Search in sources :

Example 1 with PaymentInstructionInformation4

use of com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PaymentInstructionInformation4 in project axelor-open-suite by axelor.

the class BankOrderFile00800102Service method generateFile.

/**
 * Generates the XML SEPA Direct Debit file (pain.008.001.02)
 *
 * @return the SEPA Direct Debit file (pain.008.001.02)
 * @throws JAXBException
 * @throws IOException
 * @throws AxelorException
 * @throws DatatypeConfigurationException
 */
@Override
public File generateFile() throws JAXBException, IOException, AxelorException, DatatypeConfigurationException {
    // Creditor
    PartyIdentification32 creditor = factory.createPartyIdentification32();
    creditor.setNm(senderBankDetails.getOwnerName());
    /*
     * Hierarchy of a XML file
     *
     * GroupHeader                          : This building block is mandatory and present once.
     *                                        It contains elements such as Message Identification,
     *                                        Creation Date And Time, Grouping indicator.
     * Payment Information                  : This building block is mandatory and repetitive.
     *                                        It contains, among other things, elements related
     *                                        to the Credit side of the transaction, such as
     *                                        Creditor and Payment Type Information.
     * Direct Debit Transaction Information : This building block is mandatory and repetitive.
     *                                        It contains, among other things, elements related
     *                                        to the debit side of the transaction, such as
     *                                        Debtor and Remittance Information Rules.
     *
     * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     * <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
     *     <CstmrDrctDbtInitn>
     *         <GrpHdr>                 <-- occ : 1..1
     *         </GrpHdr>
     *         <PmtInf>                 <-- occ : 1..n
     *             <DrctDbtTxInf>       <-- occ : 1..n
     *             </DrctDbtTxInf>
     *         </PmtInf>
     *     </CstmrDrctDbtInitn>
     * </Document>
     */
    /*
     * Document, <Document> tag
     */
    Document document = factory.createDocument();
    /*
     * Customer Direct Debit Initiation, <CstmrDrctDbtInitn> tag
     */
    CustomerDirectDebitInitiationV02 customerDirectDebitInitiationV02 = factory.createCustomerDirectDebitInitiationV02();
    document.setCstmrDrctDbtInitn(customerDirectDebitInitiationV02);
    /*
     * Group Header, <GrpHdr> tag
     * Set of characteristics shared by all individual transactions included in the message.
     */
    GroupHeader39 groupHeader = factory.createGroupHeader39();
    createGrpHdr(groupHeader, creditor);
    customerDirectDebitInitiationV02.setGrpHdr(groupHeader);
    /*
     * Payment Information, <PmtInf> tag
     * Does not need to set the List<PaymentInstructionInformation4> to the customerDirectDebitInitiationV02 object (see doc).
     */
    createPmtInf(customerDirectDebitInitiationV02.getPmtInf(), creditor);
    fileToCreate = factory.createDocument(document);
    return super.generateFile();
}
Also used : CustomerDirectDebitInitiationV02(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.CustomerDirectDebitInitiationV02) Document(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.Document) GroupHeader39(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.GroupHeader39) PartyIdentification32(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PartyIdentification32)

Example 2 with PaymentInstructionInformation4

use of com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PaymentInstructionInformation4 in project axelor-open-suite by axelor.

the class BankOrderFile00800102Service method createPmtInf.

/**
 * Builds the PaymentInformation part ({@code <PmtInf>} tag) of the file, and adds it into the
 * provided {@link PaymentInstructionInformation4} list
 *
 * @param paymentInstructionInformationList the list to add the {@link
 *     PaymentInstructionInformation4} objects into
 * @param creditor the creditor of the SEPA Direct Debit file
 * @throws DatatypeConfigurationException
 */
protected void createPmtInf(List<PaymentInstructionInformation4> paymentInstructionInformationList, PartyIdentification32 creditor) throws AxelorException, DatatypeConfigurationException {
    DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
    /*
     * Payment Information (mandatory)
     * Set of characteristics that apply to the credit side of the payment transactions included in the direct debit transaction initiation.
     */
    PaymentInstructionInformation4 paymentInstructionInformation4 = factory.createPaymentInstructionInformation4();
    paymentInstructionInformationList.add(paymentInstructionInformation4);
    /*
     * Payment Information Identification (mandatory)
     * Reference assigned by a sending party to unambiguously identify the payment information block within the message.
     */
    paymentInstructionInformation4.setPmtInfId(bankOrderSeq);
    /*
     * Payment Method (mandatory, always 'DD')
     * Specifies the means of payment that will be used to move the amount of money.
     */
    paymentInstructionInformation4.setPmtMtd(PaymentMethod2Code.DD);
    /*
     * Batch Booking (optional)
     * Identifies whether a single entry per individual transaction or a batch entry for the sum of the amounts of all transactions in the group is required.
     *
     * Usage : Recommended "true". If absent then default "true".
     *
     * 'true'  if : Identifies that a batch entry for the sum of the amounts of all
     *              transactions in a Payment Information Block is required.
     *              (one credit for all transactions in a Payment Information Block)
     * 'false' if : Identifies that a single entry for each of the transactions
     *              in a message is required.
     */
    paymentInstructionInformation4.setBtchBookg(true);
    /*
     * Number Of Transactions (optional)
     * Number of individual transactions contained in the message.
     */
    paymentInstructionInformation4.setNbOfTxs(Integer.toString(nbOfLines));
    /*
     * Control Sum (optional)
     * Total of all individual amounts included in the payment block, irrespective of currencies.
     *
     * Format : Max. 18 digits of which 2 for the fractional part.
     *          Decimal separator is "."
     */
    paymentInstructionInformation4.setCtrlSum(arithmeticTotal);
    /*
     * Payment Type Information (mandatory)
     * Set of elements that further specifies the type of transaction.
     */
    PaymentTypeInformation20 paymentTypeInformation20 = factory.createPaymentTypeInformation20();
    paymentInstructionInformation4.setPmtTpInf(paymentTypeInformation20);
    /*
     * ServiceLevel (mandatory)
     * Agreement under which or rules under which the transaction should be processed.
     */
    ServiceLevel8Choice serviceLevel8Choice = factory.createServiceLevel8Choice();
    paymentTypeInformation20.setSvcLvl(serviceLevel8Choice);
    /*
     * Code (mandatory, always 'SEPA')
     * Identification of a pre-agreed level of service between the parties in a coded form.
     */
    serviceLevel8Choice.setCd("SEPA");
    /*
     * Local Instrument (mandatory)
     * User community specific instrument.
     */
    LocalInstrument2Choice localInstrument2Choice = factory.createLocalInstrument2Choice();
    /*
     * Code (mandatory)
     *
     * Format : either 'CORE' or 'B2B'
     * Rule : The mixing of Core Direct Debits and Business-to-Business Direct Debits is not
     *        allowed in the same message.
     */
    switch(sepaType) {
        case SEPA_TYPE_CORE:
            localInstrument2Choice.setCd(SEPA_TYPE_CORE);
            break;
        case SEPA_TYPE_SBB:
            localInstrument2Choice.setCd(SEPA_TYPE_SBB);
            break;
        default:
            throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.BANK_ORDER_FILE_UNKNOWN_SEPA_TYPE));
    }
    paymentTypeInformation20.setLclInstrm(localInstrument2Choice);
    /*
     * Sequence Type (mandatory) // TO CHECK
     * Identifies the direct debit sequence, e.g. first, recurrent, final or one-off.
     *
     * Either one of the following values.
     * CODE  Name       Definition
     * ------------------------------------------------------------------------------------
     * FRST  First      First collection of a series of direct debit instructions.
     * RCUR  Recurrent  Direct debit instruction where the debtor's authorisation is used for
     *                  regular direct debit transactions initiated by the creditor.
     * FNAL  Final      Final collection of a series of direct debit instructions.
     * OOFF  One Off    Direct debit instruction where the debtor's authorisation is used to
     *                  initiate one single direct debit transaction.
     */
    paymentTypeInformation20.setSeqTp(SequenceType1Code.FRST);
    /*
     * Category Purpose (optional)
     * Specifies the purpose of the payment based on a set of pre-defined categories.
     */
    // CategoryPurpose1Choice categoryPurpose1Choice = factory.createCategoryPurpose1Choice();
    // paymentTypeInformation20.setCtgyPurp(categoryPurpose1Choice);
    /*
     * Code (mandatory)
     * Specifies the underlying reason of the payment transaction.
     *
     * iso20022.org -> 'PaymentCategoryPurpose1Code' for all codes available and definitions.
     */
    // categoryPurpose1Choice.setCd("CASH");
    /*
     * Requested Collection Date (mandatory)
     * Date at which the creditor requests the amount of money to be collected from the debtor.
     *
     * Format : YYYY-MM-DD
     * Usage  : The minimum delay between sending date and requested collection date is depending
     *          on the type of direct debit (B2B or CORE) and on the sequence type (FRST, OOFF,
     *          RCUR, FNAL).
     */
    paymentInstructionInformation4.setReqdColltnDt(datatypeFactory.newXMLGregorianCalendar(bankOrderDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
    /*
     * Creditor (mandatory)
     * Party to which an amount of money is due.
     */
    paymentInstructionInformation4.setCdtr(creditor);
    /*
     * Creditor Account (mandatory)
     * Unambiguous identification of the account of the creditor to which a credit entry will be posted as a result of the payment transaction.
     */
    CashAccount16 cashAccount16 = factory.createCashAccount16();
    /*
     * IBAN (mandatory)
     */
    AccountIdentification4Choice accountIdentification4Choice = factory.createAccountIdentification4Choice();
    accountIdentification4Choice.setIBAN(senderBankDetails.getIban());
    cashAccount16.setId(accountIdentification4Choice);
    /*
     * Currency (optional)
     *
     * Rule : Currency of the account must be EUR. For usage of another currency, please
     *        contact your bank.
     */
    cashAccount16.setCcy(CURRENCY_CODE);
    paymentInstructionInformation4.setCdtrAcct(cashAccount16);
    /*
     * Creditor Agent (mandatory)
     * Financial institution servicing an account for the creditor.
     *
     * Note : The Bank Identifier Code (BIC) is composed of 8 or 11 characters, of which only the
     *        first 8 characters are significant.
     */
    FinancialInstitutionIdentification7 financialInstitutionIdentification7 = factory.createFinancialInstitutionIdentification7();
    // BIC
    fillBic(financialInstitutionIdentification7, senderBankDetails.getBank());
    BranchAndFinancialInstitutionIdentification4 branchAndFinancialInstitutionIdentification4 = factory.createBranchAndFinancialInstitutionIdentification4();
    branchAndFinancialInstitutionIdentification4.setFinInstnId(financialInstitutionIdentification7);
    paymentInstructionInformation4.setCdtrAgt(branchAndFinancialInstitutionIdentification4);
    /*
     * Ultimate Creditor (optional)
     * Ultimate party to which an amount of money is due. Ultimate Creditor is only to be used if different from Creditor.
     */
    // paymentInstructionInformation4.setUltmtCdtr();
    /*
     * Charge Bearer (mandatory) // TO CHECK
     * Specifies which party/parties will bear the charges associated with the processing of the payment transaction.
     *
     * CODE  Name                   Description
     * ----------------------------------------------------------------------------------------
     * DEBT  BorneByDebtor          All transaction charges are to be borne by the debtor
     * CRED  BorneByCreditor        All transaction charges are to be borne by the creditor
     * SHAR  Shared                 In a direct debit context, means that transaction charges on
     *                              the sender side are to be borne by the creditor, transaction
     *                              charges on the receiver side are to be borne by the debtor.
     * SLEV  FollowingServiceLevel  Charges are to be applied following the rules agreed in the
     *                              service level and/or scheme.
     */
    paymentInstructionInformation4.setChrgBr(ChargeBearerType1Code.SLEV);
    /*
     * Creditor Scheme Identification (optional)
     * Credit party that signs the Direct Debit mandate.
     */
    // paymentInstructionInformation4.setCdtrSchmeId(creditor);
    /*
     * Direct Debit Transaction Information, <DrctDbtTxInf> tag
     * Does not need to set the List<DirectDebitTransactionInformation1> to the paymentInstructionInformation2 object (see doc)
     */
    createDrctDbtTxInf(paymentInstructionInformation4.getDrctDbtTxInf(), creditor);
}
Also used : LocalInstrument2Choice(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.LocalInstrument2Choice) AxelorException(com.axelor.exception.AxelorException) DatatypeFactory(javax.xml.datatype.DatatypeFactory) PaymentInstructionInformation4(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PaymentInstructionInformation4) BranchAndFinancialInstitutionIdentification4(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.BranchAndFinancialInstitutionIdentification4) CashAccount16(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.CashAccount16) PaymentTypeInformation20(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PaymentTypeInformation20) ServiceLevel8Choice(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.ServiceLevel8Choice) FinancialInstitutionIdentification7(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.FinancialInstitutionIdentification7) AccountIdentification4Choice(com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.AccountIdentification4Choice)

Aggregations

AccountIdentification4Choice (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.AccountIdentification4Choice)1 BranchAndFinancialInstitutionIdentification4 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.BranchAndFinancialInstitutionIdentification4)1 CashAccount16 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.CashAccount16)1 CustomerDirectDebitInitiationV02 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.CustomerDirectDebitInitiationV02)1 Document (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.Document)1 FinancialInstitutionIdentification7 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.FinancialInstitutionIdentification7)1 GroupHeader39 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.GroupHeader39)1 LocalInstrument2Choice (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.LocalInstrument2Choice)1 PartyIdentification32 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PartyIdentification32)1 PaymentInstructionInformation4 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PaymentInstructionInformation4)1 PaymentTypeInformation20 (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.PaymentTypeInformation20)1 ServiceLevel8Choice (com.axelor.apps.bankpayment.xsd.sepa.pain_008_001_02.ServiceLevel8Choice)1 AxelorException (com.axelor.exception.AxelorException)1 DatatypeFactory (javax.xml.datatype.DatatypeFactory)1