blob: a1257504d5e0d37fbf8d2eca4760b1cf85485402 [file] [log] [blame]
/**
* 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.loan;
import java.util.List;
import org.apache.fineract.infrastructure.bulkimport.constants.LoanConstants;
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
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.ExtrasSheetPopulator;
import org.apache.fineract.infrastructure.bulkimport.populator.GroupSheetPopulator;
import org.apache.fineract.infrastructure.bulkimport.populator.LoanProductSheetPopulator;
import org.apache.fineract.infrastructure.bulkimport.populator.OfficeSheetPopulator;
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.poi.hssf.usermodel.HSSFDataValidationHelper;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.Name;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddressList;
public class LoanWorkbookPopulator extends AbstractWorkbookPopulator {
private OfficeSheetPopulator officeSheetPopulator;
private ClientSheetPopulator clientSheetPopulator;
private GroupSheetPopulator groupSheetPopulator;
private PersonnelSheetPopulator personnelSheetPopulator;
private LoanProductSheetPopulator productSheetPopulator;
private ChargeSheetPopulator chargeSheetPopulator;
private ExtrasSheetPopulator extrasSheetPopulator;
public LoanWorkbookPopulator(OfficeSheetPopulator officeSheetPopulator, ClientSheetPopulator clientSheetPopulator,
GroupSheetPopulator groupSheetPopulator, PersonnelSheetPopulator personnelSheetPopulator,
LoanProductSheetPopulator productSheetPopulator, ChargeSheetPopulator chargeSheetPopulator,
ExtrasSheetPopulator extrasSheetPopulator) {
this.officeSheetPopulator = officeSheetPopulator;
this.clientSheetPopulator = clientSheetPopulator;
this.groupSheetPopulator = groupSheetPopulator;
this.personnelSheetPopulator = personnelSheetPopulator;
this.productSheetPopulator = productSheetPopulator;
this.extrasSheetPopulator = extrasSheetPopulator;
this.chargeSheetPopulator = chargeSheetPopulator;
}
@Override
public void populate(Workbook workbook, String dateFormat) {
Sheet loanSheet = workbook.createSheet(TemplatePopulateImportConstants.LOANS_SHEET_NAME);
officeSheetPopulator.populate(workbook, dateFormat);
clientSheetPopulator.populate(workbook, dateFormat);
groupSheetPopulator.populate(workbook, dateFormat);
personnelSheetPopulator.populate(workbook, dateFormat);
productSheetPopulator.populate(workbook, dateFormat);
chargeSheetPopulator.populate(workbook, dateFormat);
extrasSheetPopulator.populate(workbook, dateFormat);
setLayout(loanSheet);
setRules(loanSheet, dateFormat);
setDefaults(loanSheet);
setClientAndGroupDateLookupTable(loanSheet, clientSheetPopulator.getClients(), groupSheetPopulator.getGroups(),
LoanConstants.LOOKUP_CLIENT_NAME_COL, LoanConstants.LOOKUP_ACTIVATION_DATE_COL,
TemplatePopulateImportConstants.CONTAINS_CLIENT_EXTERNAL_ID, dateFormat);
}
private void setRules(Sheet worksheet, String dateFormat) {
CellRangeAddressList officeNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.OFFICE_NAME_COL, LoanConstants.OFFICE_NAME_COL);
CellRangeAddressList loanTypeRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.LOAN_TYPE_COL, LoanConstants.LOAN_TYPE_COL);
CellRangeAddressList clientNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.CLIENT_NAME_COL, LoanConstants.CLIENT_NAME_COL);
CellRangeAddressList productNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.PRODUCT_COL, LoanConstants.PRODUCT_COL);
CellRangeAddressList loanOfficerRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.LOAN_OFFICER_NAME_COL, LoanConstants.LOAN_OFFICER_NAME_COL);
CellRangeAddressList submittedDateRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.SUBMITTED_ON_DATE_COL, LoanConstants.SUBMITTED_ON_DATE_COL);
CellRangeAddressList fundNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.FUND_NAME_COL, LoanConstants.FUND_NAME_COL);
CellRangeAddressList principalRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.PRINCIPAL_COL, LoanConstants.PRINCIPAL_COL);
CellRangeAddressList noOfRepaymentsRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.NO_OF_REPAYMENTS_COL, LoanConstants.NO_OF_REPAYMENTS_COL);
CellRangeAddressList repaidFrequencyRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.REPAID_EVERY_FREQUENCY_COL, LoanConstants.REPAID_EVERY_FREQUENCY_COL);
CellRangeAddressList loanTermRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.LOAN_TERM_COL, LoanConstants.LOAN_TERM_COL);
CellRangeAddressList loanTermFrequencyRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.LOAN_TERM_FREQUENCY_COL, LoanConstants.LOAN_TERM_FREQUENCY_COL);
CellRangeAddressList interestFrequencyRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.NOMINAL_INTEREST_RATE_FREQUENCY_COL, LoanConstants.NOMINAL_INTEREST_RATE_FREQUENCY_COL);
CellRangeAddressList interestRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.NOMINAL_INTEREST_RATE_COL, LoanConstants.NOMINAL_INTEREST_RATE_COL);
CellRangeAddressList amortizationRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.AMORTIZATION_COL, LoanConstants.AMORTIZATION_COL);
CellRangeAddressList interestMethodRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.INTEREST_METHOD_COL, LoanConstants.INTEREST_METHOD_COL);
CellRangeAddressList intrestCalculationPeriodRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.INTEREST_CALCULATION_PERIOD_COL, LoanConstants.INTEREST_CALCULATION_PERIOD_COL);
CellRangeAddressList repaymentStrategyRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.REPAYMENT_STRATEGY_COL, LoanConstants.REPAYMENT_STRATEGY_COL);
CellRangeAddressList arrearsToleranceRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.ARREARS_TOLERANCE_COL, LoanConstants.ARREARS_TOLERANCE_COL);
CellRangeAddressList graceOnPrincipalPaymentRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.GRACE_ON_PRINCIPAL_PAYMENT_COL, LoanConstants.GRACE_ON_PRINCIPAL_PAYMENT_COL);
CellRangeAddressList graceOnInterestPaymentRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.GRACE_ON_INTEREST_PAYMENT_COL, LoanConstants.GRACE_ON_INTEREST_PAYMENT_COL);
CellRangeAddressList graceOnInterestChargedRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.GRACE_ON_INTEREST_CHARGED_COL, LoanConstants.GRACE_ON_INTEREST_CHARGED_COL);
CellRangeAddressList approvedDateRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.APPROVED_DATE_COL, LoanConstants.APPROVED_DATE_COL);
CellRangeAddressList disbursedDateRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.DISBURSED_DATE_COL, LoanConstants.DISBURSED_DATE_COL);
CellRangeAddressList paymentTypeRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.DISBURSED_PAYMENT_TYPE_COL, LoanConstants.DISBURSED_PAYMENT_TYPE_COL);
CellRangeAddressList repaymentTypeRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.REPAYMENT_TYPE_COL, LoanConstants.REPAYMENT_TYPE_COL);
CellRangeAddressList lastrepaymentDateRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
LoanConstants.LAST_REPAYMENT_DATE_COL, LoanConstants.LAST_REPAYMENT_DATE_COL);
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);
DataValidationConstraint officeNameConstraint = validationHelper.createFormulaListConstraint("Office");
DataValidationConstraint loanTypeConstraint = validationHelper.createExplicitListConstraint(
new String[] { LoanConstants.LOAN_TYPE_INDIVIDUAL, LoanConstants.LOAN_TYPE_GROUP, LoanConstants.LOAN_TYPE_JLG });
DataValidationConstraint clientNameConstraint = validationHelper.createFormulaListConstraint(
"IF($B1=\"Group\",INDIRECT(CONCATENATE(\"Group_\",$A1)),INDIRECT(CONCATENATE(\"Client_\",$A1)))");
DataValidationConstraint productNameConstraint = validationHelper.createFormulaListConstraint("Products");
DataValidationConstraint loanOfficerNameConstraint = validationHelper
.createFormulaListConstraint("INDIRECT(CONCATENATE(\"Staff_\",$A1))");
DataValidationConstraint submittedDateConstraint = validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN,
"=IF(INDIRECT(CONCATENATE(\"START_DATE_\",$E1))>VLOOKUP($C1,$AR$2:$AT$"
+ (clientSheetPopulator.getClientsSize() + groupSheetPopulator.getGroupsSize() + 1)
+ ",3,FALSE),INDIRECT(CONCATENATE(\"START_DATE_\",$E1)),VLOOKUP($C1,$AR$2:$AT$"
+ (clientSheetPopulator.getClientsSize() + groupSheetPopulator.getGroupsSize() + 1) + ",3,FALSE))",
"=TODAY()", dateFormat);
DataValidationConstraint approvalDateConstraint = validationHelper
.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=$G1", "=TODAY()", dateFormat);
DataValidationConstraint disbursedDateConstraint = validationHelper
.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=$H1", "=TODAY()", dateFormat);
DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint fundNameConstraint = validationHelper.createFormulaListConstraint("Funds");
DataValidationConstraint principalConstraint = validationHelper.createDecimalConstraint(
DataValidationConstraint.OperatorType.BETWEEN, "=INDIRECT(CONCATENATE(\"MIN_PRINCIPAL_\",$E1))",
"=INDIRECT(CONCATENATE(\"MAX_PRINCIPAL_\",$E1))");
DataValidationConstraint noOfRepaymentsConstraint = validationHelper.createIntegerConstraint(
DataValidationConstraint.OperatorType.BETWEEN, "=INDIRECT(CONCATENATE(\"MIN_REPAYMENT_\",$E1))",
"=INDIRECT(CONCATENATE(\"MAX_REPAYMENT_\",$E1))");
DataValidationConstraint frequencyConstraint = validationHelper
.createExplicitListConstraint(new String[] { "Days", "Weeks", "Months", "Semi Month" });
DataValidationConstraint loanTermFrequencyConstraint = validationHelper
.createExplicitListConstraint(new String[] { "Days", "Weeks", "Months" });
DataValidationConstraint loanTermConstraint = validationHelper
.createIntegerConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "=$M1/$N1", "=$M1*$N1");
DataValidationConstraint interestFrequencyConstraint = validationHelper
.createFormulaListConstraint("INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E1))");
DataValidationConstraint interestConstraint = validationHelper.createDecimalConstraint(
DataValidationConstraint.OperatorType.BETWEEN, "=INDIRECT(CONCATENATE(\"MIN_INTEREST_\",$E1))",
"=INDIRECT(CONCATENATE(\"MAX_INTEREST_\",$E1))");
DataValidationConstraint amortizationConstraint = validationHelper
.createExplicitListConstraint(new String[] { "Equal principal payments", "Equal installments" });
DataValidationConstraint interestMethodConstraint = validationHelper
.createExplicitListConstraint(new String[] { "Flat", "Declining Balance" });
DataValidationConstraint interestCalculationPeriodConstraint = validationHelper
.createExplicitListConstraint(new String[] { "Daily", "Same as repayment period" });
DataValidationConstraint repaymentStrategyConstraint = validationHelper.createExplicitListConstraint(new String[] {
"Penalties, Fees, Interest, Principal order", "HeavensFamily Unique", "Creocore Unique", "Overdue/Due Fee/Int,Principal",
"Principal, Interest, Penalties, Fees Order", "Interest, Principal, Penalties, Fees Order", "Early Repayment Strategy" });
DataValidationConstraint arrearsToleranceConstraint = validationHelper
.createIntegerConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "0", null);
DataValidationConstraint graceOnPrincipalPaymentConstraint = validationHelper
.createIntegerConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "0", null);
DataValidationConstraint graceOnInterestPaymentConstraint = validationHelper
.createIntegerConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "0", null);
DataValidationConstraint graceOnInterestChargedConstraint = validationHelper
.createIntegerConstraint(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL, "0", null);
DataValidationConstraint lastRepaymentDateConstraint = validationHelper
.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 loanTypeValidation = validationHelper.createValidation(loanTypeConstraint, loanTypeRange);
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
DataValidation productNameValidation = validationHelper.createValidation(productNameConstraint, productNameRange);
DataValidation loanOfficerValidation = validationHelper.createValidation(loanOfficerNameConstraint, loanOfficerRange);
DataValidation fundNameValidation = validationHelper.createValidation(fundNameConstraint, fundNameRange);
DataValidation repaidFrequencyValidation = validationHelper.createValidation(frequencyConstraint, repaidFrequencyRange);
DataValidation loanTermFrequencyValidation = validationHelper.createValidation(loanTermFrequencyConstraint, loanTermFrequencyRange);
DataValidation amortizationValidation = validationHelper.createValidation(amortizationConstraint, amortizationRange);
DataValidation interestMethodValidation = validationHelper.createValidation(interestMethodConstraint, interestMethodRange);
DataValidation interestCalculationPeriodValidation = validationHelper.createValidation(interestCalculationPeriodConstraint,
intrestCalculationPeriodRange);
DataValidation repaymentStrategyValidation = validationHelper.createValidation(repaymentStrategyConstraint, repaymentStrategyRange);
DataValidation paymentTypeValidation = validationHelper.createValidation(paymentTypeConstraint, paymentTypeRange);
DataValidation repaymentTypeValidation = validationHelper.createValidation(paymentTypeConstraint, repaymentTypeRange);
DataValidation submittedDateValidation = validationHelper.createValidation(submittedDateConstraint, submittedDateRange);
DataValidation approvalDateValidation = validationHelper.createValidation(approvalDateConstraint, approvedDateRange);
DataValidation disbursedDateValidation = validationHelper.createValidation(disbursedDateConstraint, disbursedDateRange);
DataValidation lastRepaymentDateValidation = validationHelper.createValidation(lastRepaymentDateConstraint, lastrepaymentDateRange);
DataValidation principalValidation = validationHelper.createValidation(principalConstraint, principalRange);
DataValidation loanTermValidation = validationHelper.createValidation(loanTermConstraint, loanTermRange);
DataValidation noOfRepaymentsValidation = validationHelper.createValidation(noOfRepaymentsConstraint, noOfRepaymentsRange);
DataValidation interestValidation = validationHelper.createValidation(interestConstraint, interestRange);
DataValidation arrearsToleranceValidation = validationHelper.createValidation(arrearsToleranceConstraint, arrearsToleranceRange);
DataValidation graceOnPrincipalPaymentValidation = validationHelper.createValidation(graceOnPrincipalPaymentConstraint,
graceOnPrincipalPaymentRange);
DataValidation graceOnInterestPaymentValidation = validationHelper.createValidation(graceOnInterestPaymentConstraint,
graceOnInterestPaymentRange);
DataValidation graceOnInterestChargedValidation = validationHelper.createValidation(graceOnInterestChargedConstraint,
graceOnInterestChargedRange);
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);
worksheet.addValidationData(officeValidation);
worksheet.addValidationData(loanTypeValidation);
worksheet.addValidationData(clientValidation);
worksheet.addValidationData(productNameValidation);
worksheet.addValidationData(loanOfficerValidation);
worksheet.addValidationData(submittedDateValidation);
worksheet.addValidationData(approvalDateValidation);
worksheet.addValidationData(disbursedDateValidation);
worksheet.addValidationData(paymentTypeValidation);
worksheet.addValidationData(fundNameValidation);
worksheet.addValidationData(principalValidation);
worksheet.addValidationData(repaidFrequencyValidation);
worksheet.addValidationData(loanTermFrequencyValidation);
worksheet.addValidationData(noOfRepaymentsValidation);
worksheet.addValidationData(loanTermValidation);
worksheet.addValidationData(interestValidation);
worksheet.addValidationData(interestFrequencyValidation);
worksheet.addValidationData(amortizationValidation);
worksheet.addValidationData(interestMethodValidation);
worksheet.addValidationData(interestCalculationPeriodValidation);
worksheet.addValidationData(repaymentStrategyValidation);
worksheet.addValidationData(arrearsToleranceValidation);
worksheet.addValidationData(graceOnPrincipalPaymentValidation);
worksheet.addValidationData(graceOnInterestPaymentValidation);
worksheet.addValidationData(graceOnInterestChargedValidation);
worksheet.addValidationData(lastRepaymentDateValidation);
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) {
Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX);
rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT);
worksheet.setColumnWidth(LoanConstants.OFFICE_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.LOAN_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.CLIENT_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.CLIENT_EXTERNAL_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.PRODUCT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.LOAN_OFFICER_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.SUBMITTED_ON_DATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.APPROVED_DATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.DISBURSED_DATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.DISBURSED_PAYMENT_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.FUND_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.PRINCIPAL_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.LOAN_TERM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.LOAN_TERM_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.NO_OF_REPAYMENTS_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.REPAID_EVERY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.REPAID_EVERY_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.NOMINAL_INTEREST_RATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.NOMINAL_INTEREST_RATE_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.AMORTIZATION_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.INTEREST_METHOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.INTEREST_CALCULATION_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.ARREARS_TOLERANCE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.REPAYMENT_STRATEGY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.GRACE_ON_PRINCIPAL_PAYMENT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.GRACE_ON_INTEREST_PAYMENT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.GRACE_ON_INTEREST_CHARGED_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.INTEREST_CHARGED_FROM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.FIRST_REPAYMENT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.TOTAL_AMOUNT_REPAID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.LAST_REPAYMENT_DATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.REPAYMENT_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.LOOKUP_CLIENT_NAME_COL, 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.EXTERNAL_ID_COL, 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_TYPE_1, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
worksheet.setColumnWidth(LoanConstants.CHARGE_DUE_DATE_1, 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_TYPE_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.LINK_ACCOUNT_ID, TemplatePopulateImportConstants.MEDIUM_COL_SIZE);
writeString(LoanConstants.OFFICE_NAME_COL, rowHeader, "Office Name*");
writeString(LoanConstants.LOAN_TYPE_COL, rowHeader, "Loan Type*");
writeString(LoanConstants.CLIENT_NAME_COL, rowHeader, "Client/Group Name*");
writeString(LoanConstants.CLIENT_EXTERNAL_ID, rowHeader, "Client ExternalID");
writeString(LoanConstants.PRODUCT_COL, rowHeader, "Product*");
writeString(LoanConstants.LOAN_OFFICER_NAME_COL, rowHeader, "Loan Officer*");
writeString(LoanConstants.SUBMITTED_ON_DATE_COL, rowHeader, "Submitted On*");
writeString(LoanConstants.APPROVED_DATE_COL, rowHeader, "Approved On");
writeString(LoanConstants.DISBURSED_DATE_COL, rowHeader, "Disbursed Date");
writeString(LoanConstants.DISBURSED_PAYMENT_TYPE_COL, rowHeader, "Payment Type*");
writeString(LoanConstants.FUND_NAME_COL, rowHeader, "Fund Name");
writeString(LoanConstants.PRINCIPAL_COL, rowHeader, "Principal*");
writeString(LoanConstants.LOAN_TERM_COL, rowHeader, "Loan Term*");
writeString(LoanConstants.NO_OF_REPAYMENTS_COL, rowHeader, "# of Repayments*");
writeString(LoanConstants.REPAID_EVERY_COL, rowHeader, "Repaid Every*");
writeString(LoanConstants.NOMINAL_INTEREST_RATE_COL, rowHeader, "Nominal Interest %*");
writeString(LoanConstants.AMORTIZATION_COL, rowHeader, "Amortization*");
writeString(LoanConstants.INTEREST_METHOD_COL, rowHeader, "Interest Method*");
writeString(LoanConstants.INTEREST_CALCULATION_PERIOD_COL, rowHeader, "Interest Calculation Period*");
writeString(LoanConstants.ARREARS_TOLERANCE_COL, rowHeader, "Arrears Tolerance");
writeString(LoanConstants.REPAYMENT_STRATEGY_COL, rowHeader, "Repayment Strategy*");
writeString(LoanConstants.GRACE_ON_PRINCIPAL_PAYMENT_COL, rowHeader, "Grace-Principal Payment");
writeString(LoanConstants.GRACE_ON_INTEREST_PAYMENT_COL, rowHeader, "Grace-Interest Payment");
writeString(LoanConstants.GRACE_ON_INTEREST_CHARGED_COL, rowHeader, "Interest-Free Period(s)");
writeString(LoanConstants.INTEREST_CHARGED_FROM_COL, rowHeader, "Interest Charged From");
writeString(LoanConstants.FIRST_REPAYMENT_COL, rowHeader, "First Repayment On");
writeString(LoanConstants.TOTAL_AMOUNT_REPAID_COL, rowHeader, "Amount Repaid");
writeString(LoanConstants.LAST_REPAYMENT_DATE_COL, rowHeader, "Date-Last Repayment");
writeString(LoanConstants.REPAYMENT_TYPE_COL, rowHeader, "Repayment Type");
writeString(LoanConstants.LOOKUP_CLIENT_NAME_COL, rowHeader, "Client Name");
writeString(LoanConstants.LOOKUP_CLIENT_EXTERNAL_ID, rowHeader, "Lookup Client ExternalID");
writeString(LoanConstants.LOOKUP_ACTIVATION_DATE_COL, rowHeader, "Client Activation Date");
writeString(LoanConstants.EXTERNAL_ID_COL, rowHeader, "External Id");
writeString(LoanConstants.CHARGE_NAME_1, rowHeader, "Charge Name*");
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_NAME_2, rowHeader, "Charge Name*");
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.GROUP_ID, rowHeader, "GROUP ID");
writeString(LoanConstants.LINK_ACCOUNT_ID, rowHeader, "Linked Account No.");
CellStyle borderStyle = worksheet.getWorkbook().createCellStyle();
CellStyle doubleBorderStyle = worksheet.getWorkbook().createCellStyle();
borderStyle.setBorderBottom(BorderStyle.THIN);
doubleBorderStyle.setBorderBottom(BorderStyle.THIN);
doubleBorderStyle.setBorderRight(BorderStyle.THICK);
for (int colNo = 0; colNo < 35; colNo++) {
Cell cell = rowHeader.getCell(colNo);
if (cell == null) {
rowHeader.createCell(colNo);
}
rowHeader.getCell(colNo).setCellStyle(borderStyle);
}
rowHeader.getCell(LoanConstants.FIRST_REPAYMENT_COL).setCellStyle(doubleBorderStyle);
rowHeader.getCell(LoanConstants.REPAYMENT_TYPE_COL).setCellStyle(doubleBorderStyle);
}
private void setDefaults(Sheet worksheet) {
for (Integer rowNo = 1; rowNo < 1000; rowNo++) {
Row row = worksheet.createRow(rowNo);
writeFormula(LoanConstants.CLIENT_EXTERNAL_ID, row,
"IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$AR$2:$AS$" + (clientSheetPopulator.getClients().size() + 1) + ",2,FALSE)),"
+ "\"\",(VLOOKUP($C" + (rowNo + 1) + ",$AR$2:$AS$" + (clientSheetPopulator.getClients().size() + 1)
+ ",2,FALSE)))");
writeFormula(LoanConstants.FUND_NAME_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"FUND_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"FUND_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.PRINCIPAL_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"PRINCIPAL_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"PRINCIPAL_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.REPAID_EVERY_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"REPAYMENT_EVERY_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"REPAYMENT_EVERY_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.REPAID_EVERY_FREQUENCY_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"REPAYMENT_FREQUENCY_\",$E"
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"REPAYMENT_FREQUENCY_\",$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) + ")))");
writeFormula(LoanConstants.LOAN_TERM_COL, row,
"IF(($O" + (rowNo + 1) + "=\"Semi Month\"), " + "(IF(ISERROR($M" + (rowNo + 1) + "/$N" + (rowNo + 1) + "),\"\",$M"
+ (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,
"IF(ISERROR(INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"INTEREST_FREQUENCY_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.NOMINAL_INTEREST_RATE_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"INTEREST_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"INTEREST_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.AMORTIZATION_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"AMORTIZATION_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"AMORTIZATION_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.INTEREST_METHOD_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"INTEREST_TYPE_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"INTEREST_TYPE_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.INTEREST_CALCULATION_PERIOD_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"INTEREST_CALCULATION_\",$E"
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"INTEREST_CALCULATION_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.ARREARS_TOLERANCE_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"ARREARS_TOLERANCE_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"ARREARS_TOLERANCE_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.REPAYMENT_STRATEGY_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"STRATEGY_\",$E" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"STRATEGY_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.GRACE_ON_PRINCIPAL_PAYMENT_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"GRACE_PRINCIPAL_\",$E"
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"GRACE_PRINCIPAL_\",$E" + (rowNo + 1) + ")))");
writeFormula(LoanConstants.GRACE_ON_INTEREST_PAYMENT_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"GRACE_INTEREST_PAYMENT_\",$E"
+ (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"
+ (rowNo + 1) + "))),\"\",INDIRECT(CONCATENATE(\"GRACE_INTEREST_CHARGED_\",$E" + (rowNo + 1) + ")))");
}
}
private void setNames(Sheet worksheet) {
Workbook loanWorkbook = worksheet.getWorkbook();
List<String> officeNames = officeSheetPopulator.getOfficeNames();
List<ChargeData> charges = chargeSheetPopulator.getCharges();
List<LoanProductData> products = productSheetPopulator.getProducts();
// Office Names
Name officeGroup = loanWorkbook.createName();
officeGroup.setNameName("Office");
officeGroup.setRefersToFormula(TemplatePopulateImportConstants.OFFICE_SHEET_NAME + "!$B$2:$B$" + (officeNames.size() + 1));
// Client and Loan Officer Names for each office
for (Integer i = 0; i < officeNames.size(); i++) {
Integer[] officeNameToBeginEndIndexesOfClients = clientSheetPopulator.getOfficeNameToBeginEndIndexesOfClients().get(i);
Integer[] officeNameToBeginEndIndexesOfStaff = personnelSheetPopulator.getOfficeNameToBeginEndIndexesOfStaff().get(i);
Integer[] officeNameToBeginEndIndexesOfGroups = groupSheetPopulator.getOfficeNameToBeginEndIndexesOfGroups().get(i);
Name clientName = loanWorkbook.createName();
Name loanOfficerName = loanWorkbook.createName();
Name groupName = loanWorkbook.createName();
if (officeNameToBeginEndIndexesOfStaff != null) {
setSanitized(loanOfficerName, "Staff_" + officeNames.get(i));
loanOfficerName.setRefersToFormula(TemplatePopulateImportConstants.STAFF_SHEET_NAME + "!$B$"
+ officeNameToBeginEndIndexesOfStaff[0] + ":$B$" + officeNameToBeginEndIndexesOfStaff[1]);
}
if (officeNameToBeginEndIndexesOfClients != null) {
setSanitized(clientName, "Client_" + officeNames.get(i));
clientName.setRefersToFormula(TemplatePopulateImportConstants.CLIENT_SHEET_NAME + "!$B$"
+ officeNameToBeginEndIndexesOfClients[0] + ":$B$" + officeNameToBeginEndIndexesOfClients[1]);
}
if (officeNameToBeginEndIndexesOfGroups != null) {
setSanitized(groupName, "Group_" + officeNames.get(i));
groupName.setRefersToFormula(TemplatePopulateImportConstants.GROUP_SHEET_NAME + "!$B$"
+ officeNameToBeginEndIndexesOfGroups[0] + ":$B$" + officeNameToBeginEndIndexesOfGroups[1]);
}
}
// Product Name
Name productGroup = loanWorkbook.createName();
productGroup.setNameName("Products");
productGroup.setRefersToFormula(
TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$B$2:$B$" + (productSheetPopulator.getProductsSize() + 1));
// Fund Name
Name fundGroup = loanWorkbook.createName();
fundGroup.setNameName("Funds");
fundGroup.setRefersToFormula(
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
Name paymentTypeGroup = loanWorkbook.createName();
paymentTypeGroup.setNameName("PaymentTypes");
paymentTypeGroup.setRefersToFormula(
TemplatePopulateImportConstants.EXTRAS_SHEET_NAME + "!$D$2:$D$" + (extrasSheetPopulator.getPaymentTypesSize() + 1));
// Default Fund, Default Principal, Min Principal, Max Principal,
// Default No. of Repayments, Min Repayments, Max Repayments, Repayment
// Every,
// Repayment Every Frequency, Interest Rate, Min Interest Rate, Max
// Interest Rate, Interest Frequency, Amortization, Interest Type,
// Interest Calculation Period, Transaction Processing Strategy, Arrears
// Tolerance, GraceOnPrincipalPayment, GraceOnInterestPayment,
// GraceOnInterestCharged, StartDate Names for each loan product
for (Integer i = 0; i < products.size(); i++) {
Name fundName = loanWorkbook.createName();
Name principalName = loanWorkbook.createName();
Name minPrincipalName = loanWorkbook.createName();
Name maxPrincipalName = loanWorkbook.createName();
Name noOfRepaymentName = loanWorkbook.createName();
Name minNoOfRepayment = loanWorkbook.createName();
Name maxNoOfRepaymentName = loanWorkbook.createName();
Name repaymentEveryName = loanWorkbook.createName();
Name repaymentFrequencyName = loanWorkbook.createName();
Name interestName = loanWorkbook.createName();
Name minInterestName = loanWorkbook.createName();
Name maxInterestName = loanWorkbook.createName();
Name interestFrequencyName = loanWorkbook.createName();
Name amortizationName = loanWorkbook.createName();
Name interestTypeName = loanWorkbook.createName();
Name interestCalculationPeriodName = loanWorkbook.createName();
Name transactionProcessingStrategyName = loanWorkbook.createName();
Name arrearsToleranceName = loanWorkbook.createName();
Name graceOnPrincipalPaymentName = loanWorkbook.createName();
Name graceOnInterestPaymentName = loanWorkbook.createName();
Name graceOnInterestChargedName = loanWorkbook.createName();
Name startDateName = loanWorkbook.createName();
String productName = products.get(i).getName().replaceAll("[ ]", "_");
setSanitized(fundName, "FUND_" + productName);
setSanitized(principalName, "PRINCIPAL_" + productName);
setSanitized(minPrincipalName, "MIN_PRINCIPAL_" + productName);
setSanitized(maxPrincipalName, "MAX_PRINCIPAL_" + productName);
setSanitized(noOfRepaymentName, "NO_REPAYMENT_" + productName);
setSanitized(minNoOfRepayment, "MIN_REPAYMENT_" + productName);
setSanitized(maxNoOfRepaymentName, "MAX_REPAYMENT_" + productName);
setSanitized(repaymentEveryName, "REPAYMENT_EVERY_" + productName);
setSanitized(repaymentFrequencyName, "REPAYMENT_FREQUENCY_" + productName);
setSanitized(interestName, "INTEREST_" + productName);
setSanitized(minInterestName, "MIN_INTEREST_" + productName);
setSanitized(maxInterestName, "MAX_INTEREST_" + productName);
setSanitized(interestFrequencyName, "INTEREST_FREQUENCY_" + productName);
setSanitized(amortizationName, "AMORTIZATION_" + productName);
setSanitized(interestTypeName, "INTEREST_TYPE_" + productName);
setSanitized(interestCalculationPeriodName, "INTEREST_CALCULATION_" + productName);
setSanitized(transactionProcessingStrategyName, "STRATEGY_" + productName);
setSanitized(arrearsToleranceName, "ARREARS_TOLERANCE_" + productName);
setSanitized(graceOnPrincipalPaymentName, "GRACE_PRINCIPAL_" + productName);
setSanitized(graceOnInterestPaymentName, "GRACE_INTEREST_PAYMENT_" + productName);
setSanitized(graceOnInterestChargedName, "GRACE_INTEREST_CHARGED_" + productName);
setSanitized(startDateName, "START_DATE_" + productName);
if (products.get(i).getFundName() != null) {
fundName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$C$" + (i + 2));
}
principalName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$D$" + (i + 2));
minPrincipalName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$E$" + (i + 2));
maxPrincipalName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$F$" + (i + 2));
noOfRepaymentName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$G$" + (i + 2));
minNoOfRepayment.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$H$" + (i + 2));
maxNoOfRepaymentName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$I$" + (i + 2));
repaymentEveryName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$J$" + (i + 2));
repaymentFrequencyName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$K$" + (i + 2));
interestName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$L$" + (i + 2));
minInterestName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$M$" + (i + 2));
maxInterestName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$N$" + (i + 2));
interestFrequencyName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$O$" + (i + 2));
amortizationName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$P$" + (i + 2));
interestTypeName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$Q$" + (i + 2));
interestCalculationPeriodName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$R$" + (i + 2));
transactionProcessingStrategyName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$T$" + (i + 2));
arrearsToleranceName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$S$" + (i + 2));
graceOnPrincipalPaymentName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$U$" + (i + 2));
graceOnInterestPaymentName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$V$" + (i + 2));
graceOnInterestChargedName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$W$" + (i + 2));
startDateName.setRefersToFormula(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME + "!$X$" + (i + 2));
}
}
}