use of com.axelor.apps.bankpayment.db.BankOrderEconomicReason in project axelor-open-suite by axelor.
the class BankOrderFileAFB320XCTService method createDetailRecord.
/**
* Method to create a recipient record for international transfer AFB320
*
* @param bankOrderLine
* @return
* @throws AxelorException
*/
protected String createDetailRecord(BankOrderLine bankOrderLine) throws AxelorException {
try {
BankDetails receiverBankDetails = bankOrderLine.getReceiverBankDetails();
// Zone 1 : Code enregistrement
String detailRecord = cfonbToolService.createZone("1", "04", cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 2);
// Zone 2 : Code opération
detailRecord += cfonbToolService.createZone("2", OPERATION_CODE_PI, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 2);
// Zone 3 : Numéro séquentiel
detailRecord += cfonbToolService.createZone("3", sequence++, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 6);
// national, "0" : Autre )
if (receiverBankDetails.getBank() == null) {
throw new AxelorException(TraceBackRepository.CATEGORY_MISSING_FIELD, I18n.get(IExceptionMessage.BANK_ORDER_RECEIVER_BANK_DETAILS_MISSING_BANK));
}
detailRecord += cfonbToolService.createZone(I18n.get("4 - Bank details type"), receiverBankDetails.getBank().getBankDetailsTypeSelect(), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
// Zone 5 : Identifiant du compte du bénéficiaire
detailRecord += cfonbToolService.createZone(I18n.get("5 - Bank details IBAN"), getIban(receiverBankDetails), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, 34);
// Zone 6 et 7 attribution des longueurs des zones en fonction de la longueur du nom:
int ownerNameLength = receiverBankDetails.getOwnerName().length();
int adressLength = 3 * 35;
if (ownerNameLength <= 35) {
ownerNameLength = 35;
} else if (35 < ownerNameLength && ownerNameLength <= 70) {
adressLength = 3 * 35 - (ownerNameLength - 35);
} else if (ownerNameLength > 70) {
ownerNameLength = 2 * 35;
adressLength = 2 * 35;
}
// Zone 6 : Nom du bénéficiaire
detailRecord += cfonbToolService.createZone(I18n.get("6 - Bank details owner name"), receiverBankDetails.getOwnerName(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, ownerNameLength);
// Zone 7 : Adresse du bénéficiaire (Obligatoire si mode de règlement par chèque (zone 18 =
// "1" ou "2")
// Si le nom du bénéficiaire 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)
detailRecord += cfonbToolService.createZone("7", getReceiverAddress(bankOrderLine), cfonbToolService.STATUS_DEPENDENT, cfonbToolService.FORMAT_ALPHA_NUMERIC, adressLength);
// Zone 8 : Identification nationale du bénéficiaire (Cette zone n'est pas utilisée)
detailRecord += cfonbToolService.createZone("8", "", cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 17);
// Zone 9 : Code pays du bénéficiaire (Norme ISO)
Country receiverCountry = bankOrderLine.getReceiverCountry();
String countryCode = "";
if (receiverCountry != null) {
countryCode = receiverCountry.getAlpha2Code();
}
detailRecord += cfonbToolService.createZone(I18n.get("9 - Country code"), countryCode, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 2);
// Zone 10 : Référence de l'opération
detailRecord += cfonbToolService.createZone(I18n.get("10 - Sequence"), bankOrderLine.getSequence(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 16);
// Zone 11 : Qualifiant du montant de l'ordre :
// "T" : Montant exprimé dans la devise du transfert
// "D" : Montant équivalent exprimé dans la devise du compte à débiter. Cette valeur ne doit
// être utilisée que lorsque la devise du compte à débiter est différente de celle du
// transfert.
String qualifyngOfAmountStr;
if (senderCurrency.equals(bankOrderCurrency)) {
qualifyngOfAmountStr = BankOrderFileFormatRepository.QUALIFYING_AMOUNT_TRANSFER_CURRENCY;
} else {
qualifyngOfAmountStr = qualityOfAmount;
if (Strings.isNullOrEmpty(qualifyngOfAmountStr)) {
qualifyngOfAmountStr = BankOrderFileFormatRepository.QUALIFYING_AMOUNT_TRANSFER_CURRENCY;
}
}
detailRecord += cfonbToolService.createZone("11", qualifyngOfAmountStr, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
// Zone 12 : Zone réservée
detailRecord += cfonbToolService.createZone("12", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 4);
// Zone 13 : Montant de l'ordre (Le montant comporte le nombre de décimales indiqué dans la
// zone "Nombre de décimales" du même enregistrement)
BigDecimal orderAmount;
if (qualifyngOfAmountStr.equals(BankOrderFileFormatRepository.QUALIFYING_AMOUNT_SENDER_BANK_DETAILS_CURRENCY)) {
orderAmount = bankOrderLine.getCompanyCurrencyAmount();
} else {
orderAmount = bankOrderLine.getBankOrderAmount();
}
detailRecord += cfonbToolService.createZone("13", orderAmount, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 14);
// Zone 14 : Nombre de décimales
detailRecord += cfonbToolService.createZone("14", "2", cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, // TODO
1);
// Zone 15 : Zone réservée
detailRecord += cfonbToolService.createZone("15", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
// Zone 16 : Code motif économique (3 caract. numériques ou valeur "NNN" )
BankOrderEconomicReason bankOrderEconomicReason = bankOrderLine.getBankOrderEconomicReason();
String bankOrderEconomicReasonCode = "NNN";
if (bankOrderEconomicReason != null) {
bankOrderEconomicReasonCode = bankOrderEconomicReason.getCode();
}
detailRecord += cfonbToolService.createZone(I18n.get("16 - Economic reason code"), bankOrderEconomicReasonCode, cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
// Zone 17 : Zone réservée
detailRecord += cfonbToolService.createZone("17", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 2);
// Zone 18 : Mode de règlement ("0" = Virement ou autre sauf chèque, "1" ou "2" = par chèque)
detailRecord += cfonbToolService.createZone(I18n.get("18 - Payment mode select"), bankOrderLine.getPaymentModeSelect(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 1);
// Zone 19 : Code imputation des frais ("13" = Bénéficiaire (BEN), "14" = Emetteur et
// Bénéficiaire (SHA), "15" = Emetteur (OUR))
detailRecord += cfonbToolService.createZone(I18n.get("19 - Fees imputation mode"), bankOrderLine.getFeesImputationModeSelect(), cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 2);
// Zone 23 : Zone réservée
detailRecord += cfonbToolService.createZone("23", "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 57);
// Zone 24-1 : Qualifiant de la date ("203" (date d'exécution demandée))
detailRecord += cfonbToolService.createZone(I18n.get("24-1 - Qualifying of date"), bankOrderFileFormat.getQualifyingOfDate(), cfonbToolService.STATUS_OPTIONAL, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
// l'"Entête" = "3" ou "4"), pour les autres remises, elle ne doit pas être renseignée.)
if (isMultiDates) {
String bankOrderDate = "";
if (bankOrderLine.getBankOrderDate() != null) {
bankOrderDate = bankOrderLine.getBankOrderDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
}
detailRecord += cfonbToolService.createZone(I18n.get("24-2 - Date"), bankOrderDate, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_NUMERIC, 8);
} else {
detailRecord += cfonbToolService.createZone(I18n.get("24-2 - Date"), "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_NUMERIC, 8);
}
// renseignée.
if (isMultiCurrencies) {
String bankOrderCurrencyCode = "";
if (bankOrderLine.getBankOrderCurrency() != null) {
bankOrderCurrencyCode = bankOrderLine.getBankOrderCurrency().getCode();
}
detailRecord += cfonbToolService.createZone(I18n.get("25 - Currency"), bankOrderCurrencyCode, cfonbToolService.STATUS_MANDATORY, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
} else {
detailRecord += cfonbToolService.createZone(I18n.get("25 - Currency"), "", cfonbToolService.STATUS_NOT_USED, cfonbToolService.FORMAT_ALPHA_NUMERIC, 3);
}
cfonbToolService.toUpperCase(detailRecord);
cfonbToolService.testLength(detailRecord, NB_CHAR_PER_LINE);
return detailRecord;
} catch (Exception e) {
throw new AxelorException(e, bankOrderLine, TraceBackRepository.CATEGORY_MISSING_FIELD, I18n.get(IExceptionMessage.BANK_ORDER_WRONG_MAIN_DETAIL_RECORD) + ": " + e.getMessage(), bankOrderLine.getSequence());
}
}
Aggregations