FINERACT-2202: Bulk import fix (#4709)

Co-authored-by: Edder Lugo <edder.sanjuan@fintecheando.mx>
This commit is contained in:
Edder-Sanjuan
2025-05-30 18:47:09 -06:00
committed by GitHub
co-authored by Edder Lugo
parent 5e884d5f45
commit fa405f09fd
10 changed files with 22 additions and 19 deletions
@@ -68,7 +68,7 @@ public class LoanRepaymentImportHandler implements ImportHandler {
public Count process(final Workbook workbook, final String locale, final String dateFormat) { public Count process(final Workbook workbook, final String locale, final String dateFormat) {
List<LoanTransactionData> loanRepayments = readExcelFile(workbook, locale, dateFormat); List<LoanTransactionData> loanRepayments = readExcelFile(workbook, locale, dateFormat);
return importEntity(workbook, loanRepayments, dateFormat); return importEntity(workbook, loanRepayments, dateFormat, locale);
} }
private List<LoanTransactionData> readExcelFile(final Workbook workbook, final String locale, final String dateFormat) { private List<LoanTransactionData> readExcelFile(final Workbook workbook, final String locale, final String dateFormat) {
@@ -110,13 +110,14 @@ public class LoanRepaymentImportHandler implements ImportHandler {
receiptNumber, bankNumber, loanAccountId, EMPTY_STR, row.getRowNum(), locale, dateFormat); receiptNumber, bankNumber, loanAccountId, EMPTY_STR, row.getRowNum(), locale, dateFormat);
} }
private Count importEntity(final Workbook workbook, final List<LoanTransactionData> loanRepayments, final String dateFormat) { private Count importEntity(final Workbook workbook, final List<LoanTransactionData> loanRepayments, final String dateFormat,
final String locale) {
Sheet loanRepaymentSheet = workbook.getSheet(TemplatePopulateImportConstants.LOAN_REPAYMENT_SHEET_NAME); Sheet loanRepaymentSheet = workbook.getSheet(TemplatePopulateImportConstants.LOAN_REPAYMENT_SHEET_NAME);
int successCount = 0; int successCount = 0;
int errorCount = 0; int errorCount = 0;
String errorMessage; String errorMessage;
GsonBuilder gsonBuilder = GoogleGsonSerializerHelper.createGsonBuilder(); GsonBuilder gsonBuilder = GoogleGsonSerializerHelper.createGsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDate.class, new DateSerializer(dateFormat)); gsonBuilder.registerTypeAdapter(LocalDate.class, new DateSerializer(dateFormat, locale));
for (LoanTransactionData loanRepayment : loanRepayments) { for (LoanTransactionData loanRepayment : loanRepayments) {
try { try {
@@ -139,7 +139,7 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes"); DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint( DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN, DataValidationConstraint.OperatorType.BETWEEN,
"=DATEVALUE(VLOOKUP($C1,$R$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat); "=DATEVALUE(VLOOKUP($C1,$R$2:$U$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange); DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange); DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
@@ -340,8 +340,10 @@ public class FixedDepositWorkbookPopulator extends AbstractWorkbookPopulator {
writeString(FixedDepositConstants.INTEREST_CALCULATION_COL, rowHeader, "Interest Calculated*"); writeString(FixedDepositConstants.INTEREST_CALCULATION_COL, rowHeader, "Interest Calculated*");
writeString(FixedDepositConstants.INTEREST_CALCULATION_DAYS_IN_YEAR_COL, rowHeader, "# Days in Year*"); writeString(FixedDepositConstants.INTEREST_CALCULATION_DAYS_IN_YEAR_COL, rowHeader, "# Days in Year*");
writeString(FixedDepositConstants.LOCKIN_PERIOD_COL, rowHeader, "Locked In For"); writeString(FixedDepositConstants.LOCKIN_PERIOD_COL, rowHeader, "Locked In For");
writeString(FixedDepositConstants.LOCKIN_PERIOD_FREQUENCY_COL, rowHeader, "Locked Period frecuency");
writeString(FixedDepositConstants.DEPOSIT_AMOUNT_COL, rowHeader, "Deposit Amount"); writeString(FixedDepositConstants.DEPOSIT_AMOUNT_COL, rowHeader, "Deposit Amount");
writeString(FixedDepositConstants.DEPOSIT_PERIOD_COL, rowHeader, "Deposit Period*"); writeString(FixedDepositConstants.DEPOSIT_PERIOD_COL, rowHeader, "Deposit Period*");
writeString(FixedDepositConstants.DEPOSIT_PERIOD_FREQUENCY_COL, rowHeader, "Deposit period frecuency");
writeString(FixedDepositConstants.EXTERNAL_ID_COL, rowHeader, "External Id"); writeString(FixedDepositConstants.EXTERNAL_ID_COL, rowHeader, "External Id");
writeString(FixedDepositConstants.CHARGE_ID_1, rowHeader, "Charge Id"); writeString(FixedDepositConstants.CHARGE_ID_1, rowHeader, "Charge Id");
@@ -140,7 +140,7 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes"); DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint( DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN, DataValidationConstraint.OperatorType.BETWEEN,
"=DATEVALUE(VLOOKUP($C1,$R$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat); "=DATEVALUE(VLOOKUP($C1,$R$2:$U$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange); DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange); DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
@@ -139,7 +139,7 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes"); DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint( DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN, DataValidationConstraint.OperatorType.BETWEEN,
"=DATEVALUE(VLOOKUP($C1,$R$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat); "=DATEVALUE(VLOOKUP($C1,$R$2:$U$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange); DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange); DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
@@ -234,13 +234,12 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
if (savingsAccount.getMinRequiredOpeningBalance() != null) { if (savingsAccount.getMinRequiredOpeningBalance() != null) {
writeBigDecimal(TransactionConstants.LOOKUP_OPENING_BALANCE_COL, row, savingsAccount.getMinRequiredOpeningBalance()); writeBigDecimal(TransactionConstants.LOOKUP_OPENING_BALANCE_COL, row, savingsAccount.getMinRequiredOpeningBalance());
} }
if (savingsAccount.getActivatedOnDate() != null) { writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row,
writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row, "" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/"
"" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/" + savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/" + savingsAccount.getTimeline().getActivatedOnDate().getYear(),
+ savingsAccount.getTimeline().getActivatedOnDate().getYear(), dateCellStyle, dateFormat);
dateCellStyle, dateFormat);
}
} }
} }
@@ -71,6 +71,7 @@ public class AddressCommandFromApiJsonDeserializer {
supportedParameters.add("locale"); supportedParameters.add("locale");
supportedParameters.add("dateFormat"); supportedParameters.add("dateFormat");
supportedParameters.add("street");
supportedParameters.add(fromNewClient ? "addressTypeId" : "addressId"); supportedParameters.add(fromNewClient ? "addressTypeId" : "addressId");
this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters);
@@ -227,7 +227,7 @@ public final class ClientDataValidator {
if (this.configurationReadPlatformService.retrieveGlobalConfiguration(GlobalConfigurationConstants.ENABLE_ADDRESS).isEnabled()) { if (this.configurationReadPlatformService.retrieveGlobalConfiguration(GlobalConfigurationConstants.ENABLE_ADDRESS).isEnabled()) {
final JsonArray address = this.fromApiJsonHelper.extractJsonArrayNamed(ClientApiConstants.address, element); final JsonArray address = this.fromApiJsonHelper.extractJsonArrayNamed(ClientApiConstants.address, element);
baseDataValidator.reset().parameter(ClientApiConstants.address).value(address).notNull().jsonArrayNotEmpty(); baseDataValidator.reset().parameter(ClientApiConstants.address).value(address).ignoreIfNull().jsonArrayNotEmpty();
} }
List<ApiParameterError> dataValidationErrorsForClientNonPerson = getDataValidationErrorsForCreateOnClientNonPerson( List<ApiParameterError> dataValidationErrorsForClientNonPerson = getDataValidationErrorsForCreateOnClientNonPerson(
@@ -947,7 +947,7 @@ public final class LoanTransactionValidatorImpl implements LoanTransactionValida
final Set<String> transactionParameters = new HashSet<>( final Set<String> transactionParameters = new HashSet<>(
Arrays.asList("transactionDate", "transactionAmount", "externalId", "note", "locale", "dateFormat", "paymentTypeId", Arrays.asList("transactionDate", "transactionAmount", "externalId", "note", "locale", "dateFormat", "paymentTypeId",
"accountNumber", "checkNumber", "routingCode", "receiptNumber", "bankNumber", "loanId")); "accountNumber", "checkNumber", "routingCode", "receiptNumber", "bankNumber", "loanId", "numberOfRepayments"));
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType(); final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, transactionParameters); this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, transactionParameters);
@@ -185,8 +185,8 @@ public class SavingsAccountDataValidator {
if (lockinPeriodFrequency != null) { if (lockinPeriodFrequency != null) {
final Integer lockinPeriodFrequencyType = this.fromApiJsonHelper final Integer lockinPeriodFrequencyType = this.fromApiJsonHelper
.extractIntegerSansLocaleNamed(lockinPeriodFrequencyTypeParamName, element); .extractIntegerSansLocaleNamed(lockinPeriodFrequencyParamName, element);
baseDataValidator.reset().parameter(lockinPeriodFrequencyTypeParamName).value(lockinPeriodFrequencyType).ignoreIfNull() baseDataValidator.reset().parameter(lockinPeriodFrequencyParamName).value(lockinPeriodFrequencyType).notNull()
.inMinMaxRange(0, 3); .inMinMaxRange(0, 3);
} }
} }
@@ -1851,13 +1851,13 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom<Long>
.inMinMaxRange(0, 3); .inMinMaxRange(0, 3);
if (this.lockinPeriodFrequencyType != null) { if (this.lockinPeriodFrequencyType != null) {
baseDataValidator.reset().parameter(lockinPeriodFrequencyParamName).value(this.lockinPeriodFrequency).notNull() baseDataValidator.reset().parameter(lockinPeriodFrequencyParamName).value(this.lockinPeriodFrequency).ignoreIfNull()
.integerZeroOrGreater(); .integerZeroOrGreater();
} }
} else { } else {
baseDataValidator.reset().parameter(lockinPeriodFrequencyParamName).value(this.lockinPeriodFrequencyType) baseDataValidator.reset().parameter(lockinPeriodFrequencyParamName).value(this.lockinPeriodFrequencyType)
.integerZeroOrGreater(); .integerZeroOrGreater();
baseDataValidator.reset().parameter(lockinPeriodFrequencyTypeParamName).value(this.lockinPeriodFrequencyType).notNull() baseDataValidator.reset().parameter(lockinPeriodFrequencyTypeParamName).value(this.lockinPeriodFrequencyType).ignoreIfNull()
.inMinMaxRange(0, 3); .inMinMaxRange(0, 3);
} }
} }