Search in sources :

Example 1 with Bank

use of com.axelor.apps.base.db.Bank in project axelor-open-suite by axelor.

the class BankOrderFileAFB320XCTService method createSenderRecord.

/**
 * Method to create a sender record for international transfer AFB320
 *
 * @return
 * @throws AxelorException
 */
protected String createSenderRecord() throws AxelorException {
    try {
        Bank senderBank = senderBankDetails.getBank();
        // Zone 1 : Code enregistrement
        String senderRecord = cfonbToolService.createZone("1", "03", cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 2);
        // Zone 2 : Code opération
        senderRecord += cfonbToolService.createZone("2", OPERATION_CODE_PI, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 2);
        // Zone 3 : Numéro séquentiel
        senderRecord += cfonbToolService.createZone("3", sequence++, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 6);
        // Zone 4 : Date de création
        senderRecord += cfonbToolService.createZone(I18n.get("4 - Generation date"), this.generationDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd")), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 8);
        // Zone 5 : Raison sociale émetteur
        senderRecord += cfonbToolService.createZone(I18n.get("5 - Sender company"), senderCompany.getName(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 35);
        // Zone 6 : Adresse de l'émetteur
        senderRecord += cfonbToolService.createZone(I18n.get("6 - Sender address"), senderAddress, cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3 * 35);
        // Zone 7 : N° SIRET de l'émetteur
        senderRecord += cfonbToolService.createZone(I18n.get("7 - Registration code"), registrationCode, cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 14);
        // Zone 8 : Référence remise
        senderRecord += cfonbToolService.createZone(I18n.get("8 - Sequence"), bankOrderSeq, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 16);
        // Zone 9 : Code BIC banque d'exécution
        senderRecord += cfonbToolService.createZone("9", "", cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 11);
        // Zone 10 : Type identifiant du compte à débiter à la banque d'éxécution ("1" : IBAN, "2" :
        // Identifiant national, "0" : Autre )
        senderRecord += cfonbToolService.createZone(I18n.get("10 - Sender bank details type"), senderBank.getBankDetailsTypeSelect(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 1);
        // Zone 11 : Identifiant du compte à débiter à la banque d'exécution
        senderRecord += cfonbToolService.createZone(I18n.get("11 - Sender bank details IBAN"), getIban(senderBankDetails), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 34);
        if (senderCurrency == null) {
            throw new AxelorException(TraceBackRepository.CATEGORY_MISSING_FIELD, I18n.get(IExceptionMessage.BANK_ORDER_NO_SENDER_CURRENCY), senderCompany.getName());
        }
        // Zone 12 : Code devise du compte à débiter à la banque d'éxécution
        senderRecord += cfonbToolService.createZone(I18n.get("12 - Bank order currency"), senderCurrency.getCode(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
        // Zone 13 : Identification du contrat/client
        senderRecord += cfonbToolService.createZone("13", "", cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 16);
        // Zone 14 : Type identifiant du compte émetteur ("1" : IBAN, "2" : Identifiant national, "0"
        // : Autre )
        senderRecord += cfonbToolService.createZone(I18n.get("14 - Sender bank details type"), senderBank.getBankDetailsTypeSelect(), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
        // Zone 15 : Identifiant du compte émetteur
        senderRecord += cfonbToolService.createZone(I18n.get("15 - Sender bank details IBAN"), getIban(senderBankDetails), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 34);
        // Zone 16 : Code devise du compte émetteur (Norme ISO)
        senderRecord += cfonbToolService.createZone(I18n.get("16 - Bank order currency"), senderCurrency.getCode(), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
        // Zone 17-1 : Zone non utilisée
        senderRecord += cfonbToolService.createZone("17-1", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 4);
        // Zone 17-2 : Zone non utilisée
        senderRecord += cfonbToolService.createZone("17-2", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
        // Zone 17-3 : Qualifiant de la date ("203" (date d'exécution demandée) valeur par défaut,
        // "227" soumis à accord contractuel avec la banque)
        senderRecord += cfonbToolService.createZone(I18n.get("17-3 - File format qualifying date"), bankOrderFileFormat.getQualifyingOfDate(), cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
        // Zone 17-4 : Zone réservée
        senderRecord += cfonbToolService.createZone("17-4", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 8);
        // Zone 18 : Indice type de débit de la remise
        senderRecord += cfonbToolService.createZone(I18n.get("18 - Order debit type index"), bankOrderFileFormat.getOrderDebitTypeSelect(), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
        // Zone 19 : Indice type de remises :
        // "1" : mono date et mono devise : La date et la devise sont prises dans l'enregistrement
        // "En-tête".
        // "2" : mono date et multi devises : La date est prise dans l'enregistrement "En-tête" et la
        // "devise" dans les enregistrements "Détail de l’opération".
        // "3" : multi dates et mono devise : la date est prise dans les enregistrements "Détail de
        // l’opération"et la devise dans l'enregistrement "En-tête".
        // "4" : multi dates et multi devises : la date et la devise sont prises dans les
        // enregistrements "Détail de l’opération".
        // NB : La valeur par défaut est "1". La possibilité d'utiliser les autres valeurs doit être
        // vérifiée auprès de la banque d'acheminement.
        senderRecord += cfonbToolService.createZone(I18n.get("19 - Order index type"), this.getOrderIndexType(isMultiDates, isMultiCurrencies), cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
        // "2"), pour les autres remises, elle ne doit pas être renseignée.
        if (!isMultiDates) {
            senderRecord += cfonbToolService.createZone(I18n.get("20 - Bank order date"), bankOrderDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 8);
        } else {
            senderRecord += cfonbToolService.createZone("20", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_NUMERIC, 8);
        }
        // "3"), pour les autres remises, elle ne doit pas être renseignée.
        if (!isMultiCurrencies) {
            senderRecord += cfonbToolService.createZone(I18n.get("21 - Currency"), bankOrderCurrency.getCode(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
        } else {
            senderRecord += cfonbToolService.createZone("21", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
        }
        cfonbToolService.toUpperCase(senderRecord);
        cfonbToolService.testLength(senderRecord, NB_CHAR_PER_LINE);
        return senderRecord;
    } catch (Exception e) {
        throw new AxelorException(e, senderBankDetails, TraceBackRepository.CATEGORY_MISSING_FIELD, I18n.get(IExceptionMessage.BANK_ORDER_WRONG_SENDER_RECORD) + ": " + e.getMessage(), bankOrderSeq);
    }
}
Also used : AxelorException(com.axelor.exception.AxelorException) Bank(com.axelor.apps.base.db.Bank) DatatypeConfigurationException(javax.xml.datatype.DatatypeConfigurationException) AxelorException(com.axelor.exception.AxelorException) IOException(java.io.IOException) JAXBException(javax.xml.bind.JAXBException)

Example 2 with Bank

use of com.axelor.apps.base.db.Bank in project axelor-open-suite by axelor.

the class BankOrderFileAFB320XCTService method createDependentReceiverBankRecord.

/**
 * Method to create a dependent receiver bank record for international transfer AFB320
 *
 * @param bankOrderLine
 * @return
 * @throws AxelorException
 */
protected String createDependentReceiverBankRecord(BankOrderLine bankOrderLine) throws AxelorException {
    try {
        BankDetails receiverBankDetails = bankOrderLine.getReceiverBankDetails();
        Bank bank = receiverBankDetails.getBank();
        // Zone 1 : Code enregistrement
        String totalRecord = cfonbToolService.createZone("1", "05", cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 2);
        // Zone 2 : Code opération
        totalRecord += cfonbToolService.createZone("2", OPERATION_CODE_PI, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 2);
        // Zone 3 : Numéro séquentiel
        totalRecord += cfonbToolService.createZone("3", sequence++, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 6);
        // Zone 4 : Nom de la banque du bénéficiaire (A ne renseigner que si le code BIC de la banque
        // du bénéficiaire est absent.
        // Si cette zone est renseignée ainsi que le code BIC, elle est ignorée par la banque sauf en
        // cas d'anomalie sur le code BIC.)
        totalRecord += cfonbToolService.createZone(I18n.get("4 - Bank name"), bank.getBankName(), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 35);
        // Zone 5 : Localisation de l'agence (Si le nom de la banque contient plus de 35 caractères,
        // utiliser le début de la première zone
        // pour le compléter et le reste de cette zone pour indiquer le début de l'adresse)
        String bankAddress = "";
        if (bank.getBankName() != null && bank.getBankName().length() > 35) {
            bankAddress = bank.getBankName().substring(35) + " ";
        }
        if (receiverBankDetails.getBankAddress() != null) {
            bankAddress += receiverBankDetails.getBankAddress().getAddress();
        }
        totalRecord += cfonbToolService.createZone(I18n.get("5 - Bank address"), bankAddress, cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3 * 35);
        // Zone 6 : Code BIC de la banque du bénéficiaire (Si ce code est renseigné, c'est lui qui est
        // utilisé pour identifier la banque du bénéficiaire.
        // C'est cette option qui est préconisée pour identifier la banque du bénéficiaire. )
        totalRecord += cfonbToolService.createZone(I18n.get("6 - Bank code"), bank.getCode(), cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 11);
        // Zone 7 : Code pays de la banque du bénéficiaire (Norme ISO.)
        String countryCode = "";
        if (bank.getCountry() != null) {
            countryCode = bank.getCountry().getAlpha2Code();
        }
        totalRecord += cfonbToolService.createZone(I18n.get("7 - Country code"), countryCode, cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 2);
        // Zone 8 : Zone réservée
        totalRecord += cfonbToolService.createZone("8", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 157);
        cfonbToolService.toUpperCase(totalRecord);
        cfonbToolService.testLength(totalRecord, NB_CHAR_PER_LINE);
        return totalRecord;
    } catch (Exception e) {
        throw new AxelorException(e.getCause(), bankOrderLine, TraceBackRepository.CATEGORY_MISSING_FIELD, I18n.get(IExceptionMessage.BANK_ORDER_WRONG_BENEFICIARY_BANK_DETAIL_RECORD) + ": " + e.getMessage(), bankOrderLine.getSequence());
    }
}
Also used : AxelorException(com.axelor.exception.AxelorException) Bank(com.axelor.apps.base.db.Bank) BankDetails(com.axelor.apps.base.db.BankDetails) DatatypeConfigurationException(javax.xml.datatype.DatatypeConfigurationException) AxelorException(com.axelor.exception.AxelorException) IOException(java.io.IOException) JAXBException(javax.xml.bind.JAXBException)

Example 3 with Bank

use of com.axelor.apps.base.db.Bank in project axelor-open-suite by axelor.

the class EbicsUserImport method importEbicsUser.

public Object importEbicsUser(Object bean, Map<String, Object> context) {
    assert bean instanceof EbicsUser;
    EbicsUser user = (EbicsUser) bean;
    updateCertificate(user.getA005Certificate());
    updateCertificate(user.getE002Certificate());
    updateCertificate(user.getX002Certificate());
    EbicsPartner partner = user.getEbicsPartner();
    if (partner != null) {
        EbicsBank ebicsBank = partner.getEbicsBank();
        if (ebicsBank.getVersion() == 0) {
            for (EbicsCertificate cert : ebicsBank.getEbicsCertificateList()) {
                updateCertificate(cert);
            }
            Bank bank = ebicsBank.getBank();
            if (bank.getVersion() == 0) {
                bankService.computeFullName(bank);
                bankService.splitBic(bank);
            }
        }
    }
    return user;
}
Also used : EbicsCertificate(com.axelor.apps.bankpayment.db.EbicsCertificate) EbicsBank(com.axelor.apps.bankpayment.db.EbicsBank) Bank(com.axelor.apps.base.db.Bank) EbicsUser(com.axelor.apps.bankpayment.db.EbicsUser) EbicsPartner(com.axelor.apps.bankpayment.db.EbicsPartner) EbicsBank(com.axelor.apps.bankpayment.db.EbicsBank)

Example 4 with Bank

use of com.axelor.apps.base.db.Bank in project axelor-open-suite by axelor.

the class BankDetailsController method validateIban.

public void validateIban(ActionRequest request, ActionResponse response) {
    response.setAttr("invalidIbanText", "hidden", true);
    if (request.getAction().endsWith("onnew")) {
        return;
    }
    BankDetails bankDetails = request.getContext().asType(BankDetails.class);
    Bank bank = bankDetails.getBank();
    if (bankDetails.getIban() != null && bank != null && bank.getBankDetailsTypeSelect() == BankRepository.BANK_IDENTIFIER_TYPE_IBAN) {
        try {
            Beans.get(BankDetailsService.class).validateIban(bankDetails.getIban());
        } catch (IbanFormatException | InvalidCheckDigitException | UnsupportedCountryException e) {
            if (request.getAction().endsWith("onchange")) {
                response.setFlash(I18n.get(IExceptionMessage.BANK_DETAILS_1));
            }
            response.setAttr("invalidIbanText", "hidden", false);
        } finally {
            bankDetails = Beans.get(BankDetailsServiceImpl.class).detailsIban(bankDetails);
            if (bank.getCountry() != null && bank.getCountry().getAlpha2Code().equals("FR")) {
                response.setValue("bankCode", bankDetails.getBankCode());
                response.setValue("sortCode", bankDetails.getSortCode());
                response.setValue("accountNbr", bankDetails.getAccountNbr());
                response.setValue("bbanKey", bankDetails.getBbanKey());
            }
        }
    }
}
Also used : BankDetailsService(com.axelor.apps.base.service.BankDetailsService) InvalidCheckDigitException(org.iban4j.InvalidCheckDigitException) Bank(com.axelor.apps.base.db.Bank) BankDetails(com.axelor.apps.base.db.BankDetails) UnsupportedCountryException(org.iban4j.UnsupportedCountryException) IbanFormatException(org.iban4j.IbanFormatException)

Example 5 with Bank

use of com.axelor.apps.base.db.Bank in project axelor-open-suite by axelor.

the class PartnerController method checkIbanValidity.

public void checkIbanValidity(ActionRequest request, ActionResponse response) throws AxelorException {
    List<BankDetails> bankDetailsList = request.getContext().asType(Partner.class).getBankDetailsList();
    List<String> ibanInError = Lists.newArrayList();
    if (bankDetailsList != null && !bankDetailsList.isEmpty()) {
        for (BankDetails bankDetails : bankDetailsList) {
            Bank bank = bankDetails.getBank();
            if (bankDetails.getIban() != null && bank != null && bank.getBankDetailsTypeSelect() == BankRepository.BANK_IDENTIFIER_TYPE_IBAN) {
                LOG.debug("checking iban code : {}", bankDetails.getIban());
                try {
                    Beans.get(BankDetailsService.class).validateIban(bankDetails.getIban());
                } catch (IbanFormatException | InvalidCheckDigitException | UnsupportedCountryException e) {
                    ibanInError.add(bankDetails.getIban());
                }
            }
        }
    }
    if (!ibanInError.isEmpty()) {
        Function<String, String> addLi = new Function<String, String>() {

            @Override
            public String apply(String s) {
                return "<li>".concat(s).concat("</li>").toString();
            }
        };
        response.setAlert(String.format(IExceptionMessage.BANK_DETAILS_2, "<ul>" + Joiner.on("").join(Iterables.transform(ibanInError, addLi)) + "<ul>"));
    }
}
Also used : InvalidCheckDigitException(org.iban4j.InvalidCheckDigitException) Bank(com.axelor.apps.base.db.Bank) BankDetails(com.axelor.apps.base.db.BankDetails) BankDetailsService(com.axelor.apps.base.service.BankDetailsService) Function(com.google.common.base.Function) UnsupportedCountryException(org.iban4j.UnsupportedCountryException) Partner(com.axelor.apps.base.db.Partner) IbanFormatException(org.iban4j.IbanFormatException)

Aggregations

Bank (com.axelor.apps.base.db.Bank)7 BankDetails (com.axelor.apps.base.db.BankDetails)3 AxelorException (com.axelor.exception.AxelorException)3 BankDetailsService (com.axelor.apps.base.service.BankDetailsService)2 IOException (java.io.IOException)2 JAXBException (javax.xml.bind.JAXBException)2 DatatypeConfigurationException (javax.xml.datatype.DatatypeConfigurationException)2 IbanFormatException (org.iban4j.IbanFormatException)2 InvalidCheckDigitException (org.iban4j.InvalidCheckDigitException)2 UnsupportedCountryException (org.iban4j.UnsupportedCountryException)2 BankOrderLine (com.axelor.apps.bankpayment.db.BankOrderLine)1 EbicsBank (com.axelor.apps.bankpayment.db.EbicsBank)1 EbicsCertificate (com.axelor.apps.bankpayment.db.EbicsCertificate)1 EbicsPartner (com.axelor.apps.bankpayment.db.EbicsPartner)1 EbicsUser (com.axelor.apps.bankpayment.db.EbicsUser)1 Country (com.axelor.apps.base.db.Country)1 Partner (com.axelor.apps.base.db.Partner)1 Function (com.google.common.base.Function)1 Transactional (com.google.inject.persist.Transactional)1