FINERACT-1396: Bulk Import Feature
This commit is contained in:
+34
@@ -0,0 +1,34 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.infrastructure.bulkimport.constants;
|
||||||
|
|
||||||
|
public final class ChargeConstants {
|
||||||
|
|
||||||
|
private ChargeConstants() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Column indices
|
||||||
|
public static final int CHARGE_NAME_COL = 1;
|
||||||
|
public static final int CHARGE_AMOUNT_COL = 2;
|
||||||
|
public static final int CHARGE_CALCULATION_TYPE_COL = 3;
|
||||||
|
// public static final int CHARGE_DUE_DATE_COL = 4;
|
||||||
|
public static final int CHARGE_TIME_TYPE_COL = 4;
|
||||||
|
|
||||||
|
}
|
||||||
+7
-4
@@ -60,10 +60,11 @@ public final class LoanConstants {
|
|||||||
public static final int LOAN_ID_COL = 33;// AH
|
public static final int LOAN_ID_COL = 33;// AH
|
||||||
public static final int FAILURE_REPORT_COL = 34;// AI
|
public static final int FAILURE_REPORT_COL = 34;// AI
|
||||||
public static final int EXTERNAL_ID_COL = 35;// AJ
|
public static final int EXTERNAL_ID_COL = 35;// AJ
|
||||||
public static final int CHARGE_ID_1 = 36;// AK
|
public static final int CHARGE_NAME_1 = 36;// AK
|
||||||
public static final int CHARGE_AMOUNT_1 = 37;// AL
|
public static final int CHARGE_AMOUNT_1 = 37;// AL
|
||||||
|
|
||||||
public static final int CHARGE_DUE_DATE_1 = 38;// AM
|
public static final int CHARGE_DUE_DATE_1 = 38;// AM
|
||||||
public static final int CHARGE_ID_2 = 39;// AN
|
public static final int CHARGE_NAME_2 = 39;// AO
|
||||||
public static final int CHARGE_AMOUNT_2 = 40;// AO
|
public static final int CHARGE_AMOUNT_2 = 40;// AO
|
||||||
public static final int CHARGE_DUE_DATE_2 = 41;// AP
|
public static final int CHARGE_DUE_DATE_2 = 41;// AP
|
||||||
public static final int GROUP_ID = 42;// AQ
|
public static final int GROUP_ID = 42;// AQ
|
||||||
@@ -71,8 +72,10 @@ public final class LoanConstants {
|
|||||||
public static final int LOOKUP_CLIENT_EXTERNAL_ID = 44;// AS
|
public static final int LOOKUP_CLIENT_EXTERNAL_ID = 44;// AS
|
||||||
public static final int LOOKUP_ACTIVATION_DATE_COL = 45;// AT
|
public static final int LOOKUP_ACTIVATION_DATE_COL = 45;// AT
|
||||||
public static final int LINK_ACCOUNT_ID = 46;// AU
|
public static final int LINK_ACCOUNT_ID = 46;// AU
|
||||||
public static final int LOAN_COLLATERAL_ID = 47;
|
public static final int LOAN_COLLATERAL_ID = 47;// AV
|
||||||
public static final int LOAN_COLLATERAL_QUANTITY = 48;
|
public static final int LOAN_COLLATERAL_QUANTITY = 48;// AW
|
||||||
|
public static final int CHARGE_AMOUNT_TYPE_1 = 49;// AX
|
||||||
|
public static final int CHARGE_AMOUNT_TYPE_2 = 50;// AY
|
||||||
|
|
||||||
public static final String LOAN_TYPE_INDIVIDUAL = "Individual";
|
public static final String LOAN_TYPE_INDIVIDUAL = "Individual";
|
||||||
public static final String LOAN_TYPE_GROUP = "Group";
|
public static final String LOAN_TYPE_GROUP = "Group";
|
||||||
|
|||||||
+1
@@ -35,6 +35,7 @@ public final class TemplatePopulateImportConstants {
|
|||||||
public static final String CENTER_SHEET_NAME = "Centers";
|
public static final String CENTER_SHEET_NAME = "Centers";
|
||||||
public static final String STAFF_SHEET_NAME = "Staff";
|
public static final String STAFF_SHEET_NAME = "Staff";
|
||||||
public static final String GROUP_SHEET_NAME = "Groups";
|
public static final String GROUP_SHEET_NAME = "Groups";
|
||||||
|
public static final String CHARGE_SHEET_NAME = "Charges";
|
||||||
public static final String CHART_OF_ACCOUNTS_SHEET_NAME = "ChartOfAccounts";
|
public static final String CHART_OF_ACCOUNTS_SHEET_NAME = "ChartOfAccounts";
|
||||||
public static final String CLIENT_ENTITY_SHEET_NAME = "ClientEntity";
|
public static final String CLIENT_ENTITY_SHEET_NAME = "ClientEntity";
|
||||||
public static final String CLIENT_PERSON_SHEET_NAME = "ClientPerson";
|
public static final String CLIENT_PERSON_SHEET_NAME = "ClientPerson";
|
||||||
|
|||||||
+44
@@ -24,6 +24,7 @@ import java.time.LocalDate;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
||||||
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
|
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
|
||||||
|
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
|
||||||
import org.apache.fineract.infrastructure.core.exception.AbstractPlatformException;
|
import org.apache.fineract.infrastructure.core.exception.AbstractPlatformException;
|
||||||
import org.apache.fineract.infrastructure.core.exception.UnsupportedParameterException;
|
import org.apache.fineract.infrastructure.core.exception.UnsupportedParameterException;
|
||||||
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
||||||
@@ -304,6 +305,7 @@ public final class ImportHandlerUtils {
|
|||||||
if (sheetName.equals(TemplatePopulateImportConstants.OFFICE_SHEET_NAME)
|
if (sheetName.equals(TemplatePopulateImportConstants.OFFICE_SHEET_NAME)
|
||||||
|| sheetName.equals(TemplatePopulateImportConstants.GL_ACCOUNTS_SHEET_NAME)
|
|| sheetName.equals(TemplatePopulateImportConstants.GL_ACCOUNTS_SHEET_NAME)
|
||||||
|| sheetName.equals(TemplatePopulateImportConstants.EXTRAS_SHEET_NAME)
|
|| sheetName.equals(TemplatePopulateImportConstants.EXTRAS_SHEET_NAME)
|
||||||
|
|| sheetName.equals(TemplatePopulateImportConstants.CHARGE_SHEET_NAME)
|
||||||
|| sheetName.equals(TemplatePopulateImportConstants.SHARED_PRODUCTS_SHEET_NAME)
|
|| sheetName.equals(TemplatePopulateImportConstants.SHARED_PRODUCTS_SHEET_NAME)
|
||||||
|| sheetName.equals(TemplatePopulateImportConstants.ROLES_SHEET_NAME)) {
|
|| sheetName.equals(TemplatePopulateImportConstants.ROLES_SHEET_NAME)) {
|
||||||
if (row.getCell(cell.getColumnIndex() - 1).getCellType() == CellType.NUMERIC) {
|
if (row.getCell(cell.getColumnIndex() - 1).getCellType() == CellType.NUMERIC) {
|
||||||
@@ -342,6 +344,48 @@ public final class ImportHandlerUtils {
|
|||||||
return 0L;
|
return 0L;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static EnumOptionData getChargeTimeTypeEmun(Sheet sheet, String name) {
|
||||||
|
String sheetName = sheet.getSheetName();
|
||||||
|
String chargeTimeType = "";
|
||||||
|
EnumOptionData chargeTimeTypeEnum = null;
|
||||||
|
if (sheetName.equals(TemplatePopulateImportConstants.CHARGE_SHEET_NAME)) {
|
||||||
|
for (Row row : sheet) {
|
||||||
|
for (Cell cell : row) {
|
||||||
|
if (name != null) {
|
||||||
|
if (cell.getCellType() == CellType.STRING && cell.getRichStringCellValue().getString().trim().equals(name)) {
|
||||||
|
chargeTimeType = row.getCell(cell.getColumnIndex() + 3).getStringCellValue().toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!chargeTimeType.equals("")) {
|
||||||
|
String chargeTimeTypeId = "";
|
||||||
|
if (chargeTimeType.equalsIgnoreCase("Disbursement")) {
|
||||||
|
chargeTimeTypeId = "1";
|
||||||
|
}
|
||||||
|
chargeTimeTypeEnum = new EnumOptionData(null, null, chargeTimeTypeId);
|
||||||
|
}
|
||||||
|
return chargeTimeTypeEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnumOptionData getChargeAmountTypeEnum(final String chargeAmountType) {
|
||||||
|
EnumOptionData chargeAmountTypeEnum = null;
|
||||||
|
if (chargeAmountType != null) {
|
||||||
|
String chargeAmountTypeId = "";
|
||||||
|
if (chargeAmountType.equalsIgnoreCase("Flat")) {
|
||||||
|
chargeAmountTypeId = "1";
|
||||||
|
} else if (chargeAmountType.equalsIgnoreCase("% Amount")) {
|
||||||
|
chargeAmountTypeId = "2";
|
||||||
|
} else {
|
||||||
|
chargeAmountTypeId = chargeAmountType;
|
||||||
|
}
|
||||||
|
chargeAmountTypeEnum = new EnumOptionData(null, null, chargeAmountTypeId);
|
||||||
|
}
|
||||||
|
return chargeAmountTypeEnum;
|
||||||
|
}
|
||||||
|
|
||||||
public static String getCodeByName(Sheet sheet, String name) {
|
public static String getCodeByName(Sheet sheet, String name) {
|
||||||
String sheetName = sheet.getSheetName();
|
String sheetName = sheet.getSheetName();
|
||||||
if (sheetName.equals(TemplatePopulateImportConstants.EXTRAS_SHEET_NAME)) {
|
if (sheetName.equals(TemplatePopulateImportConstants.EXTRAS_SHEET_NAME)) {
|
||||||
|
|||||||
+56
-19
@@ -45,6 +45,7 @@ import org.apache.fineract.portfolio.loanaccount.data.LoanApprovalData;
|
|||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanCollateralManagementData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanCollateralManagementData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
||||||
|
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
|
||||||
import org.apache.fineract.portfolio.loanaccount.exception.InvalidAmountOfCollateralQuantity;
|
import org.apache.fineract.portfolio.loanaccount.exception.InvalidAmountOfCollateralQuantity;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||||
@@ -174,19 +175,21 @@ public class LoanImportHandler implements ImportHandler {
|
|||||||
repaidEveryFrequencyId = "1";
|
repaidEveryFrequencyId = "1";
|
||||||
} else if (repaidEveryFrequency.equalsIgnoreCase("Months")) {
|
} else if (repaidEveryFrequency.equalsIgnoreCase("Months")) {
|
||||||
repaidEveryFrequencyId = "2";
|
repaidEveryFrequencyId = "2";
|
||||||
|
} else if (repaidEveryFrequency.equalsIgnoreCase("Semi Month")) {
|
||||||
|
repaidEveryFrequencyId = "5";
|
||||||
}
|
}
|
||||||
repaidEveryFrequencyEnums = new EnumOptionData(null, null, repaidEveryFrequencyId);
|
repaidEveryFrequencyEnums = new EnumOptionData(null, null, repaidEveryFrequencyId);
|
||||||
}
|
}
|
||||||
Integer loanTerm = ImportHandlerUtils.readAsInt(LoanConstants.LOAN_TERM_COL, row);
|
Integer loanTerm = ImportHandlerUtils.readAsInt(LoanConstants.LOAN_TERM_COL, row);
|
||||||
String loanTermFrequency = ImportHandlerUtils.readAsString(LoanConstants.LOAN_TERM_FREQUENCY_COL, row);
|
String loanTermFrequencyType = ImportHandlerUtils.readAsString(LoanConstants.LOAN_TERM_FREQUENCY_COL, row);
|
||||||
EnumOptionData loanTermFrequencyEnum = null;
|
EnumOptionData loanTermFrequencyEnum = null;
|
||||||
if (loanTermFrequency != null) {
|
if (loanTermFrequencyType != null) {
|
||||||
String loanTermFrequencyId = "";
|
String loanTermFrequencyId = "";
|
||||||
if (loanTermFrequency.equalsIgnoreCase("Days")) {
|
if (loanTermFrequencyType.equalsIgnoreCase("Days")) {
|
||||||
loanTermFrequencyId = "0";
|
loanTermFrequencyId = "0";
|
||||||
} else if (loanTermFrequency.equalsIgnoreCase("Weeks")) {
|
} else if (loanTermFrequencyType.equalsIgnoreCase("Weeks")) {
|
||||||
loanTermFrequencyId = "1";
|
loanTermFrequencyId = "1";
|
||||||
} else if (loanTermFrequency.equalsIgnoreCase("Months")) {
|
} else if (loanTermFrequencyType.equalsIgnoreCase("Months")) {
|
||||||
loanTermFrequencyId = "2";
|
loanTermFrequencyId = "2";
|
||||||
}
|
}
|
||||||
loanTermFrequencyEnum = new EnumOptionData(null, null, loanTermFrequencyId);
|
loanTermFrequencyEnum = new EnumOptionData(null, null, loanTermFrequencyId);
|
||||||
@@ -269,8 +272,19 @@ public class LoanImportHandler implements ImportHandler {
|
|||||||
|
|
||||||
List<LoanChargeData> charges = new ArrayList<>();
|
List<LoanChargeData> charges = new ArrayList<>();
|
||||||
|
|
||||||
Long charge1 = ImportHandlerUtils.readAsLong(LoanConstants.CHARGE_ID_1, row);
|
String chargeOneName = ImportHandlerUtils.readAsString(LoanConstants.CHARGE_NAME_1, row);
|
||||||
Long charge2 = ImportHandlerUtils.readAsLong(LoanConstants.CHARGE_ID_2, row);
|
String chargeTwoName = ImportHandlerUtils.readAsString(LoanConstants.CHARGE_NAME_2, row);
|
||||||
|
|
||||||
|
Long chargeOneId = null;
|
||||||
|
if (chargeOneName != null) {
|
||||||
|
chargeOneId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.CHARGE_SHEET_NAME),
|
||||||
|
chargeOneName);
|
||||||
|
}
|
||||||
|
Long chargeTwoId = null;
|
||||||
|
if (chargeTwoName != null) {
|
||||||
|
chargeTwoId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.CHARGE_SHEET_NAME),
|
||||||
|
chargeTwoName);
|
||||||
|
}
|
||||||
|
|
||||||
Long collateralId = ImportHandlerUtils.readAsLong(LoanConstants.LOAN_COLLATERAL_ID, row);
|
Long collateralId = ImportHandlerUtils.readAsLong(LoanConstants.LOAN_COLLATERAL_ID, row);
|
||||||
|
|
||||||
@@ -278,25 +292,47 @@ public class LoanImportHandler implements ImportHandler {
|
|||||||
|
|
||||||
String linkAccountId = ImportHandlerUtils.readAsString(LoanConstants.LINK_ACCOUNT_ID, row);
|
String linkAccountId = ImportHandlerUtils.readAsString(LoanConstants.LINK_ACCOUNT_ID, row);
|
||||||
|
|
||||||
if (charge1 != null) {
|
if (chargeOneId != null) {
|
||||||
if (ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_1, row) != null) {
|
if (ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_1, row) != null) {
|
||||||
charges.add(new LoanChargeData(ImportHandlerUtils.readAsLong(LoanConstants.CHARGE_ID_1, row),
|
EnumOptionData chargeOneTimeTypeEnum = ImportHandlerUtils
|
||||||
ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_1, row),
|
.getChargeTimeTypeEmun(workbook.getSheet(TemplatePopulateImportConstants.CHARGE_SHEET_NAME), chargeOneName);
|
||||||
BigDecimal.valueOf(ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_1, row))));
|
EnumOptionData chargeOneAmountTypeEnum = ImportHandlerUtils
|
||||||
|
.getChargeAmountTypeEnum(ImportHandlerUtils.readAsString(LoanConstants.CHARGE_AMOUNT_TYPE_1, row));
|
||||||
|
|
||||||
|
BigDecimal chargeAmount;
|
||||||
|
BigDecimal amountOrPercentage = BigDecimal.valueOf(ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_1, row));
|
||||||
|
if (chargeOneAmountTypeEnum.getValue().equalsIgnoreCase("1")) {
|
||||||
|
chargeAmount = amountOrPercentage;
|
||||||
|
} else {
|
||||||
|
chargeAmount = LoanCharge.percentageOf(principal, amountOrPercentage);
|
||||||
|
}
|
||||||
|
|
||||||
|
charges.add(new LoanChargeData(chargeOneId, ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_1, row),
|
||||||
|
chargeAmount, chargeOneAmountTypeEnum, chargeOneTimeTypeEnum));
|
||||||
} else {
|
} else {
|
||||||
charges.add(new LoanChargeData(ImportHandlerUtils.readAsLong(LoanConstants.CHARGE_ID_1, row),
|
charges.add(new LoanChargeData(chargeOneId, ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_1, row), null));
|
||||||
ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_1, row), null));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (charge2 != null) {
|
if (chargeTwoId != null) {
|
||||||
if (ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_2, row) != null) {
|
if (ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_2, row) != null) {
|
||||||
charges.add(new LoanChargeData(ImportHandlerUtils.readAsLong(LoanConstants.CHARGE_ID_2, row),
|
EnumOptionData chargeTwoTimeTypeEnum = ImportHandlerUtils
|
||||||
ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_2, row),
|
.getChargeTimeTypeEmun(workbook.getSheet(TemplatePopulateImportConstants.CHARGE_SHEET_NAME), chargeTwoName);
|
||||||
BigDecimal.valueOf(ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_2, row))));
|
EnumOptionData chargeTwoAmountTypeEnum = ImportHandlerUtils
|
||||||
|
.getChargeAmountTypeEnum(ImportHandlerUtils.readAsString(LoanConstants.CHARGE_AMOUNT_TYPE_2, row));
|
||||||
|
|
||||||
|
BigDecimal chargeAmount;
|
||||||
|
BigDecimal amountOrPercentage = BigDecimal.valueOf(ImportHandlerUtils.readAsDouble(LoanConstants.CHARGE_AMOUNT_2, row));
|
||||||
|
if (chargeTwoTimeTypeEnum.getValue().equalsIgnoreCase("1")) {
|
||||||
|
chargeAmount = amountOrPercentage;
|
||||||
|
} else {
|
||||||
|
chargeAmount = LoanCharge.percentageOf(principal, amountOrPercentage);
|
||||||
|
}
|
||||||
|
|
||||||
|
charges.add(new LoanChargeData(chargeTwoId, ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_2, row),
|
||||||
|
chargeAmount, chargeTwoAmountTypeEnum, chargeTwoTimeTypeEnum));
|
||||||
} else {
|
} else {
|
||||||
charges.add(new LoanChargeData(ImportHandlerUtils.readAsLong(LoanConstants.CHARGE_ID_2, row),
|
charges.add(new LoanChargeData(chargeTwoId, ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_2, row), null));
|
||||||
ImportHandlerUtils.readAsDate(LoanConstants.CHARGE_DUE_DATE_2, row), null));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,6 +349,7 @@ public class LoanImportHandler implements ImportHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
statuses.add(status);
|
statuses.add(status);
|
||||||
|
|
||||||
if (loanType != null) {
|
if (loanType != null) {
|
||||||
if (loanType.equals("individual")) {
|
if (loanType.equals("individual")) {
|
||||||
Long clientId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.CLIENT_SHEET_NAME),
|
Long clientId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.CLIENT_SHEET_NAME),
|
||||||
|
|||||||
+86
@@ -0,0 +1,86 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.infrastructure.bulkimport.populator;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.fineract.infrastructure.bulkimport.constants.ChargeConstants;
|
||||||
|
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
||||||
|
import org.apache.fineract.portfolio.charge.data.ChargeData;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
|
||||||
|
public class ChargeSheetPopulator extends AbstractWorkbookPopulator {
|
||||||
|
|
||||||
|
private List<ChargeData> charges;
|
||||||
|
|
||||||
|
private static final int ID_COL = 0;
|
||||||
|
|
||||||
|
public ChargeSheetPopulator(final List<ChargeData> charges) {
|
||||||
|
this.charges = charges;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void populate(final Workbook workbook, String dateFormat) {
|
||||||
|
int rowIndex = 1;
|
||||||
|
Sheet chargeSheet = workbook.createSheet(TemplatePopulateImportConstants.CHARGE_SHEET_NAME);
|
||||||
|
setLayout(chargeSheet);
|
||||||
|
|
||||||
|
populateCharges(chargeSheet, rowIndex);
|
||||||
|
chargeSheet.protectSheet("");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void populateCharges(Sheet chargeSheet, int rowIndex) {
|
||||||
|
for (ChargeData charge : charges) {
|
||||||
|
Row row = chargeSheet.createRow(rowIndex);
|
||||||
|
writeLong(ID_COL, row, charge.getId());
|
||||||
|
writeString(ChargeConstants.CHARGE_NAME_COL, row, charge.getName().trim().replaceAll("[ )(]", "_"));
|
||||||
|
writeBigDecimal(ChargeConstants.CHARGE_AMOUNT_COL, row, charge.getAmount());
|
||||||
|
writeString(ChargeConstants.CHARGE_CALCULATION_TYPE_COL, row, charge.getChargeCalculationType().getValue());
|
||||||
|
writeString(ChargeConstants.CHARGE_TIME_TYPE_COL, row, charge.getChargeTimeType().getValue());
|
||||||
|
rowIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setLayout(Sheet worksheet) {
|
||||||
|
worksheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_AMOUNT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_CALCULATION_TYPE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_TIME_TYPE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
|
||||||
|
Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX);
|
||||||
|
rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT);
|
||||||
|
|
||||||
|
writeString(ID_COL, rowHeader, "ID");
|
||||||
|
writeString(ChargeConstants.CHARGE_NAME_COL, rowHeader, "Name");
|
||||||
|
writeString(ChargeConstants.CHARGE_AMOUNT_COL, rowHeader, "Charge Amount");
|
||||||
|
writeString(ChargeConstants.CHARGE_CALCULATION_TYPE_COL, rowHeader, "Charge Calculation Type");
|
||||||
|
writeString(ChargeConstants.CHARGE_TIME_TYPE_COL, rowHeader, "Charge Time Type");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getChargesSize() {
|
||||||
|
return charges.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ChargeData> getCharges() {
|
||||||
|
return charges;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+6
-1
@@ -86,7 +86,12 @@ public class LoanProductSheetPopulator extends AbstractWorkbookPopulator {
|
|||||||
} else {
|
} else {
|
||||||
writeInt(MAX_PRINCIPAL_COL, row, 999999999);
|
writeInt(MAX_PRINCIPAL_COL, row, 999999999);
|
||||||
}
|
}
|
||||||
writeInt(NO_OF_REPAYMENTS_COL, row, product.getNumberOfRepayments());
|
int numberOfRepayments = product.getNumberOfRepayments();
|
||||||
|
if (product.getRepaymentFrequencyType().getValue().equalsIgnoreCase("Semi Month")) {
|
||||||
|
numberOfRepayments = numberOfRepayments * product.getRepaymentEvery();
|
||||||
|
}
|
||||||
|
|
||||||
|
writeInt(NO_OF_REPAYMENTS_COL, row, numberOfRepayments);
|
||||||
if (product.getMinNumberOfRepayments() != null) {
|
if (product.getMinNumberOfRepayments() != null) {
|
||||||
writeInt(MIN_REPAYMENTS_COL, row, product.getMinNumberOfRepayments());
|
writeInt(MIN_REPAYMENTS_COL, row, product.getMinNumberOfRepayments());
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+74
@@ -0,0 +1,74 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.infrastructure.bulkimport.populator.charge;
|
||||||
|
|
||||||
|
import org.apache.fineract.infrastructure.bulkimport.constants.ChargeConstants;
|
||||||
|
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
||||||
|
import org.apache.fineract.infrastructure.bulkimport.populator.AbstractWorkbookPopulator;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
|
||||||
|
public class ChargeWorkbookPopulator extends AbstractWorkbookPopulator {
|
||||||
|
|
||||||
|
public ChargeWorkbookPopulator() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void populate(Workbook workbook, String dateFormat) {
|
||||||
|
Sheet chargeSheet = workbook.createSheet(TemplatePopulateImportConstants.CHARGE_SHEET_NAME);
|
||||||
|
setLayout(chargeSheet);
|
||||||
|
// setRules(chargeSheet, dateFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setLayout(final Sheet worksheet) {
|
||||||
|
Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX);
|
||||||
|
worksheet.setColumnWidth(0, TemplatePopulateImportConstants.SMALL_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_AMOUNT_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_CALCULATION_TYPE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
// worksheet.setColumnWidth(ChargeConstants.CHARGE_DUE_DATE_COL,
|
||||||
|
// TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(ChargeConstants.CHARGE_TIME_TYPE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
|
||||||
|
writeString(0, rowHeader, "ID");
|
||||||
|
writeString(ChargeConstants.CHARGE_NAME_COL, rowHeader, "Charge Name*");
|
||||||
|
writeString(ChargeConstants.CHARGE_AMOUNT_COL, rowHeader, "Charge Amount*");
|
||||||
|
writeString(ChargeConstants.CHARGE_CALCULATION_TYPE_COL, rowHeader, "Charge Calculation Type*");
|
||||||
|
// writeString(ChargeConstants.CHARGE_DUE_DATE_COL, rowHeader, "Charge Due Date*");
|
||||||
|
writeString(ChargeConstants.CHARGE_TIME_TYPE_COL, rowHeader, "Charge Time Type*");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private void setRules(Sheet workSheet, final String dateFormat) {
|
||||||
|
// CellRangeAddressList dueDateRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
|
||||||
|
// ChargeConstants.CHARGE_DUE_DATE_COL, ChargeConstants.CHARGE_DUE_DATE_COL);
|
||||||
|
|
||||||
|
// DataValidationHelper validationHelper = new HSSFDataValidationHelper((HSSFSheet) workSheet);
|
||||||
|
|
||||||
|
// DataValidationConstraint dueDateConstraint = validationHelper
|
||||||
|
// .createDateConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "=TODAY()", null, dateFormat);
|
||||||
|
|
||||||
|
// DataValidation dueDateValidation = validationHelper.createValidation(dueDateConstraint, dueDateRange);
|
||||||
|
|
||||||
|
// workSheet.addValidationData(dueDateValidation);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+90
-16
@@ -22,12 +22,14 @@ import java.util.List;
|
|||||||
import org.apache.fineract.infrastructure.bulkimport.constants.LoanConstants;
|
import org.apache.fineract.infrastructure.bulkimport.constants.LoanConstants;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.AbstractWorkbookPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.AbstractWorkbookPopulator;
|
||||||
|
import org.apache.fineract.infrastructure.bulkimport.populator.ChargeSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.ClientSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.ClientSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.ExtrasSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.ExtrasSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.GroupSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.GroupSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.LoanProductSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.LoanProductSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.OfficeSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.OfficeSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.PersonnelSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.PersonnelSheetPopulator;
|
||||||
|
import org.apache.fineract.portfolio.charge.data.ChargeData;
|
||||||
import org.apache.fineract.portfolio.loanproduct.data.LoanProductData;
|
import org.apache.fineract.portfolio.loanproduct.data.LoanProductData;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFDataValidationHelper;
|
import org.apache.poi.hssf.usermodel.HSSFDataValidationHelper;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||||
@@ -46,22 +48,25 @@ import org.apache.poi.ss.util.CellRangeAddressList;
|
|||||||
|
|
||||||
public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
||||||
|
|
||||||
private final OfficeSheetPopulator officeSheetPopulator;
|
private OfficeSheetPopulator officeSheetPopulator;
|
||||||
private final ClientSheetPopulator clientSheetPopulator;
|
private ClientSheetPopulator clientSheetPopulator;
|
||||||
private final GroupSheetPopulator groupSheetPopulator;
|
private GroupSheetPopulator groupSheetPopulator;
|
||||||
private final PersonnelSheetPopulator personnelSheetPopulator;
|
private PersonnelSheetPopulator personnelSheetPopulator;
|
||||||
private final LoanProductSheetPopulator productSheetPopulator;
|
private LoanProductSheetPopulator productSheetPopulator;
|
||||||
private final ExtrasSheetPopulator extrasSheetPopulator;
|
private ChargeSheetPopulator chargeSheetPopulator;
|
||||||
|
private ExtrasSheetPopulator extrasSheetPopulator;
|
||||||
|
|
||||||
public LoanWorkbookPopulator(OfficeSheetPopulator officeSheetPopulator, ClientSheetPopulator clientSheetPopulator,
|
public LoanWorkbookPopulator(OfficeSheetPopulator officeSheetPopulator, ClientSheetPopulator clientSheetPopulator,
|
||||||
GroupSheetPopulator groupSheetPopulator, PersonnelSheetPopulator personnelSheetPopulator,
|
GroupSheetPopulator groupSheetPopulator, PersonnelSheetPopulator personnelSheetPopulator,
|
||||||
LoanProductSheetPopulator productSheetPopulator, ExtrasSheetPopulator extrasSheetPopulator) {
|
LoanProductSheetPopulator productSheetPopulator, ChargeSheetPopulator chargeSheetPopulator,
|
||||||
|
ExtrasSheetPopulator extrasSheetPopulator) {
|
||||||
this.officeSheetPopulator = officeSheetPopulator;
|
this.officeSheetPopulator = officeSheetPopulator;
|
||||||
this.clientSheetPopulator = clientSheetPopulator;
|
this.clientSheetPopulator = clientSheetPopulator;
|
||||||
this.groupSheetPopulator = groupSheetPopulator;
|
this.groupSheetPopulator = groupSheetPopulator;
|
||||||
this.personnelSheetPopulator = personnelSheetPopulator;
|
this.personnelSheetPopulator = personnelSheetPopulator;
|
||||||
this.productSheetPopulator = productSheetPopulator;
|
this.productSheetPopulator = productSheetPopulator;
|
||||||
this.extrasSheetPopulator = extrasSheetPopulator;
|
this.extrasSheetPopulator = extrasSheetPopulator;
|
||||||
|
this.chargeSheetPopulator = chargeSheetPopulator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -72,6 +77,7 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
groupSheetPopulator.populate(workbook, dateFormat);
|
groupSheetPopulator.populate(workbook, dateFormat);
|
||||||
personnelSheetPopulator.populate(workbook, dateFormat);
|
personnelSheetPopulator.populate(workbook, dateFormat);
|
||||||
productSheetPopulator.populate(workbook, dateFormat);
|
productSheetPopulator.populate(workbook, dateFormat);
|
||||||
|
chargeSheetPopulator.populate(workbook, dateFormat);
|
||||||
extrasSheetPopulator.populate(workbook, dateFormat);
|
extrasSheetPopulator.populate(workbook, dateFormat);
|
||||||
setLayout(loanSheet);
|
setLayout(loanSheet);
|
||||||
setRules(loanSheet, dateFormat);
|
setRules(loanSheet, dateFormat);
|
||||||
@@ -138,6 +144,16 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
LoanConstants.LAST_REPAYMENT_DATE_COL, LoanConstants.LAST_REPAYMENT_DATE_COL);
|
LoanConstants.LAST_REPAYMENT_DATE_COL, LoanConstants.LAST_REPAYMENT_DATE_COL);
|
||||||
DataValidationHelper validationHelper = new HSSFDataValidationHelper((HSSFSheet) worksheet);
|
DataValidationHelper validationHelper = new HSSFDataValidationHelper((HSSFSheet) worksheet);
|
||||||
|
|
||||||
|
CellRangeAddressList chargeOneNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
|
||||||
|
LoanConstants.CHARGE_NAME_1, LoanConstants.CHARGE_NAME_1);
|
||||||
|
CellRangeAddressList chargeOneAmountTypeRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
|
||||||
|
LoanConstants.CHARGE_AMOUNT_TYPE_1, LoanConstants.CHARGE_AMOUNT_TYPE_1);
|
||||||
|
|
||||||
|
CellRangeAddressList chargeTwoNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
|
||||||
|
LoanConstants.CHARGE_NAME_2, LoanConstants.CHARGE_NAME_2);
|
||||||
|
CellRangeAddressList chargeTwoAmountTypeRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
|
||||||
|
LoanConstants.CHARGE_AMOUNT_TYPE_2, LoanConstants.CHARGE_AMOUNT_TYPE_2);
|
||||||
|
|
||||||
setNames(worksheet);
|
setNames(worksheet);
|
||||||
|
|
||||||
DataValidationConstraint officeNameConstraint = validationHelper.createFormulaListConstraint("Office");
|
DataValidationConstraint officeNameConstraint = validationHelper.createFormulaListConstraint("Office");
|
||||||
@@ -168,9 +184,11 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
DataValidationConstraint.OperatorType.BETWEEN, "=INDIRECT(CONCATENATE(\"MIN_REPAYMENT_\",$E1))",
|
DataValidationConstraint.OperatorType.BETWEEN, "=INDIRECT(CONCATENATE(\"MIN_REPAYMENT_\",$E1))",
|
||||||
"=INDIRECT(CONCATENATE(\"MAX_REPAYMENT_\",$E1))");
|
"=INDIRECT(CONCATENATE(\"MAX_REPAYMENT_\",$E1))");
|
||||||
DataValidationConstraint frequencyConstraint = validationHelper
|
DataValidationConstraint frequencyConstraint = validationHelper
|
||||||
|
.createExplicitListConstraint(new String[] { "Days", "Weeks", "Months", "Semi Month" });
|
||||||
|
DataValidationConstraint loanTermFrequencyConstraint = validationHelper
|
||||||
.createExplicitListConstraint(new String[] { "Days", "Weeks", "Months" });
|
.createExplicitListConstraint(new String[] { "Days", "Weeks", "Months" });
|
||||||
DataValidationConstraint loanTermConstraint = validationHelper
|
DataValidationConstraint loanTermConstraint = validationHelper
|
||||||
.createIntegerConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "=$M1*$N1", null);
|
.createIntegerConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "=$M1/$N1", "=$M1*$N1");
|
||||||
DataValidationConstraint interestFrequencyConstraint = validationHelper
|
DataValidationConstraint interestFrequencyConstraint = validationHelper
|
||||||
.createFormulaListConstraint("INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E1))");
|
.createFormulaListConstraint("INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E1))");
|
||||||
DataValidationConstraint interestConstraint = validationHelper.createDecimalConstraint(
|
DataValidationConstraint interestConstraint = validationHelper.createDecimalConstraint(
|
||||||
@@ -196,6 +214,14 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
DataValidationConstraint lastRepaymentDateConstraint = validationHelper
|
DataValidationConstraint lastRepaymentDateConstraint = validationHelper
|
||||||
.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=$I1", "=TODAY()", dateFormat);
|
.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=$I1", "=TODAY()", dateFormat);
|
||||||
|
|
||||||
|
DataValidationConstraint chargeOneNameConstraint = validationHelper.createFormulaListConstraint("Charges");
|
||||||
|
DataValidationConstraint chargeOneAmountTypeConstraint = validationHelper
|
||||||
|
.createExplicitListConstraint(new String[] { "Flat", "% Amount" });
|
||||||
|
|
||||||
|
DataValidationConstraint chargeTwoNameConstraint = validationHelper.createFormulaListConstraint("Charges");
|
||||||
|
DataValidationConstraint chargeTwoAmountTypeConstraint = validationHelper
|
||||||
|
.createExplicitListConstraint(new String[] { "Flat", "% Amount" });
|
||||||
|
|
||||||
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
|
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
|
||||||
DataValidation loanTypeValidation = validationHelper.createValidation(loanTypeConstraint, loanTypeRange);
|
DataValidation loanTypeValidation = validationHelper.createValidation(loanTypeConstraint, loanTypeRange);
|
||||||
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
|
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
|
||||||
@@ -203,7 +229,7 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
DataValidation loanOfficerValidation = validationHelper.createValidation(loanOfficerNameConstraint, loanOfficerRange);
|
DataValidation loanOfficerValidation = validationHelper.createValidation(loanOfficerNameConstraint, loanOfficerRange);
|
||||||
DataValidation fundNameValidation = validationHelper.createValidation(fundNameConstraint, fundNameRange);
|
DataValidation fundNameValidation = validationHelper.createValidation(fundNameConstraint, fundNameRange);
|
||||||
DataValidation repaidFrequencyValidation = validationHelper.createValidation(frequencyConstraint, repaidFrequencyRange);
|
DataValidation repaidFrequencyValidation = validationHelper.createValidation(frequencyConstraint, repaidFrequencyRange);
|
||||||
DataValidation loanTermFrequencyValidation = validationHelper.createValidation(frequencyConstraint, loanTermFrequencyRange);
|
DataValidation loanTermFrequencyValidation = validationHelper.createValidation(loanTermFrequencyConstraint, loanTermFrequencyRange);
|
||||||
DataValidation amortizationValidation = validationHelper.createValidation(amortizationConstraint, amortizationRange);
|
DataValidation amortizationValidation = validationHelper.createValidation(amortizationConstraint, amortizationRange);
|
||||||
DataValidation interestMethodValidation = validationHelper.createValidation(interestMethodConstraint, interestMethodRange);
|
DataValidation interestMethodValidation = validationHelper.createValidation(interestMethodConstraint, interestMethodRange);
|
||||||
DataValidation interestCalculationPeriodValidation = validationHelper.createValidation(interestCalculationPeriodConstraint,
|
DataValidation interestCalculationPeriodValidation = validationHelper.createValidation(interestCalculationPeriodConstraint,
|
||||||
@@ -228,6 +254,14 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
graceOnInterestChargedRange);
|
graceOnInterestChargedRange);
|
||||||
DataValidation interestFrequencyValidation = validationHelper.createValidation(interestFrequencyConstraint, interestFrequencyRange);
|
DataValidation interestFrequencyValidation = validationHelper.createValidation(interestFrequencyConstraint, interestFrequencyRange);
|
||||||
|
|
||||||
|
DataValidation chargeOneNameValidation = validationHelper.createValidation(chargeOneNameConstraint, chargeOneNameRange);
|
||||||
|
DataValidation chargeOneAmountTypeValidation = validationHelper.createValidation(chargeOneAmountTypeConstraint,
|
||||||
|
chargeOneAmountTypeRange);
|
||||||
|
|
||||||
|
DataValidation chargeTwoNameValidation = validationHelper.createValidation(chargeTwoNameConstraint, chargeTwoNameRange);
|
||||||
|
DataValidation chargeTwoAmountTypeValidation = validationHelper.createValidation(chargeTwoAmountTypeConstraint,
|
||||||
|
chargeTwoAmountTypeRange);
|
||||||
|
|
||||||
interestFrequencyValidation.setSuppressDropDownArrow(true);
|
interestFrequencyValidation.setSuppressDropDownArrow(true);
|
||||||
|
|
||||||
worksheet.addValidationData(officeValidation);
|
worksheet.addValidationData(officeValidation);
|
||||||
@@ -258,6 +292,14 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
worksheet.addValidationData(lastRepaymentDateValidation);
|
worksheet.addValidationData(lastRepaymentDateValidation);
|
||||||
worksheet.addValidationData(repaymentTypeValidation);
|
worksheet.addValidationData(repaymentTypeValidation);
|
||||||
|
|
||||||
|
worksheet.addValidationData(chargeOneNameValidation);
|
||||||
|
// worksheet.addValidationData(chargeOneAmountValidation);
|
||||||
|
worksheet.addValidationData(chargeOneAmountTypeValidation);
|
||||||
|
|
||||||
|
worksheet.addValidationData(chargeTwoNameValidation);
|
||||||
|
// worksheet.addValidationData(chargeTwoAmountValidation);
|
||||||
|
worksheet.addValidationData(chargeTwoAmountTypeValidation);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLayout(Sheet worksheet) {
|
private void setLayout(Sheet worksheet) {
|
||||||
@@ -299,11 +341,13 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
worksheet.setColumnWidth(LoanConstants.LOOKUP_CLIENT_EXTERNAL_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.LOOKUP_CLIENT_EXTERNAL_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.LOOKUP_ACTIVATION_DATE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.LOOKUP_ACTIVATION_DATE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.EXTERNAL_ID_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.EXTERNAL_ID_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.CHARGE_ID_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.CHARGE_NAME_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.CHARGE_AMOUNT_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.CHARGE_AMOUNT_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(LoanConstants.CHARGE_AMOUNT_TYPE_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.CHARGE_DUE_DATE_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.CHARGE_DUE_DATE_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.CHARGE_ID_2, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.CHARGE_NAME_2, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.CHARGE_AMOUNT_2, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.CHARGE_AMOUNT_2, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
|
worksheet.setColumnWidth(LoanConstants.CHARGE_AMOUNT_TYPE_2, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.CHARGE_DUE_DATE_2, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.CHARGE_DUE_DATE_2, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.GROUP_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.GROUP_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
worksheet.setColumnWidth(LoanConstants.LINK_ACCOUNT_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
worksheet.setColumnWidth(LoanConstants.LINK_ACCOUNT_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
|
||||||
@@ -341,11 +385,13 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
writeString(LoanConstants.LOOKUP_CLIENT_EXTERNAL_ID, rowHeader, "Lookup Client ExternalID");
|
writeString(LoanConstants.LOOKUP_CLIENT_EXTERNAL_ID, rowHeader, "Lookup Client ExternalID");
|
||||||
writeString(LoanConstants.LOOKUP_ACTIVATION_DATE_COL, rowHeader, "Client Activation Date");
|
writeString(LoanConstants.LOOKUP_ACTIVATION_DATE_COL, rowHeader, "Client Activation Date");
|
||||||
writeString(LoanConstants.EXTERNAL_ID_COL, rowHeader, "External Id");
|
writeString(LoanConstants.EXTERNAL_ID_COL, rowHeader, "External Id");
|
||||||
writeString(LoanConstants.CHARGE_ID_1, rowHeader, "Charge Id");
|
writeString(LoanConstants.CHARGE_NAME_1, rowHeader, "Charge Name*");
|
||||||
writeString(LoanConstants.CHARGE_AMOUNT_1, rowHeader, "Charged Amount");
|
writeString(LoanConstants.CHARGE_AMOUNT_1, rowHeader, "Charged Amount");
|
||||||
|
writeString(LoanConstants.CHARGE_AMOUNT_TYPE_1, rowHeader, "Charged Amount Type");
|
||||||
writeString(LoanConstants.CHARGE_DUE_DATE_1, rowHeader, "Charged On Date");
|
writeString(LoanConstants.CHARGE_DUE_DATE_1, rowHeader, "Charged On Date");
|
||||||
writeString(LoanConstants.CHARGE_ID_2, rowHeader, "Charge Id");
|
writeString(LoanConstants.CHARGE_NAME_2, rowHeader, "Charge Name*");
|
||||||
writeString(LoanConstants.CHARGE_AMOUNT_2, rowHeader, "Charged Amount");
|
writeString(LoanConstants.CHARGE_AMOUNT_2, rowHeader, "Charged Amount");
|
||||||
|
writeString(LoanConstants.CHARGE_AMOUNT_TYPE_2, rowHeader, "Charged Amount Type");
|
||||||
writeString(LoanConstants.CHARGE_DUE_DATE_2, rowHeader, "Charged On Date");
|
writeString(LoanConstants.CHARGE_DUE_DATE_2, rowHeader, "Charged On Date");
|
||||||
writeString(LoanConstants.GROUP_ID, rowHeader, "GROUP ID");
|
writeString(LoanConstants.GROUP_ID, rowHeader, "GROUP ID");
|
||||||
writeString(LoanConstants.LINK_ACCOUNT_ID, rowHeader, "Linked Account No.");
|
writeString(LoanConstants.LINK_ACCOUNT_ID, rowHeader, "Linked Account No.");
|
||||||
@@ -385,8 +431,11 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
writeFormula(LoanConstants.NO_OF_REPAYMENTS_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"NO_REPAYMENT_\",$E" + (rowNo + 1)
|
writeFormula(LoanConstants.NO_OF_REPAYMENTS_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"NO_REPAYMENT_\",$E" + (rowNo + 1)
|
||||||
+ "))),\"\",INDIRECT(CONCATENATE(\"NO_REPAYMENT_\",$E" + (rowNo + 1) + ")))");
|
+ "))),\"\",INDIRECT(CONCATENATE(\"NO_REPAYMENT_\",$E" + (rowNo + 1) + ")))");
|
||||||
writeFormula(LoanConstants.LOAN_TERM_COL, row,
|
writeFormula(LoanConstants.LOAN_TERM_COL, row,
|
||||||
"IF(ISERROR($M" + (rowNo + 1) + "*$N" + (rowNo + 1) + "),\"\",$M" + (rowNo + 1) + "*$N" + (rowNo + 1) + ")");
|
"IF(($O" + (rowNo + 1) + "=\"Semi Month\"), " + "(IF(ISERROR($M" + (rowNo + 1) + "/$N" + (rowNo + 1) + "),\"\",$M"
|
||||||
writeFormula(LoanConstants.LOAN_TERM_FREQUENCY_COL, row, "$O" + (rowNo + 1));
|
+ (rowNo + 1) + "/$N" + (rowNo + 1) + ")), " + "(IF(ISERROR($M" + (rowNo + 1) + "*$N" + (rowNo + 1)
|
||||||
|
+ "),\"\",$M" + (rowNo + 1) + "*$N" + (rowNo + 1) + "))" + ")");
|
||||||
|
writeFormula(LoanConstants.LOAN_TERM_FREQUENCY_COL, row,
|
||||||
|
"IF(($O" + (rowNo + 1) + "=\"Semi Month\"), \"Months\", $O" + (rowNo + 1) + ")");
|
||||||
writeFormula(LoanConstants.NOMINAL_INTEREST_RATE_FREQUENCY_COL, row,
|
writeFormula(LoanConstants.NOMINAL_INTEREST_RATE_FREQUENCY_COL, row,
|
||||||
"IF(ISERROR(INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E" + (rowNo + 1)
|
"IF(ISERROR(INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E" + (rowNo + 1)
|
||||||
+ "))),\"\",INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E" + (rowNo + 1) + ")))");
|
+ "))),\"\",INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E" + (rowNo + 1) + ")))");
|
||||||
@@ -408,13 +457,13 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"GRACE_INTEREST_PAYMENT_\",$E" + (rowNo + 1) + ")))");
|
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"GRACE_INTEREST_PAYMENT_\",$E" + (rowNo + 1) + ")))");
|
||||||
writeFormula(LoanConstants.GRACE_ON_INTEREST_CHARGED_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"GRACE_INTEREST_CHARGED_\",$E"
|
writeFormula(LoanConstants.GRACE_ON_INTEREST_CHARGED_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"GRACE_INTEREST_CHARGED_\",$E"
|
||||||
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"GRACE_INTEREST_CHARGED_\",$E" + (rowNo + 1) + ")))");
|
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"GRACE_INTEREST_CHARGED_\",$E" + (rowNo + 1) + ")))");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setNames(Sheet worksheet) {
|
private void setNames(Sheet worksheet) {
|
||||||
Workbook loanWorkbook = worksheet.getWorkbook();
|
Workbook loanWorkbook = worksheet.getWorkbook();
|
||||||
List<String> officeNames = officeSheetPopulator.getOfficeNames();
|
List<String> officeNames = officeSheetPopulator.getOfficeNames();
|
||||||
|
List<ChargeData> charges = chargeSheetPopulator.getCharges();
|
||||||
List<LoanProductData> products = productSheetPopulator.getProducts();
|
List<LoanProductData> products = productSheetPopulator.getProducts();
|
||||||
|
|
||||||
// Office Names
|
// Office Names
|
||||||
@@ -460,6 +509,31 @@ public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
|
|||||||
fundGroup.setRefersToFormula(
|
fundGroup.setRefersToFormula(
|
||||||
TemplatePopulateImportConstants.EXTRAS_SHEET_NAME + "!$B$2:$B$" + (extrasSheetPopulator.getFundsSize() + 1));
|
TemplatePopulateImportConstants.EXTRAS_SHEET_NAME + "!$B$2:$B$" + (extrasSheetPopulator.getFundsSize() + 1));
|
||||||
|
|
||||||
|
// Charge Name
|
||||||
|
Name chargeGroup = loanWorkbook.createName();
|
||||||
|
chargeGroup.setNameName("Charges");
|
||||||
|
chargeGroup.setRefersToFormula(
|
||||||
|
TemplatePopulateImportConstants.CHARGE_SHEET_NAME + "!$B$2:$B$" + (chargeSheetPopulator.getChargesSize() + 1));
|
||||||
|
|
||||||
|
// Default Charge Name, Charge Amount, Charge Amount Type, Charge Due Date
|
||||||
|
for (Integer i = 0; i < charges.size(); i++) {
|
||||||
|
Name chargeColName = loanWorkbook.createName();
|
||||||
|
Name chargeAmount = loanWorkbook.createName();
|
||||||
|
Name chargeAmountType = loanWorkbook.createName();
|
||||||
|
|
||||||
|
String chargeName = charges.get(i).getName().trim().replaceAll("[ )(]", "_");
|
||||||
|
|
||||||
|
chargeColName.setNameName("CHARGE_NAME_" + chargeName);
|
||||||
|
chargeColName.setRefersToFormula(TemplatePopulateImportConstants.CHARGE_SHEET_NAME + "!$B$" + (i + 2));
|
||||||
|
|
||||||
|
chargeAmount.setNameName("CHARGE_AMOUNT_" + chargeName);
|
||||||
|
chargeAmount.setRefersToFormula(TemplatePopulateImportConstants.CHARGE_SHEET_NAME + "!$C$" + (i + 2));
|
||||||
|
|
||||||
|
chargeAmountType.setNameName("CHARGE_AMOUNT_TYPE_" + chargeName);
|
||||||
|
chargeAmountType.setRefersToFormula(TemplatePopulateImportConstants.CHARGE_SHEET_NAME + "!$D$" + (i + 2));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Payment Type Name
|
// Payment Type Name
|
||||||
Name paymentTypeGroup = loanWorkbook.createName();
|
Name paymentTypeGroup = loanWorkbook.createName();
|
||||||
paymentTypeGroup.setNameName("PaymentTypes");
|
paymentTypeGroup.setNameName("PaymentTypes");
|
||||||
|
|||||||
+9
-1
@@ -29,6 +29,7 @@ import org.apache.fineract.accounting.glaccount.service.GLAccountReadPlatformSer
|
|||||||
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.data.GlobalEntityType;
|
import org.apache.fineract.infrastructure.bulkimport.data.GlobalEntityType;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.CenterSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.CenterSheetPopulator;
|
||||||
|
import org.apache.fineract.infrastructure.bulkimport.populator.ChargeSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.ClientSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.ClientSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.ExtrasSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.ExtrasSheetPopulator;
|
||||||
import org.apache.fineract.infrastructure.bulkimport.populator.FixedDepositProductSheetPopulator;
|
import org.apache.fineract.infrastructure.bulkimport.populator.FixedDepositProductSheetPopulator;
|
||||||
@@ -277,6 +278,11 @@ public class BulkImportWorkbookPopulatorServiceImpl implements BulkImportWorkboo
|
|||||||
return offices;
|
return offices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private List<ChargeData> fetchCharges() {
|
||||||
|
return (List) this.chargeReadPlatformService.retrieveAllCharges();
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private List<StaffData> fetchStaff(final Long staffId) {
|
private List<StaffData> fetchStaff(final Long staffId) {
|
||||||
List<StaffData> staff = null;
|
List<StaffData> staff = null;
|
||||||
@@ -376,13 +382,15 @@ public class BulkImportWorkbookPopulatorServiceImpl implements BulkImportWorkboo
|
|||||||
List<StaffData> staff = fetchStaff(staffId);
|
List<StaffData> staff = fetchStaff(staffId);
|
||||||
List<ClientData> clients = fetchClients(officeId);
|
List<ClientData> clients = fetchClients(officeId);
|
||||||
List<GroupGeneralData> groups = fetchGroups(officeId);
|
List<GroupGeneralData> groups = fetchGroups(officeId);
|
||||||
|
List<ChargeData> charges = fetchCharges();
|
||||||
List<LoanProductData> loanproducts = fetchLoanProducts();
|
List<LoanProductData> loanproducts = fetchLoanProducts();
|
||||||
List<FundData> funds = fetchFunds();
|
List<FundData> funds = fetchFunds();
|
||||||
List<PaymentTypeData> paymentTypes = fetchPaymentTypes();
|
List<PaymentTypeData> paymentTypes = fetchPaymentTypes();
|
||||||
List<CurrencyData> currencies = fetchCurrencies();
|
List<CurrencyData> currencies = fetchCurrencies();
|
||||||
return new LoanWorkbookPopulator(new OfficeSheetPopulator(offices), new ClientSheetPopulator(clients, offices),
|
return new LoanWorkbookPopulator(new OfficeSheetPopulator(offices), new ClientSheetPopulator(clients, offices),
|
||||||
new GroupSheetPopulator(groups, offices), new PersonnelSheetPopulator(staff, offices),
|
new GroupSheetPopulator(groups, offices), new PersonnelSheetPopulator(staff, offices),
|
||||||
new LoanProductSheetPopulator(loanproducts), new ExtrasSheetPopulator(funds, paymentTypes, currencies));
|
new LoanProductSheetPopulator(loanproducts), new ChargeSheetPopulator(charges),
|
||||||
|
new ExtrasSheetPopulator(funds, paymentTypes, currencies));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<CurrencyData> fetchCurrencies() {
|
private List<CurrencyData> fetchCurrencies() {
|
||||||
|
|||||||
+12
@@ -321,6 +321,18 @@ public final class ChargeData implements Comparable<ChargeData>, Serializable {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EnumOptionData getChargeCalculationType() {
|
||||||
|
return chargeCalculationType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EnumOptionData getChargeTimeType() {
|
||||||
|
return chargeTimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getAmount() {
|
||||||
|
return this.amount;
|
||||||
|
}
|
||||||
|
|
||||||
public CurrencyData getCurrency() {
|
public CurrencyData getCurrency() {
|
||||||
return currency;
|
return currency;
|
||||||
}
|
}
|
||||||
|
|||||||
+35
@@ -308,6 +308,37 @@ public class LoanChargeData {
|
|||||||
this.amountUnrecognized = chargeData.amountUnrecognized;
|
this.amountUnrecognized = chargeData.amountUnrecognized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LoanChargeData(final Long id, final LocalDate dueAsOfDate, final BigDecimal amount, final EnumOptionData chargeCalculationType,
|
||||||
|
final EnumOptionData chargeTimeType) {
|
||||||
|
this.id = null;
|
||||||
|
this.chargeId = id;
|
||||||
|
this.name = null;
|
||||||
|
this.currency = null;
|
||||||
|
this.amount = amount;
|
||||||
|
this.amountPaid = null;
|
||||||
|
this.amountWaived = null;
|
||||||
|
this.amountWrittenOff = null;
|
||||||
|
this.amountOutstanding = null;
|
||||||
|
this.chargeTimeType = chargeTimeType;
|
||||||
|
this.dueDate = dueAsOfDate;
|
||||||
|
this.chargeCalculationType = chargeCalculationType;
|
||||||
|
this.percentage = null;
|
||||||
|
this.amountPercentageAppliedTo = null;
|
||||||
|
this.penalty = false;
|
||||||
|
this.chargePaymentMode = null;
|
||||||
|
this.paid = false;
|
||||||
|
this.waived = false;
|
||||||
|
this.amountOrPercentage = null;
|
||||||
|
this.chargeOptions = null;
|
||||||
|
this.chargePayable = false;
|
||||||
|
this.loanId = null;
|
||||||
|
this.minCap = null;
|
||||||
|
this.maxCap = null;
|
||||||
|
this.installmentChargeData = null;
|
||||||
|
this.amountAccrued = null;
|
||||||
|
this.amountUnrecognized = null;
|
||||||
|
}
|
||||||
|
|
||||||
public LoanChargeData(final Long id, final LocalDate dueAsOfDate, final BigDecimal amountOrPercentage) {
|
public LoanChargeData(final Long id, final LocalDate dueAsOfDate, final BigDecimal amountOrPercentage) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.chargeId = null;
|
this.chargeId = null;
|
||||||
@@ -370,6 +401,10 @@ public class LoanChargeData {
|
|||||||
return isInstalmentFee;
|
return isInstalmentFee;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EnumOptionData getChargeCalculationType() {
|
||||||
|
return chargeCalculationType;
|
||||||
|
}
|
||||||
|
|
||||||
public BigDecimal amountOrPercentage() {
|
public BigDecimal amountOrPercentage() {
|
||||||
return this.amountOrPercentage;
|
return this.amountOrPercentage;
|
||||||
}
|
}
|
||||||
|
|||||||
+14
@@ -47,6 +47,7 @@ import org.apache.fineract.integrationtests.common.OfficeDomain;
|
|||||||
import org.apache.fineract.integrationtests.common.OfficeHelper;
|
import org.apache.fineract.integrationtests.common.OfficeHelper;
|
||||||
import org.apache.fineract.integrationtests.common.PaymentTypeHelper;
|
import org.apache.fineract.integrationtests.common.PaymentTypeHelper;
|
||||||
import org.apache.fineract.integrationtests.common.Utils;
|
import org.apache.fineract.integrationtests.common.Utils;
|
||||||
|
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||||
import org.apache.fineract.integrationtests.common.funds.FundsHelper;
|
import org.apache.fineract.integrationtests.common.funds.FundsHelper;
|
||||||
import org.apache.fineract.integrationtests.common.funds.FundsResourceHandler;
|
import org.apache.fineract.integrationtests.common.funds.FundsResourceHandler;
|
||||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||||
@@ -66,6 +67,7 @@ public class LoanImportHandlerTest {
|
|||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(LoanImportHandlerTest.class);
|
private static final Logger LOG = LoggerFactory.getLogger(LoanImportHandlerTest.class);
|
||||||
private static final String CREATE_CLIENT_URL = "/fineract-provider/api/v1/clients?" + Utils.TENANT_IDENTIFIER;
|
private static final String CREATE_CLIENT_URL = "/fineract-provider/api/v1/clients?" + Utils.TENANT_IDENTIFIER;
|
||||||
|
private static final String CREATE_CHARGE_URL = "/fineract-provider/api/v1/charges?" + Utils.TENANT_IDENTIFIER;
|
||||||
public static final String DATE_FORMAT = "dd MMMM yyyy";
|
public static final String DATE_FORMAT = "dd MMMM yyyy";
|
||||||
|
|
||||||
private ResponseSpecification responseSpec;
|
private ResponseSpecification responseSpec;
|
||||||
@@ -120,6 +122,14 @@ public class LoanImportHandlerTest {
|
|||||||
collateralHashMap.put("quantity", "1");
|
collateralHashMap.put("quantity", "1");
|
||||||
collaterals.add(collateralHashMap);
|
collaterals.add(collateralHashMap);
|
||||||
|
|
||||||
|
final String disbursementChargeJsonString = ChargesHelper.getLoanDisbursementJSON();
|
||||||
|
|
||||||
|
final Integer disbursementChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec, disbursementChargeJsonString);
|
||||||
|
|
||||||
|
final JsonPath disbursementChargeJSON = JsonPath.from(disbursementChargeJsonString);
|
||||||
|
|
||||||
|
Assertions.assertNotNull(disbursementChargeId, "Could not create charge");
|
||||||
|
|
||||||
// in order to populate helper sheets
|
// in order to populate helper sheets
|
||||||
Integer outcome_group_creation = GroupHelper.createGroup(requestSpec, responseSpec, true);
|
Integer outcome_group_creation = GroupHelper.createGroup(requestSpec, responseSpec, true);
|
||||||
Assertions.assertNotNull(outcome_group_creation, "Could not create group");
|
Assertions.assertNotNull(outcome_group_creation, "Could not create group");
|
||||||
@@ -200,6 +210,10 @@ public class LoanImportHandlerTest {
|
|||||||
firstLoanRow.createCell(LoanConstants.REPAYMENT_TYPE_COL).setCellValue(paymentTypeName);
|
firstLoanRow.createCell(LoanConstants.REPAYMENT_TYPE_COL).setCellValue(paymentTypeName);
|
||||||
firstLoanRow.createCell(LoanConstants.LOAN_COLLATERAL_ID).setCellValue(collaterals.get(0).get("clientCollateralId").toString());
|
firstLoanRow.createCell(LoanConstants.LOAN_COLLATERAL_ID).setCellValue(collaterals.get(0).get("clientCollateralId").toString());
|
||||||
firstLoanRow.createCell(LoanConstants.LOAN_COLLATERAL_QUANTITY).setCellValue(collaterals.get(0).get("quantity").toString());
|
firstLoanRow.createCell(LoanConstants.LOAN_COLLATERAL_QUANTITY).setCellValue(collaterals.get(0).get("quantity").toString());
|
||||||
|
firstLoanRow.createCell(LoanConstants.CHARGE_NAME_1).setCellValue(disbursementChargeJSON.getString("name"));
|
||||||
|
firstLoanRow.createCell(LoanConstants.CHARGE_AMOUNT_1).setCellValue(disbursementChargeJSON.getFloat("amount"));
|
||||||
|
firstLoanRow.createCell(LoanConstants.CHARGE_AMOUNT_TYPE_1)
|
||||||
|
.setCellValue(disbursementChargeJSON.getString("chargeCalculationType.value"));
|
||||||
|
|
||||||
String currentdirectory = new File("").getAbsolutePath();
|
String currentdirectory = new File("").getAbsolutePath();
|
||||||
File directory = new File(currentdirectory + File.separator + "src" + File.separator + "integrationTest" + File.separator
|
File directory = new File(currentdirectory + File.separator + "src" + File.separator + "integrationTest" + File.separator
|
||||||
|
|||||||
Reference in New Issue
Block a user