This is an automated email from the ASF dual-hosted git repository.
adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 0563311251 FINERACT-2202: Bulk import fix
0563311251 is described below
commit 05633112516cea56cf01d0aa680d4d45f7e81b7e
Author: danielales2541 <[email protected]>
AuthorDate: Mon Apr 28 18:59:08 2025 +0200
FINERACT-2202: Bulk import fix
---
.../portfolio/savings/DepositsApiConstants.java | 3 +++
.../bulkimport/importhandler/ImportHandlerUtils.java | 3 ++-
.../ChartOfAccountsImportHandler.java | 5 +++--
.../fixeddeposits/FixedDepositImportHandler.java | 8 ++++----
.../FixedDepositTransactionImportHandler.java | 6 +++---
.../journalentry/JournalEntriesImportHandler.java | 7 ++++---
.../RecurringDepositTransactionImportHandler.java | 6 +++---
.../chartofaccounts/ChartOfAccountsWorkbook.java | 10 ----------
.../FixedDepositTransactionWorkbookPopulator.java | 4 ++--
.../fixeddeposits/FixedDepositWorkbookPopulator.java | 4 ++--
.../LoanRepaymentWorkbookPopulator.java | 5 +++--
...RecurringDepositTransactionWorkbookPopulator.java | 4 ++--
.../data/DepositAccountTransactionDataValidator.java | 10 ++++++----
...AccountWritePlatformServiceJpaRepositoryImpl.java | 20 +++++++++++++++++++-
14 files changed, 56 insertions(+), 39 deletions(-)
diff --git
a/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/DepositsApiConstants.java
b/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/DepositsApiConstants.java
index 37d9586b28..0f44056280 100644
---
a/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/DepositsApiConstants.java
+++
b/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/DepositsApiConstants.java
@@ -181,6 +181,9 @@ public final class DepositsApiConstants {
public static final String amountOutstandingParamName =
"amountOutstanding";
public static final String amountOrPercentageParamName =
"amountOrPercentage";
public static final String amountParamName = "amount";
+ public static final String isManualTransaction = "isManualTransaction";
+ public static final String lienTransaction = "lienTransaction";
+ public static final String chargesPaidByData = "chargesPaidByData";
public static final String amountPaidParamName = "amountPaid";
public static final String chargeOptionsParamName = "chargeOptions";
public static final String chargePaymentModeParamName =
"chargePaymentMode";
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java
index 24e2c36202..0d592c7f30 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java
@@ -53,7 +53,8 @@ public final class ImportHandlerUtils {
Integer noOfEntries = 0;
// getLastRowNum and getPhysicalNumberOfRows showing false values
// sometimes
- while (true) {
+ int maxRows = sheet.getLastRowNum();
+ while (noOfEntries < maxRows) {
Row row = sheet.getRow(noOfEntries + 1);
if (row == null) {
break;
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/chartofaccounts/ChartOfAccountsImportHandler.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/chartofaccounts/ChartOfAccountsImportHandler.java
index 2dd0234bf9..d8b522a5d9 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/chartofaccounts/ChartOfAccountsImportHandler.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/chartofaccounts/ChartOfAccountsImportHandler.java
@@ -129,7 +129,8 @@ public class ChartOfAccountsImportHandler implements
ImportHandler {
String glCode =
ImportHandlerUtils.readAsString(ChartOfAcountsConstants.GL_CODE_COL, row);
Long tagId = null;
CodeValueData tagIdCodeValueData = null;
- if
(ImportHandlerUtils.readAsString(ChartOfAcountsConstants.TAG_ID_COL, row) !=
null) {
+ if
(ImportHandlerUtils.readAsString(ChartOfAcountsConstants.TAG_ID_COL, row) !=
null
+ &&
!ImportHandlerUtils.readAsString(ChartOfAcountsConstants.TAG_ID_COL,
row).equals("0")) {
tagId =
Long.parseLong(Objects.requireNonNull(ImportHandlerUtils.readAsString(ChartOfAcountsConstants.TAG_ID_COL,
row)));
tagIdCodeValueData = new CodeValueData().setId(tagId);
}
@@ -147,7 +148,7 @@ public class ChartOfAccountsImportHandler implements
ImportHandler {
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
gsonBuilder.registerTypeAdapter(EnumOptionData.class, new
EnumOptionDataIdSerializer());
gsonBuilder.registerTypeAdapter(CodeValueData.class, new
CodeValueDataIdSerializer());
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, locale));
gsonBuilder.registerTypeAdapter(CurrencyData.class, new
CurrencyDateCodeSerializer());
int successCount = 0;
int errorCount = 0;
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java
index 229c1eedff..8c2bbac9d4 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java
@@ -345,7 +345,7 @@ public class FixedDepositImportHandler implements
ImportHandler {
final String dateFormat) {
if (closedOnDates.get(i) != null) {
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, closedOnDates.get(i).getLocale()));
String payload = gsonBuilder.create().toJson(closedOnDates.get(i));
final CommandWrapper commandRequest = new CommandWrapperBuilder()
//
.closeFixedDepositAccount(savingsId)//
@@ -358,7 +358,7 @@ public class FixedDepositImportHandler implements
ImportHandler {
private CommandProcessingResult
importSavings(List<FixedDepositAccountData> savings, final int i, final String
dateFormat) {
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, savings.get(i).getLocale()));
gsonBuilder.registerTypeAdapter(EnumOptionData.class, new
EnumOptionDataIdSerializer());
JsonObject savingsJsonob =
gsonBuilder.create().toJsonTree(savings.get(i)).getAsJsonObject();
savingsJsonob.remove("withdrawalFeeForTransfers");
@@ -383,7 +383,7 @@ public class FixedDepositImportHandler implements
ImportHandler {
final String dateFormat) {
if (approvalDates.get(i) != null) {
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, approvalDates.get(i).getLocale()));
String payload = gsonBuilder.create().toJson(approvalDates.get(i));
final CommandWrapper commandRequest = new CommandWrapperBuilder()
//
.approveFixedDepositAccountApplication(savingsId)//
@@ -398,7 +398,7 @@ public class FixedDepositImportHandler implements
ImportHandler {
final String dateFormat) {
if (activationDates.get(i) != null) {
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, activationDates.get(i).getLocale()));
String payload =
gsonBuilder.create().toJson(activationDates.get(i));
final CommandWrapper commandRequest = new CommandWrapperBuilder()
//
.fixedDepositAccountActivation(savingsId)//
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java
index cea1702515..8df781e544 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java
@@ -66,7 +66,7 @@ public class FixedDepositTransactionImportHandler implements
ImportHandler {
@Override
public Count process(final Workbook workbook, final String locale, final
String dateFormat) {
List<SavingsAccountTransactionData> savingsTransactions =
readExcelFile(workbook, locale, dateFormat);
- return importEntity(workbook, savingsTransactions, dateFormat);
+ return importEntity(workbook, savingsTransactions, dateFormat, locale);
}
public List<SavingsAccountTransactionData> readExcelFile(final Workbook
workbook, final String locale, final String dateFormat) {
@@ -116,13 +116,13 @@ public class FixedDepositTransactionImportHandler
implements ImportHandler {
}
public Count importEntity(final Workbook workbook, final
List<SavingsAccountTransactionData> savingsTransactions,
- final String dateFormat) {
+ final String dateFormat, final String locale) {
Sheet savingsTransactionSheet =
workbook.getSheet(TemplatePopulateImportConstants.FIXED_DEPOSIT_TRANSACTION_SHEET_NAME);
int successCount = 0;
int errorCount = 0;
String errorMessage = "";
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, locale));
gsonBuilder.registerTypeAdapter(SavingsAccountTransactionEnumData.class, new
SavingsAccountTransactionEnumValueSerialiser());
for (SavingsAccountTransactionData transaction : savingsTransactions) {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java
index 98ddc20c94..1f326ca412 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java
@@ -63,7 +63,7 @@ public class JournalEntriesImportHandler implements
ImportHandler {
public Count process(final Workbook workbook, final String locale, final
String dateFormat) {
List<JournalEntryData> glTransactions = readExcelFile(workbook,
locale, dateFormat);
- return importEntity(workbook, glTransactions, dateFormat);
+ return importEntity(workbook, glTransactions, dateFormat, locale);
}
private List<JournalEntryData> readExcelFile(final Workbook workbook,
final String locale, final String dateFormat) {
@@ -185,13 +185,14 @@ public class JournalEntriesImportHandler implements
ImportHandler {
}
- private Count importEntity(final Workbook workbook, final
List<JournalEntryData> glTransactions, String dateFormat) {
+ private Count importEntity(final Workbook workbook, final
List<JournalEntryData> glTransactions, String dateFormat,
+ final String locale) {
Sheet addJournalEntriesSheet =
workbook.getSheet(TemplatePopulateImportConstants.JOURNAL_ENTRY_SHEET_NAME);
int successCount = 0;
int errorCount = 0;
String errorMessage = "";
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, locale));
gsonBuilder.registerTypeAdapter(CurrencyData.class, new
CurrencyDateCodeSerializer());
for (JournalEntryData transaction : glTransactions) {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java
index 603fd01b65..cb438237d8 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java
@@ -63,7 +63,7 @@ public class RecurringDepositTransactionImportHandler
implements ImportHandler {
@Override
public Count process(final Workbook workbook, final String locale, final
String dateFormat) {
List<SavingsAccountTransactionData> savingsTransactions =
readExcelFile(workbook, locale, dateFormat);
- return importEntity(workbook, savingsTransactions, dateFormat);
+ return importEntity(workbook, savingsTransactions, dateFormat, locale);
}
public List<SavingsAccountTransactionData> readExcelFile(final Workbook
workbook, final String locale, final String dateFormat) {
@@ -112,13 +112,13 @@ public class RecurringDepositTransactionImportHandler
implements ImportHandler {
}
public Count importEntity(final Workbook workbook, final
List<SavingsAccountTransactionData> savingsTransactions,
- final String dateFormat) {
+ final String dateFormat, final String locale) {
Sheet savingsTransactionSheet =
workbook.getSheet(TemplatePopulateImportConstants.SAVINGS_TRANSACTION_SHEET_NAME);
int successCount = 0;
int errorCount = 0;
String errorMessage = "";
GsonBuilder gsonBuilder =
GoogleGsonSerializerHelper.createGsonBuilder();
- gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat));
+ gsonBuilder.registerTypeAdapter(LocalDate.class, new
DateSerializer(dateFormat, locale));
gsonBuilder.registerTypeAdapter(SavingsAccountTransactionEnumData.class, new
SavingsAccountTransactionEnumValueSerialiser());
for (SavingsAccountTransactionData transaction : savingsTransactions) {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/chartofaccounts/ChartOfAccountsWorkbook.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/chartofaccounts/ChartOfAccountsWorkbook.java
index e4dad217e6..42b3738182 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/chartofaccounts/ChartOfAccountsWorkbook.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/chartofaccounts/ChartOfAccountsWorkbook.java
@@ -189,10 +189,6 @@ public class ChartOfAccountsWorkbook extends
AbstractWorkbookPopulator {
writeFormula(ChartOfAcountsConstants.TAG_ID_COL, row,
"IF(ISERROR(VLOOKUP($H" + (rowNo + 1) + ",$V$2:$W$" +
(glAccounts.size() + 1) + ",2,FALSE))," + "\"\",(VLOOKUP($H"
+ (rowNo + 1) + ",$V$2:$W$" +
(glAccounts.size() + 1) + ",2,FALSE)))");
- // auto populate office id for bulk import of opening balance
- writeFormula(ChartOfAcountsConstants.OFFICE_COL_ID, row,
- "IF(ISERROR(VLOOKUP($K" + (rowNo + 1) + ",$X$2:$Y$" +
(offices.size() + 1) + ",2,FALSE)),\"\",(VLOOKUP($K"
- + (rowNo + 1) + ",$X$2:$Y$" + (offices.size()
+ 1) + ",2,FALSE)))");
}
} catch (Exception e) {
LOG.error("Problem occurred in setDefaults function", e);
@@ -300,12 +296,6 @@ public class ChartOfAccountsWorkbook extends
AbstractWorkbookPopulator {
writeString(ChartOfAcountsConstants.TAG_COL, rowHeader, "Tag");
writeString(ChartOfAcountsConstants.TAG_ID_COL, rowHeader, "Tag Id");
writeString(ChartOfAcountsConstants.DESCRIPTION_COL, rowHeader,
"Description *");
- // adding data for opening balance bulk import
- writeString(ChartOfAcountsConstants.OFFICE_COL, rowHeader, "Parent
Office for Opening Balance");
- writeString(ChartOfAcountsConstants.OFFICE_COL_ID, rowHeader, "Parent
Office Code Opening Balance");
- writeString(ChartOfAcountsConstants.CURRENCY_CODE, rowHeader,
"Currency Code");
- writeString(ChartOfAcountsConstants.DEBIT_AMOUNT, rowHeader, "Debit
Amount");
- writeString(ChartOfAcountsConstants.CREDIT_AMOUNT, rowHeader, "Credit
Amount");
writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_TYPE_COL,
rowHeader, "Lookup Account type");
writeString(ChartOfAcountsConstants.LOOKUP_TAG_COL, rowHeader, "Lookup
Tag");
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java
index e641cda6b1..3c6abea748 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java
@@ -112,8 +112,8 @@ public class FixedDepositTransactionWorkbookPopulator
extends AbstractWorkbookPo
.createExplicitListConstraint(new String[] { "Withdrawal",
"Deposit" });
DataValidationConstraint paymentTypeConstraint =
validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint =
validationHelper.createDateConstraint(
- DataValidationConstraint.OperatorType.BETWEEN,
"=VLOOKUP($C1,$Q$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE)",
- "=TODAY()", dateFormat);
+ DataValidationConstraint.OperatorType.BETWEEN,
+ "=DATEVALUE(VLOOKUP($C1,$Q$2:$T$" + (savingsAccounts.size() +
1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation =
validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation =
validationHelper.createValidation(clientNameConstraint, clientNameRange);
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositWorkbookPopulator.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositWorkbookPopulator.java
index 5d265a9bce..325a91d196 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositWorkbookPopulator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositWorkbookPopulator.java
@@ -115,7 +115,7 @@ public class FixedDepositWorkbookPopulator extends
AbstractWorkbookPopulator {
.createFormulaListConstraint("INDIRECT(CONCATENATE(\"Staff_\",$A1))");
DataValidationConstraint submittedDateConstraint =
validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN,
- "=VLOOKUP($B1,$AF$2:$AG$" +
(clientSheetPopulator.getClientsSize() + 1) + ",2,FALSE)", "=TODAY()",
dateFormat);
+ "=DATEVALUE(VLOOKUP($B1,$AF$2:$AG$" +
(clientSheetPopulator.getClientsSize() + 1) + ",2,FALSE))", "=TODAY()",
dateFormat);
DataValidationConstraint approvalDateConstraint = validationHelper
.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=$E1",
"=TODAY()", dateFormat);
DataValidationConstraint activationDateConstraint = validationHelper
@@ -341,7 +341,7 @@ public class FixedDepositWorkbookPopulator extends
AbstractWorkbookPopulator {
writeString(FixedDepositConstants.INTEREST_CALCULATION_DAYS_IN_YEAR_COL,
rowHeader, "# Days in Year*");
writeString(FixedDepositConstants.LOCKIN_PERIOD_COL, rowHeader,
"Locked In For");
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.EXTERNAL_ID_COL, rowHeader,
"External Id");
writeString(FixedDepositConstants.CHARGE_ID_1, rowHeader, "Charge Id");
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/loanrepayment/LoanRepaymentWorkbookPopulator.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/loanrepayment/LoanRepaymentWorkbookPopulator.java
index c097ae9aba..1b0306fc86 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/loanrepayment/LoanRepaymentWorkbookPopulator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/loanrepayment/LoanRepaymentWorkbookPopulator.java
@@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import
org.apache.fineract.infrastructure.bulkimport.constants.LoanRepaymentConstants;
import
org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
import
org.apache.fineract.infrastructure.bulkimport.populator.AbstractWorkbookPopulator;
@@ -185,12 +186,12 @@ public class LoanRepaymentWorkbookPopulator extends
AbstractWorkbookPopulator {
String clientName = "";
String clientId = "";
for (int i = 0; i < allloans.size(); i++) {
- if (!clientName.equals(allloans.get(i).getClientName())) {
+ if (!Objects.equals(clientName, allloans.get(i).getClientName())) {
endIndex = i + 1;
clientNameToBeginEndIndexes.put(clientName, new Integer[] {
startIndex, endIndex });
startIndex = i + 2;
clientName = allloans.get(i).getClientName();
- clientId = allloans.get(i).getClientId().toString();
+ clientId = String.valueOf(allloans.get(i).getClientId());
if (!clientsWithActiveLoans.contains(clientName)) {
clientsWithActiveLoans.add(clientName);
clientIdsWithActiveLoans.add(clientId);
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java
index 251e84a437..400e8fc9c7 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java
@@ -113,8 +113,8 @@ public class RecurringDepositTransactionWorkbookPopulator
extends AbstractWorkbo
.createExplicitListConstraint(new String[] { "Withdrawal",
"Deposit" });
DataValidationConstraint paymentTypeConstraint =
validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint =
validationHelper.createDateConstraint(
- DataValidationConstraint.OperatorType.BETWEEN,
"=VLOOKUP($C1,$Q$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE)",
- "=TODAY()", dateFormat);
+ DataValidationConstraint.OperatorType.BETWEEN,
+ "=DATEVALUE(VLOOKUP($C1,$Q$2:$T$" + (savingsAccounts.size() +
1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation =
validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation =
validationHelper.createValidation(clientNameConstraint, clientNameRange);
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java
index c983f7516a..25c6d10054 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java
@@ -61,10 +61,12 @@ public class DepositAccountTransactionDataValidator {
private final FromJsonHelper fromApiJsonHelper;
- private static final Set<String>
DEPOSIT_ACCOUNT_TRANSACTION_REQUEST_DATA_PARAMETERS = new HashSet<>(
- Arrays.asList(DepositsApiConstants.localeParamName,
DepositsApiConstants.dateFormatParamName, transactionDateParamName,
- transactionAmountParamName, paymentTypeIdParamName,
transactionAccountNumberParamName, checkNumberParamName,
- routingCodeParamName, receiptNumberParamName,
bankNumberParamName));
+ private static final Set<String>
DEPOSIT_ACCOUNT_TRANSACTION_REQUEST_DATA_PARAMETERS = new
HashSet<>(Arrays.asList(
+ DepositsApiConstants.localeParamName,
DepositsApiConstants.dateFormatParamName, transactionDateParamName,
+ transactionAmountParamName, paymentTypeIdParamName,
transactionAccountNumberParamName, checkNumberParamName,
+ routingCodeParamName, receiptNumberParamName, bankNumberParamName,
DepositsApiConstants.amountParamName,
+ DepositsApiConstants.accountIdParamName,
DepositsApiConstants.dateParamName,
DepositsApiConstants.submittedOnDateParamName,
+ DepositsApiConstants.lienTransaction,
DepositsApiConstants.isManualTransaction,
DepositsApiConstants.chargesPaidByData));
private static final Set<String>
DEPOSIT_ACCOUNT_RECOMMENDED_DEPOSIT_AMOUNT_UPDATE_REQUEST_DATA_PARAMETERS = new
HashSet<>(
Arrays.asList(DepositsApiConstants.localeParamName,
DepositsApiConstants.dateFormatParamName,
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java
index aa78496c57..79b94094a0 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java
@@ -349,7 +349,25 @@ public class
DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo
@Override
public CommandProcessingResult depositToFDAccount(final Long savingsId,
@SuppressWarnings("unused") final JsonCommand command) {
// this.context.authenticatedUser();
- throw new DepositAccountTransactionNotAllowedException(savingsId,
"deposit", DepositAccountType.FIXED_DEPOSIT);
+ this.depositAccountTransactionDataValidator.validate(command,
DepositAccountType.FIXED_DEPOSIT);
+
+ final FixedDepositAccount account = (FixedDepositAccount)
this.depositAccountAssembler.assembleFrom(savingsId,
+ DepositAccountType.FIXED_DEPOSIT);
+ checkClientOrGroupActive(account);
+
+ final Locale locale = command.extractLocale();
+ final DateTimeFormatter fmt =
DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
+
+ final LocalDate transactionDate =
command.localDateValueOfParameterNamed("transactionDate");
+ final BigDecimal transactionAmount =
command.bigDecimalValueOfParameterNamed("transactionAmount");
+
+ final Map<String, Object> changes = new LinkedHashMap<>();
+ final PaymentDetail paymentDetail =
this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command,
changes);
+ final SavingsAccountTransaction deposit =
this.depositAccountDomainService.handleFDDeposit(account, fmt, transactionDate,
+ transactionAmount, paymentDetail);
+
+ return new
CommandProcessingResultBuilder().withEntityId(deposit.getId()).withOfficeId(account.officeId())
+
.withClientId(account.clientId()).withGroupId(account.groupId()).withSavingsId(savingsId).with(changes).build();
}