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);
}
}
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());
}
}
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;
}
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());
}
}
}
}
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>"));
}
}
Aggregations