FINERACT-2202: Bulk import fix

This commit is contained in:
danielales2541
2025-05-22 10:37:36 +02:00
committed by Adam Saghy
parent 5cd604df43
commit 24145ae308
21 changed files with 198 additions and 58 deletions
@@ -116,7 +116,7 @@ public final class CalendarData implements Serializable {
this.dateFormat = dateFormat; this.dateFormat = dateFormat;
this.locale = locale; this.locale = locale;
this.description = ""; this.description = "";
this.typeId = "1"; this.typeId = "4";
this.id = null; this.id = null;
this.calendarInstanceId = null; this.calendarInstanceId = null;
this.entityId = null; this.entityId = null;
@@ -269,7 +269,7 @@ public final class ClientData implements Comparable<ClientData>, Serializable {
this.clientNonPersonConstitutionOptions = null; this.clientNonPersonConstitutionOptions = null;
this.clientNonPersonMainBusinessLineOptions = null; this.clientNonPersonMainBusinessLineOptions = null;
this.clientLegalFormOptions = null; this.clientLegalFormOptions = null;
this.clientNonPersonDetails = null; this.clientNonPersonDetails = clientNonPersonDetails;
this.isAddressEnabled = null; this.isAddressEnabled = null;
this.datatables = null; this.datatables = null;
this.familyMemberOptions = null; this.familyMemberOptions = null;
@@ -72,7 +72,7 @@ public final class SavingsAccountTransactionData implements Serializable {
private final LocalDate submittedOnDate; private final LocalDate submittedOnDate;
private final boolean interestedPostedAsOn; private final boolean interestedPostedAsOn;
private final String submittedByUsername; private final String submittedByUsername;
private final String note; private String note;
private final boolean isManualTransaction; private final boolean isManualTransaction;
private final Boolean isReversal; private final Boolean isReversal;
private final Long originalTransactionId; private final Long originalTransactionId;
@@ -255,8 +255,8 @@ public final class SavingsAccountTransactionData implements Serializable {
} }
public static SavingsAccountTransactionData importInstance(BigDecimal transactionAmount, LocalDate transactionDate, Long paymentTypeId, public static SavingsAccountTransactionData importInstance(BigDecimal transactionAmount, LocalDate transactionDate, Long paymentTypeId,
String accountNumber, String checkNumber, String routingCode, String receiptNumber, String bankNumber, Long savingsAccountId, String accountNumber, String checkNumber, String routingCode, String receiptNumber, String bankNumber, String note,
SavingsAccountTransactionEnumData transactionType, Integer rowIndex, String locale, String dateFormat) { Long savingsAccountId, SavingsAccountTransactionEnumData transactionType, Integer rowIndex, String locale, String dateFormat) {
SavingsAccountTransactionData data = createImport(transactionType, null, savingsAccountId, accountNumber, transactionDate, SavingsAccountTransactionData data = createImport(transactionType, null, savingsAccountId, accountNumber, transactionDate,
transactionAmount, false, transactionDate, false, false); transactionAmount, false, transactionDate, false, false);
data.rowIndex = rowIndex; data.rowIndex = rowIndex;
@@ -265,6 +265,7 @@ public final class SavingsAccountTransactionData implements Serializable {
data.routingCode = routingCode; data.routingCode = routingCode;
data.receiptNumber = receiptNumber; data.receiptNumber = receiptNumber;
data.bankNumber = bankNumber; data.bankNumber = bankNumber;
data.note = note;
data.locale = locale; data.locale = locale;
data.dateFormat = dateFormat; data.dateFormat = dateFormat;
return data; return data;
@@ -38,10 +38,11 @@ public final class TransactionConstants {
public static final int ROUTING_CODE_COL = 11; public static final int ROUTING_CODE_COL = 11;
public static final int RECEIPT_NO_COL = 12; public static final int RECEIPT_NO_COL = 12;
public static final int BANK_NO_COL = 13; public static final int BANK_NO_COL = 13;
public static final int STATUS_COL = 14; public static final int NOTE_COL = 14;
public static final int LOOKUP_CLIENT_NAME_COL = 15; public static final int STATUS_COL = 15;
public static final int LOOKUP_ACCOUNT_NO_COL = 16; public static final int LOOKUP_CLIENT_NAME_COL = 16;
public static final int LOOKUP_PRODUCT_COL = 17; public static final int LOOKUP_ACCOUNT_NO_COL = 17;
public static final int LOOKUP_OPENING_BALANCE_COL = 18; public static final int LOOKUP_PRODUCT_COL = 18;
public static final int LOOKUP_SAVINGS_ACTIVATION_DATE_COL = 19; public static final int LOOKUP_OPENING_BALANCE_COL = 19;
public static final int LOOKUP_SAVINGS_ACTIVATION_DATE_COL = 20;
} }
@@ -89,9 +89,9 @@ public class ClientEntityImportHandler implements ImportHandler {
officeId = null; officeId = null;
} }
String staffName = ImportHandlerUtils.readAsString(ClientEntityConstants.STAFF_NAME_COL, row); String staffName = ImportHandlerUtils.readAsString(ClientEntityConstants.STAFF_NAME_COL, row);
Long staffId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.STAFF_SHEET_NAME), staffName); Long staffId = null;
if (staffId == 0L) { if (staffName != null) {
staffId = null; staffId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.STAFF_SHEET_NAME), staffName);
} }
LocalDate incorportionDate = ImportHandlerUtils.readAsDate(ClientEntityConstants.INCOPORATION_DATE_COL, row); LocalDate incorportionDate = ImportHandlerUtils.readAsDate(ClientEntityConstants.INCOPORATION_DATE_COL, row);
LocalDate incorporationTill = ImportHandlerUtils.readAsDate(ClientEntityConstants.INCOPORATION_VALID_TILL_COL, row); LocalDate incorporationTill = ImportHandlerUtils.readAsDate(ClientEntityConstants.INCOPORATION_VALID_TILL_COL, row);
@@ -90,9 +90,9 @@ public class ClientPersonImportHandler implements ImportHandler {
officeId = null; officeId = null;
} }
String staffName = ImportHandlerUtils.readAsString(ClientPersonConstants.STAFF_NAME_COL, row); String staffName = ImportHandlerUtils.readAsString(ClientPersonConstants.STAFF_NAME_COL, row);
Long staffId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.STAFF_SHEET_NAME), staffName); Long staffId = null;
if (staffId == 0L) { if (staffName != null) {
staffId = null; staffId = ImportHandlerUtils.getIdByName(workbook.getSheet(TemplatePopulateImportConstants.STAFF_SHEET_NAME), staffName);
} }
ExternalId externalId = externalIdFactory.create(ImportHandlerUtils.readAsString(ClientPersonConstants.EXTERNAL_ID_COL, row)); ExternalId externalId = externalIdFactory.create(ImportHandlerUtils.readAsString(ClientPersonConstants.EXTERNAL_ID_COL, row));
LocalDate submittedOn = ImportHandlerUtils.readAsDate(ClientPersonConstants.SUBMITTED_ON_COL, row); LocalDate submittedOn = ImportHandlerUtils.readAsDate(ClientPersonConstants.SUBMITTED_ON_COL, row);
@@ -110,8 +110,9 @@ public class FixedDepositTransactionImportHandler implements ImportHandler {
String routingCode = ImportHandlerUtils.readAsString(TransactionConstants.ROUTING_CODE_COL, row); String routingCode = ImportHandlerUtils.readAsString(TransactionConstants.ROUTING_CODE_COL, row);
String receiptNumber = ImportHandlerUtils.readAsString(TransactionConstants.RECEIPT_NO_COL, row); String receiptNumber = ImportHandlerUtils.readAsString(TransactionConstants.RECEIPT_NO_COL, row);
String bankNumber = ImportHandlerUtils.readAsString(TransactionConstants.BANK_NO_COL, row); String bankNumber = ImportHandlerUtils.readAsString(TransactionConstants.BANK_NO_COL, row);
String note = ImportHandlerUtils.readAsString(TransactionConstants.NOTE_COL, row);
return SavingsAccountTransactionData.importInstance(amount, transactionDate, paymentTypeId, accountNumber, checkNumber, routingCode, return SavingsAccountTransactionData.importInstance(amount, transactionDate, paymentTypeId, accountNumber, checkNumber, routingCode,
receiptNumber, bankNumber, savingsAccountId, savingsAccountTransactionEnumData, row.getRowNum(), locale, dateFormat); receiptNumber, bankNumber, note, savingsAccountId, savingsAccountTransactionEnumData, row.getRowNum(), locale, dateFormat);
} }
@@ -244,11 +244,20 @@ public class GroupImportHandler implements ImportHandler {
gsonBuilder.registerTypeAdapter(LocalDate.class, new DateSerializer(dateFormat, meetings.get(rowIndex).getLocale())); gsonBuilder.registerTypeAdapter(LocalDate.class, new DateSerializer(dateFormat, meetings.get(rowIndex).getLocale()));
gsonBuilder.registerTypeAdapter(EnumOptionData.class, new EnumOptionDataValueSerializer()); gsonBuilder.registerTypeAdapter(EnumOptionData.class, new EnumOptionDataValueSerializer());
CalendarData modifiedCalendarData = new CalendarData(calendarData.getTitle(), calendarData.getDescription(), String payload;
calendarData.getStartDate(), calendarData.isRepeating(), calendarData.getFrequency(), calendarData.getInterval(), CalendarData modifiedCalendarData;
calendarData.getRepeatsOnDay(), calendarData.getDateFormat(), calendarData.getLocale(), calendarData.getTypeId()); if (calendarData.isRepeating() == false) {
modifiedCalendarData = new CalendarData(calendarData.getTitle(), calendarData.getDescription(), calendarData.getStartDate(),
calendarData.isRepeating(), null, calendarData.getInterval(), calendarData.getRepeatsOnDay(),
calendarData.getDateFormat(), calendarData.getLocale(), calendarData.getTypeId());
String payload = gsonBuilder.create().toJson(modifiedCalendarData); } else {
modifiedCalendarData = new CalendarData(calendarData.getTitle(), calendarData.getDescription(), calendarData.getStartDate(),
calendarData.isRepeating(), calendarData.getFrequency(), calendarData.getInterval(), calendarData.getRepeatsOnDay(),
calendarData.getDateFormat(), calendarData.getLocale(), calendarData.getTypeId());
}
payload = gsonBuilder.create().toJson(modifiedCalendarData);
CommandWrapper commandWrapper = new CommandWrapper(result.getOfficeId(), result.getGroupId(), result.getClientId(), CommandWrapper commandWrapper = new CommandWrapper(result.getOfficeId(), result.getGroupId(), result.getClientId(),
result.getLoanId(), result.getSavingsId(), null, null, null, null, null, payload, result.getTransactionId(), result.getLoanId(), result.getSavingsId(), null, null, null, null, null, payload, result.getTransactionId(),
@@ -106,8 +106,9 @@ public class RecurringDepositTransactionImportHandler implements ImportHandler {
String routingCode = ImportHandlerUtils.readAsString(TransactionConstants.ROUTING_CODE_COL, row); String routingCode = ImportHandlerUtils.readAsString(TransactionConstants.ROUTING_CODE_COL, row);
String receiptNumber = ImportHandlerUtils.readAsString(TransactionConstants.RECEIPT_NO_COL, row); String receiptNumber = ImportHandlerUtils.readAsString(TransactionConstants.RECEIPT_NO_COL, row);
String bankNumber = ImportHandlerUtils.readAsString(TransactionConstants.BANK_NO_COL, row); String bankNumber = ImportHandlerUtils.readAsString(TransactionConstants.BANK_NO_COL, row);
String note = ImportHandlerUtils.readAsString(TransactionConstants.NOTE_COL, row);
return SavingsAccountTransactionData.importInstance(amount, transactionDate, paymentTypeId, accountNumber, checkNumber, routingCode, return SavingsAccountTransactionData.importInstance(amount, transactionDate, paymentTypeId, accountNumber, checkNumber, routingCode,
receiptNumber, bankNumber, savingsAccountId, savingsAccountTransactionEnumData, row.getRowNum(), locale, dateFormat); receiptNumber, bankNumber, note, savingsAccountId, savingsAccountTransactionEnumData, row.getRowNum(), locale, dateFormat);
} }
@@ -109,8 +109,9 @@ public class SavingsTransactionImportHandler implements ImportHandler {
String routingCode = ImportHandlerUtils.readAsString(TransactionConstants.ROUTING_CODE_COL, row); String routingCode = ImportHandlerUtils.readAsString(TransactionConstants.ROUTING_CODE_COL, row);
String receiptNumber = ImportHandlerUtils.readAsString(TransactionConstants.RECEIPT_NO_COL, row); String receiptNumber = ImportHandlerUtils.readAsString(TransactionConstants.RECEIPT_NO_COL, row);
String bankNumber = ImportHandlerUtils.readAsString(TransactionConstants.BANK_NO_COL, row); String bankNumber = ImportHandlerUtils.readAsString(TransactionConstants.BANK_NO_COL, row);
String note = ImportHandlerUtils.readAsString(TransactionConstants.NOTE_COL, row);
return SavingsAccountTransactionData.importInstance(amount, transactionDate, paymentTypeId, accountNumber, checkNumber, routingCode, return SavingsAccountTransactionData.importInstance(amount, transactionDate, paymentTypeId, accountNumber, checkNumber, routingCode,
receiptNumber, bankNumber, savingsAccountId, savingsAccountTransactionEnumData, row.getRowNum(), locale, dateFormat); receiptNumber, bankNumber, note, savingsAccountId, savingsAccountTransactionEnumData, row.getRowNum(), locale, dateFormat);
} }
@@ -217,16 +217,32 @@ public class ChartOfAccountsWorkbook extends AbstractWorkbookPopulator {
List<String> accountNameAndTagAr = Splitter.on('-').splitToList(accountNameandTag); List<String> accountNameAndTagAr = Splitter.on('-').splitToList(accountNameandTag);
writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_NAME_COL, row, accountNameAndTagAr.get(0)); writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_NAME_COL, row, accountNameAndTagAr.get(0));
writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_ID_COL, row, accountNameAndTagAr.get(1)); writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_ID_COL, row, accountNameAndTagAr.get(1));
writeString(ChartOfAcountsConstants.LOOKUP_TAG_COL, row, accountNameAndTagAr.get(2)); if (accountNameAndTagAr.get(2).equals("null")) {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_ID_COL, row, accountNameAndTagAr.get(3)); writeString(ChartOfAcountsConstants.LOOKUP_TAG_COL, row, "");
} else {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_COL, row, accountNameAndTagAr.get(2));
}
if (accountNameAndTagAr.get(3).equals("0")) {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_ID_COL, row, "");
} else {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_ID_COL, row, accountNameAndTagAr.get(3));
}
rowIndex++; rowIndex++;
} else { } else {
row = chartOfAccountsSheet.createRow(rowIndex); row = chartOfAccountsSheet.createRow(rowIndex);
List<String> accountNameAndTagAr = Splitter.on('-').splitToList(accountNameandTag); List<String> accountNameAndTagAr = Splitter.on('-').splitToList(accountNameandTag);
writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_NAME_COL, row, accountNameAndTagAr.get(0)); writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_NAME_COL, row, accountNameAndTagAr.get(0));
writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_ID_COL, row, accountNameAndTagAr.get(1)); writeString(ChartOfAcountsConstants.LOOKUP_ACCOUNT_ID_COL, row, accountNameAndTagAr.get(1));
writeString(ChartOfAcountsConstants.LOOKUP_TAG_COL, row, accountNameAndTagAr.get(2)); if (accountNameAndTagAr.get(2).equals("null")) {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_ID_COL, row, accountNameAndTagAr.get(3)); writeString(ChartOfAcountsConstants.LOOKUP_TAG_COL, row, "");
} else {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_COL, row, accountNameAndTagAr.get(2));
}
if (accountNameAndTagAr.get(3).equals("0")) {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_ID_COL, row, "");
} else {
writeString(ChartOfAcountsConstants.LOOKUP_TAG_ID_COL, row, accountNameAndTagAr.get(3));
}
rowIndex++; rowIndex++;
} }
} }
@@ -94,6 +94,8 @@ public class ClientEntityWorkbookPopulator extends AbstractWorkbookPopulator {
setFormatActivationAndSubmittedDate(row, ClientEntityConstants.ACTIVATION_DATE_COL, dateCellStyle); setFormatActivationAndSubmittedDate(row, ClientEntityConstants.ACTIVATION_DATE_COL, dateCellStyle);
setFormatActivationAndSubmittedDate(row, ClientEntityConstants.SUBMITTED_ON_COL, dateCellStyle); setFormatActivationAndSubmittedDate(row, ClientEntityConstants.SUBMITTED_ON_COL, dateCellStyle);
setFormatActivationAndSubmittedDate(row, ClientEntityConstants.INCOPORATION_VALID_TILL_COL, dateCellStyle);
setFormatActivationAndSubmittedDate(row, ClientEntityConstants.INCOPORATION_DATE_COL, dateCellStyle);
} }
} }
@@ -221,7 +223,7 @@ public class ClientEntityWorkbookPopulator extends AbstractWorkbookPopulator {
writeString(ClientEntityConstants.CLIENT_CLASSIFICATION_COL, rowHeader, "Client Classification "); writeString(ClientEntityConstants.CLIENT_CLASSIFICATION_COL, rowHeader, "Client Classification ");
writeString(ClientEntityConstants.INCOPORATION_NUMBER_COL, rowHeader, "Incorporation Number"); writeString(ClientEntityConstants.INCOPORATION_NUMBER_COL, rowHeader, "Incorporation Number");
writeString(ClientEntityConstants.MAIN_BUSINESS_LINE, rowHeader, "Main Business Line"); writeString(ClientEntityConstants.MAIN_BUSINESS_LINE, rowHeader, "Main Business Line");
writeString(ClientEntityConstants.CONSTITUTION_COL, rowHeader, "Constitution"); writeString(ClientEntityConstants.CONSTITUTION_COL, rowHeader, "Constitution*");
writeString(ClientEntityConstants.REMARKS_COL, rowHeader, "Remarks"); writeString(ClientEntityConstants.REMARKS_COL, rowHeader, "Remarks");
writeString(ClientEntityConstants.EXTERNAL_ID_COL, rowHeader, "External ID "); writeString(ClientEntityConstants.EXTERNAL_ID_COL, rowHeader, "External ID ");
writeString(ClientEntityConstants.SUBMITTED_ON_COL, rowHeader, "Submitted On Date"); writeString(ClientEntityConstants.SUBMITTED_ON_COL, rowHeader, "Submitted On Date");
@@ -32,7 +32,10 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
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;
import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.DataValidation; import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint; import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper; import org.apache.poi.ss.usermodel.DataValidationHelper;
@@ -68,6 +71,7 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
populateSavingsTable(savingsTransactionSheet, dateFormat); populateSavingsTable(savingsTransactionSheet, dateFormat);
setRules(savingsTransactionSheet, dateFormat); setRules(savingsTransactionSheet, dateFormat);
setDefaults(savingsTransactionSheet); setDefaults(savingsTransactionSheet);
setTextFormatStyle(workbook, savingsTransactionSheet, TransactionConstants.SAVINGS_ACCOUNT_NO_COL);
} }
private void setDefaults(Sheet worksheet) { private void setDefaults(Sheet worksheet) {
@@ -77,11 +81,33 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
row = worksheet.createRow(rowNo); row = worksheet.createRow(rowNo);
} }
writeFormula(TransactionConstants.PRODUCT_COL, row, writeFormula(TransactionConstants.PRODUCT_COL, row,
"IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE)),\"\",VLOOKUP($C" "IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$R$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE)),\"\",VLOOKUP($C"
+ (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE))"); + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",2,FALSE))");
writeFormula(TransactionConstants.OPENING_BALANCE_COL, row, writeFormula(TransactionConstants.OPENING_BALANCE_COL, row,
"IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",3,FALSE)),\"\",VLOOKUP($C" "IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",3,FALSE)),\"\",VLOOKUP($C"
+ (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",3,FALSE))"); + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",3,FALSE))");
}
}
private void setTextFormatStyle(Workbook workbook, Sheet worksheet, int... textCols) {
CellStyle textCellStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
short textFmt = createHelper.createDataFormat().getFormat("@");
textCellStyle.setDataFormat(textFmt);
for (int rowIndex = 1; rowIndex < SpreadsheetVersion.EXCEL97.getMaxRows(); rowIndex++) {
Row row = worksheet.getRow(rowIndex);
if (row == null) {
row = worksheet.createRow(rowIndex);
}
for (int col : textCols) {
Cell cell = row.getCell(col);
if (cell == null) {
cell = row.createCell(col);
}
cell.setCellType(CellType.STRING);
cell.setCellStyle(textCellStyle);
}
} }
} }
@@ -113,7 +139,7 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes"); DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint( DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN, DataValidationConstraint.OperatorType.BETWEEN,
"=DATEVALUE(VLOOKUP($C1,$Q$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat); "=DATEVALUE(VLOOKUP($C1,$R$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange); DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange); DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
@@ -179,8 +205,8 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
for (int j = 0; j < clientsWithActiveSavings.size(); j++) { for (int j = 0; j < clientsWithActiveSavings.size(); j++) {
Name name = savingsTransactionWorkbook.createName(); Name name = savingsTransactionWorkbook.createName();
setSanitized(name, "Account_" + clientsWithActiveSavings.get(j) + "_" + clientIdsWithActiveSavings.get(j) + "_"); setSanitized(name, "Account_" + clientsWithActiveSavings.get(j) + "_" + clientIdsWithActiveSavings.get(j) + "_");
name.setRefersToFormula(TemplatePopulateImportConstants.FIXED_DEPOSIT_TRANSACTION_SHEET_NAME + "!$Q$" name.setRefersToFormula(TemplatePopulateImportConstants.FIXED_DEPOSIT_TRANSACTION_SHEET_NAME + "!$R$"
+ clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[0] + ":$Q$" + clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[0] + ":$R$"
+ clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[1]); + clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[1]);
} }
@@ -233,6 +259,7 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
worksheet.setColumnWidth(TransactionConstants.RECEIPT_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.RECEIPT_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.ROUTING_CODE_COL, 3000); worksheet.setColumnWidth(TransactionConstants.ROUTING_CODE_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.BANK_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.BANK_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.NOTE_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_CLIENT_NAME_COL, 5000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_CLIENT_NAME_COL, 5000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_PRODUCT_COL, 3000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_PRODUCT_COL, 3000);
@@ -252,6 +279,7 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
writeString(TransactionConstants.RECEIPT_NO_COL, rowHeader, "Receipt No"); writeString(TransactionConstants.RECEIPT_NO_COL, rowHeader, "Receipt No");
writeString(TransactionConstants.ROUTING_CODE_COL, rowHeader, "Routing Code"); writeString(TransactionConstants.ROUTING_CODE_COL, rowHeader, "Routing Code");
writeString(TransactionConstants.BANK_NO_COL, rowHeader, "Bank No"); writeString(TransactionConstants.BANK_NO_COL, rowHeader, "Bank No");
writeString(TransactionConstants.NOTE_COL, rowHeader, "Note");
writeString(TransactionConstants.LOOKUP_CLIENT_NAME_COL, rowHeader, "Lookup Client"); writeString(TransactionConstants.LOOKUP_CLIENT_NAME_COL, rowHeader, "Lookup Client");
writeString(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, rowHeader, "Lookup Account"); writeString(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, rowHeader, "Lookup Account");
writeString(TransactionConstants.LOOKUP_PRODUCT_COL, rowHeader, "Lookup Product"); writeString(TransactionConstants.LOOKUP_PRODUCT_COL, rowHeader, "Lookup Product");
@@ -207,7 +207,7 @@ public class GroupsWorkbookPopulator extends AbstractWorkbookPopulator {
DataValidationConstraint submittedOnDateConstraint = validationHelper DataValidationConstraint submittedOnDateConstraint = validationHelper
.createDateConstraint(DataValidationConstraint.OperatorType.LESS_OR_EQUAL, "=TODAY()", null, dateFormat); .createDateConstraint(DataValidationConstraint.OperatorType.LESS_OR_EQUAL, "=TODAY()", null, dateFormat);
DataValidationConstraint meetingStartDateConstraint = validationHelper DataValidationConstraint meetingStartDateConstraint = validationHelper
.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=$G1", "=TODAY()", dateFormat); .createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=$H1", "=TODAY()", dateFormat);
DataValidationConstraint repeatsConstraint = validationHelper.createExplicitListConstraint( DataValidationConstraint repeatsConstraint = validationHelper.createExplicitListConstraint(
new String[] { TemplatePopulateImportConstants.FREQUENCY_DAILY, TemplatePopulateImportConstants.FREQUENCY_WEEKLY, new String[] { TemplatePopulateImportConstants.FREQUENCY_DAILY, TemplatePopulateImportConstants.FREQUENCY_WEEKLY,
TemplatePopulateImportConstants.FREQUENCY_MONTHLY, TemplatePopulateImportConstants.FREQUENCY_YEARLY }); TemplatePopulateImportConstants.FREQUENCY_MONTHLY, TemplatePopulateImportConstants.FREQUENCY_YEARLY });
@@ -261,6 +261,15 @@ public class GroupsWorkbookPopulator extends AbstractWorkbookPopulator {
Name repeatsOnWeekly = centerWorkbook.createName(); Name repeatsOnWeekly = centerWorkbook.createName();
repeatsOnWeekly.setNameName("Weekly_Days"); repeatsOnWeekly.setNameName("Weekly_Days");
repeatsOnWeekly.setRefersToFormula(TemplatePopulateImportConstants.GROUP_SHEET_NAME + "!$IV$2:$IV$8"); repeatsOnWeekly.setRefersToFormula(TemplatePopulateImportConstants.GROUP_SHEET_NAME + "!$IV$2:$IV$8");
Name repeatsOnDaily = centerWorkbook.createName();
repeatsOnDaily.setNameName("Daily_Days");
repeatsOnDaily.setRefersToFormula(TemplatePopulateImportConstants.GROUP_SHEET_NAME + "!$IV$2:$IV$8");
Name repeatOnYearly = centerWorkbook.createName();
repeatOnYearly.setNameName("Yearly_Days");
repeatOnYearly.setRefersToFormula(TemplatePopulateImportConstants.GROUP_SHEET_NAME + "!$IV$2:$IV$8");
Name repeatsOnMonthly = centerWorkbook.createName();
repeatsOnMonthly.setNameName("Monthly_Days");
repeatsOnMonthly.setRefersToFormula(TemplatePopulateImportConstants.GROUP_SHEET_NAME + "!$IV$2:$IV$8");
// Staff Names for each office & center Names for each office // Staff Names for each office & center Names for each office
for (Integer i = 0; i < offices.size(); i++) { for (Integer i = 0; i < offices.size(); i++) {
@@ -32,7 +32,10 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
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;
import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.DataValidation; import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint; import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper; import org.apache.poi.ss.usermodel.DataValidationHelper;
@@ -69,6 +72,7 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
populateSavingsTable(savingsTransactionSheet, dateFormat); populateSavingsTable(savingsTransactionSheet, dateFormat);
setRules(savingsTransactionSheet, dateFormat); setRules(savingsTransactionSheet, dateFormat);
setDefaults(savingsTransactionSheet); setDefaults(savingsTransactionSheet);
setTextFormatStyle(workbook, savingsTransactionSheet, TransactionConstants.SAVINGS_ACCOUNT_NO_COL);
} }
private void setDefaults(Sheet worksheet) { private void setDefaults(Sheet worksheet) {
@@ -78,11 +82,33 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
row = worksheet.createRow(rowNo); row = worksheet.createRow(rowNo);
} }
writeFormula(TransactionConstants.PRODUCT_COL, row, writeFormula(TransactionConstants.PRODUCT_COL, row,
"IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE)),\"\",VLOOKUP($C" "IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$R$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE)),\"\",VLOOKUP($C"
+ (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE))"); + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",2,FALSE))");
writeFormula(TransactionConstants.OPENING_BALANCE_COL, row, writeFormula(TransactionConstants.OPENING_BALANCE_COL, row,
"IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",3,FALSE)),\"\",VLOOKUP($C" "IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",3,FALSE)),\"\",VLOOKUP($C"
+ (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",3,FALSE))"); + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",3,FALSE))");
}
}
private void setTextFormatStyle(Workbook workbook, Sheet worksheet, int... textCols) {
CellStyle textCellStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
short textFmt = createHelper.createDataFormat().getFormat("@");
textCellStyle.setDataFormat(textFmt);
for (int rowIndex = 1; rowIndex < SpreadsheetVersion.EXCEL97.getMaxRows(); rowIndex++) {
Row row = worksheet.getRow(rowIndex);
if (row == null) {
row = worksheet.createRow(rowIndex);
}
for (int col : textCols) {
Cell cell = row.getCell(col);
if (cell == null) {
cell = row.createCell(col);
}
cell.setCellType(CellType.STRING);
cell.setCellStyle(textCellStyle);
}
} }
} }
@@ -114,7 +140,7 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes"); DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint( DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN, DataValidationConstraint.OperatorType.BETWEEN,
"=DATEVALUE(VLOOKUP($C1,$Q$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat); "=DATEVALUE(VLOOKUP($C1,$R$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange); DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange); DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
@@ -180,8 +206,8 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
for (int j = 0; j < clientsWithActiveSavings.size(); j++) { for (int j = 0; j < clientsWithActiveSavings.size(); j++) {
Name name = savingsTransactionWorkbook.createName(); Name name = savingsTransactionWorkbook.createName();
setSanitized(name, "Account_" + clientsWithActiveSavings.get(j) + "_" + clientIdsWithActiveSavings.get(j) + "_"); setSanitized(name, "Account_" + clientsWithActiveSavings.get(j) + "_" + clientIdsWithActiveSavings.get(j) + "_");
name.setRefersToFormula(TemplatePopulateImportConstants.SAVINGS_TRANSACTION_SHEET_NAME + "!$Q$" name.setRefersToFormula(TemplatePopulateImportConstants.SAVINGS_TRANSACTION_SHEET_NAME + "!$R$"
+ clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[0] + ":$Q$" + clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[0] + ":$R$"
+ clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[1]); + clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[1]);
} }
@@ -234,6 +260,7 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
worksheet.setColumnWidth(TransactionConstants.RECEIPT_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.RECEIPT_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.ROUTING_CODE_COL, 3000); worksheet.setColumnWidth(TransactionConstants.ROUTING_CODE_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.BANK_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.BANK_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.NOTE_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_CLIENT_NAME_COL, 5000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_CLIENT_NAME_COL, 5000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_PRODUCT_COL, 3000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_PRODUCT_COL, 3000);
@@ -253,6 +280,7 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
writeString(TransactionConstants.RECEIPT_NO_COL, rowHeader, "Receipt No"); writeString(TransactionConstants.RECEIPT_NO_COL, rowHeader, "Receipt No");
writeString(TransactionConstants.ROUTING_CODE_COL, rowHeader, "Routing Code"); writeString(TransactionConstants.ROUTING_CODE_COL, rowHeader, "Routing Code");
writeString(TransactionConstants.BANK_NO_COL, rowHeader, "Bank No"); writeString(TransactionConstants.BANK_NO_COL, rowHeader, "Bank No");
writeString(TransactionConstants.NOTE_COL, rowHeader, "Note");
writeString(TransactionConstants.LOOKUP_CLIENT_NAME_COL, rowHeader, "Lookup Client"); writeString(TransactionConstants.LOOKUP_CLIENT_NAME_COL, rowHeader, "Lookup Client");
writeString(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, rowHeader, "Lookup Account"); writeString(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, rowHeader, "Lookup Account");
writeString(TransactionConstants.LOOKUP_PRODUCT_COL, rowHeader, "Lookup Product"); writeString(TransactionConstants.LOOKUP_PRODUCT_COL, rowHeader, "Lookup Product");
@@ -32,7 +32,10 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
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;
import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.DataValidation; import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint; import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper; import org.apache.poi.ss.usermodel.DataValidationHelper;
@@ -68,6 +71,7 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
populateSavingsTable(savingsTransactionSheet, dateFormat); populateSavingsTable(savingsTransactionSheet, dateFormat);
setRules(savingsTransactionSheet, dateFormat); setRules(savingsTransactionSheet, dateFormat);
setDefaults(savingsTransactionSheet); setDefaults(savingsTransactionSheet);
setTextFormatStyle(workbook, savingsTransactionSheet, TransactionConstants.SAVINGS_ACCOUNT_NO_COL);
} }
private void setDefaults(Sheet worksheet) { private void setDefaults(Sheet worksheet) {
@@ -77,11 +81,33 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
row = worksheet.createRow(rowNo); row = worksheet.createRow(rowNo);
} }
writeFormula(TransactionConstants.PRODUCT_COL, row, writeFormula(TransactionConstants.PRODUCT_COL, row,
"IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE)),\"\",VLOOKUP($C" "IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$R$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE)),\"\",VLOOKUP($C"
+ (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",2,FALSE))"); + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",2,FALSE))");
writeFormula(TransactionConstants.OPENING_BALANCE_COL, row, writeFormula(TransactionConstants.OPENING_BALANCE_COL, row,
"IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",3,FALSE)),\"\",VLOOKUP($C" "IF(ISERROR(VLOOKUP($C" + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",3,FALSE)),\"\",VLOOKUP($C"
+ (rowNo + 1) + ",$Q$2:$S$" + (savingsAccounts.size() + 1) + ",3,FALSE))"); + (rowNo + 1) + ",$R$2:$T$" + (savingsAccounts.size() + 1) + ",3,FALSE))");
}
}
private void setTextFormatStyle(Workbook workbook, Sheet worksheet, int... textCols) {
CellStyle textCellStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
short textFmt = createHelper.createDataFormat().getFormat("@");
textCellStyle.setDataFormat(textFmt);
for (int rowIndex = 1; rowIndex < SpreadsheetVersion.EXCEL97.getMaxRows(); rowIndex++) {
Row row = worksheet.getRow(rowIndex);
if (row == null) {
row = worksheet.createRow(rowIndex);
}
for (int col : textCols) {
Cell cell = row.getCell(col);
if (cell == null) {
cell = row.createCell(col);
}
cell.setCellType(CellType.STRING);
cell.setCellStyle(textCellStyle);
}
} }
} }
@@ -113,7 +139,7 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes"); DataValidationConstraint paymentTypeConstraint = validationHelper.createFormulaListConstraint("PaymentTypes");
DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint( DataValidationConstraint transactionDateConstraint = validationHelper.createDateConstraint(
DataValidationConstraint.OperatorType.BETWEEN, DataValidationConstraint.OperatorType.BETWEEN,
"=DATEVALUE(VLOOKUP($C1,$Q$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat); "=DATEVALUE(VLOOKUP($C1,$R$2:$T$" + (savingsAccounts.size() + 1) + ",4,FALSE))", "=TODAY()", dateFormat);
DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange); DataValidation officeValidation = validationHelper.createValidation(officeNameConstraint, officeNameRange);
DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange); DataValidation clientValidation = validationHelper.createValidation(clientNameConstraint, clientNameRange);
@@ -179,8 +205,8 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
for (int j = 0; j < clientsWithActiveSavings.size(); j++) { for (int j = 0; j < clientsWithActiveSavings.size(); j++) {
Name name = savingsTransactionWorkbook.createName(); Name name = savingsTransactionWorkbook.createName();
setSanitized(name, "Account_" + clientsWithActiveSavings.get(j) + "_" + clientIdsWithActiveSavings.get(j) + "_"); setSanitized(name, "Account_" + clientsWithActiveSavings.get(j) + "_" + clientIdsWithActiveSavings.get(j) + "_");
name.setRefersToFormula(TemplatePopulateImportConstants.SAVINGS_TRANSACTION_SHEET_NAME + "!$Q$" name.setRefersToFormula(TemplatePopulateImportConstants.SAVINGS_TRANSACTION_SHEET_NAME + "!$R$"
+ clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[0] + ":$Q$" + clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[0] + ":$R$"
+ clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[1]); + clientNameToBeginEndIndexes.get(clientsWithActiveSavings.get(j))[1]);
} }
@@ -235,6 +261,7 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
worksheet.setColumnWidth(TransactionConstants.RECEIPT_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.RECEIPT_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.ROUTING_CODE_COL, 3000); worksheet.setColumnWidth(TransactionConstants.ROUTING_CODE_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.BANK_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.BANK_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.NOTE_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_CLIENT_NAME_COL, 5000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_CLIENT_NAME_COL, 5000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, 3000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, 3000);
worksheet.setColumnWidth(TransactionConstants.LOOKUP_PRODUCT_COL, 3000); worksheet.setColumnWidth(TransactionConstants.LOOKUP_PRODUCT_COL, 3000);
@@ -254,6 +281,7 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
writeString(TransactionConstants.RECEIPT_NO_COL, rowHeader, "Receipt No"); writeString(TransactionConstants.RECEIPT_NO_COL, rowHeader, "Receipt No");
writeString(TransactionConstants.ROUTING_CODE_COL, rowHeader, "Routing Code"); writeString(TransactionConstants.ROUTING_CODE_COL, rowHeader, "Routing Code");
writeString(TransactionConstants.BANK_NO_COL, rowHeader, "Bank No"); writeString(TransactionConstants.BANK_NO_COL, rowHeader, "Bank No");
writeString(TransactionConstants.NOTE_COL, rowHeader, "Note");
writeString(TransactionConstants.LOOKUP_CLIENT_NAME_COL, rowHeader, "Lookup Client"); writeString(TransactionConstants.LOOKUP_CLIENT_NAME_COL, rowHeader, "Lookup Client");
writeString(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, rowHeader, "Lookup Account"); writeString(TransactionConstants.LOOKUP_ACCOUNT_NO_COL, rowHeader, "Lookup Account");
writeString(TransactionConstants.LOOKUP_PRODUCT_COL, rowHeader, "Lookup Product"); writeString(TransactionConstants.LOOKUP_PRODUCT_COL, rowHeader, "Lookup Product");
@@ -31,6 +31,7 @@ import org.apache.fineract.portfolio.savings.data.SavingsProductData;
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;
import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataValidation; import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint; import org.apache.poi.ss.usermodel.DataValidationConstraint;
@@ -158,6 +159,7 @@ public class SavingsWorkbookPopulator extends AbstractWorkbookPopulator {
dateCellStyle.setDataFormat(df); dateCellStyle.setDataFormat(df);
for (Integer rowNo = 1; rowNo < 1000; rowNo++) { for (Integer rowNo = 1; rowNo < 1000; rowNo++) {
Row row = worksheet.createRow(rowNo); Row row = worksheet.createRow(rowNo);
setFormatStyle(worksheet, row);
writeFormula(SavingsConstants.CURRENCY_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"Currency_\",$D" + (rowNo + 1) writeFormula(SavingsConstants.CURRENCY_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"Currency_\",$D" + (rowNo + 1)
+ "))),\"\",INDIRECT(CONCATENATE(\"Currency_\",$D" + (rowNo + 1) + ")))"); + "))),\"\",INDIRECT(CONCATENATE(\"Currency_\",$D" + (rowNo + 1) + ")))");
writeFormula(SavingsConstants.DECIMAL_PLACES_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"Decimal_Places_\",$D" + (rowNo + 1) writeFormula(SavingsConstants.DECIMAL_PLACES_COL, row, "IF(ISERROR(INDIRECT(CONCATENATE(\"Decimal_Places_\",$D" + (rowNo + 1)
@@ -190,6 +192,18 @@ public class SavingsWorkbookPopulator extends AbstractWorkbookPopulator {
} }
} }
private void setFormatStyle(Sheet worksheet, Row row) {
Workbook workbook = worksheet.getWorkbook();
CellStyle dateCellStyle = workbook.createCellStyle();
short df = workbook.createDataFormat().getFormat("dd/MM/yyyy");
dateCellStyle.setDataFormat(df);
Cell submittedOnCell = row.getCell(SavingsConstants.SUBMITTED_ON_DATE_COL);
if (submittedOnCell == null) {
submittedOnCell = row.createCell(SavingsConstants.SUBMITTED_ON_DATE_COL);
}
submittedOnCell.setCellStyle(dateCellStyle);
}
private void setRules(Sheet worksheet, String dateFormat) { private void setRules(Sheet worksheet, String dateFormat) {
CellRangeAddressList officeNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(), CellRangeAddressList officeNameRange = new CellRangeAddressList(1, SpreadsheetVersion.EXCEL97.getLastRowIndex(),
SavingsConstants.OFFICE_NAME_COL, SavingsConstants.OFFICE_NAME_COL); SavingsConstants.OFFICE_NAME_COL, SavingsConstants.OFFICE_NAME_COL);
@@ -265,8 +265,8 @@ public final class ClientDataValidator {
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.constitutionIdParamName, element)) { if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.constitutionIdParamName, element)) {
final Integer constitution = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.constitutionIdParamName, final Integer constitution = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.constitutionIdParamName,
element); element);
baseDataValidator.reset().parameter(ClientApiConstants.constitutionIdParamName).value(constitution).ignoreIfNull() baseDataValidator.reset().parameter(ClientApiConstants.constitutionIdParamName).value(constitution).integerGreaterThanZero()
.integerGreaterThanZero(); .notBlank();
} }
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.mainBusinessLineIdParamName, element)) { if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.mainBusinessLineIdParamName, element)) {
@@ -561,8 +561,8 @@ public final class ClientDataValidator {
atLeastOneParameterPassedForUpdate = true; atLeastOneParameterPassedForUpdate = true;
final Integer constitutionId = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.constitutionIdParamName, final Integer constitutionId = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(ClientApiConstants.constitutionIdParamName,
element); element);
baseDataValidator.reset().parameter(ClientApiConstants.constitutionIdParamName).value(constitutionId).ignoreIfNull() baseDataValidator.reset().parameter(ClientApiConstants.constitutionIdParamName).value(constitutionId).integerGreaterThanZero()
.integerGreaterThanZero(); .notBlank();
} }
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.mainBusinessLineIdParamName, element)) { if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.mainBusinessLineIdParamName, element)) {
@@ -66,7 +66,8 @@ public class DepositAccountTransactionDataValidator {
transactionAmountParamName, paymentTypeIdParamName, transactionAccountNumberParamName, checkNumberParamName, transactionAmountParamName, paymentTypeIdParamName, transactionAccountNumberParamName, checkNumberParamName,
routingCodeParamName, receiptNumberParamName, bankNumberParamName, DepositsApiConstants.amountParamName, routingCodeParamName, receiptNumberParamName, bankNumberParamName, DepositsApiConstants.amountParamName,
DepositsApiConstants.accountIdParamName, DepositsApiConstants.dateParamName, DepositsApiConstants.submittedOnDateParamName, DepositsApiConstants.accountIdParamName, DepositsApiConstants.dateParamName, DepositsApiConstants.submittedOnDateParamName,
DepositsApiConstants.lienTransaction, DepositsApiConstants.isManualTransaction, DepositsApiConstants.chargesPaidByData)); DepositsApiConstants.lienTransaction, DepositsApiConstants.isManualTransaction, DepositsApiConstants.chargesPaidByData,
DepositsApiConstants.accountNoParamName, DepositsApiConstants.noteParamName));
private static final Set<String> DEPOSIT_ACCOUNT_RECOMMENDED_DEPOSIT_AMOUNT_UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<>( private static final Set<String> DEPOSIT_ACCOUNT_RECOMMENDED_DEPOSIT_AMOUNT_UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<>(
Arrays.asList(DepositsApiConstants.localeParamName, DepositsApiConstants.dateFormatParamName, Arrays.asList(DepositsApiConstants.localeParamName, DepositsApiConstants.dateFormatParamName,
@@ -50,7 +50,7 @@ public class SavingsAccountConstant extends SavingsApiConstants {
dateFormatParamName, transactionDateParamName, transactionAmountParamName, paymentTypeIdParamName, dateFormatParamName, transactionDateParamName, transactionAmountParamName, paymentTypeIdParamName,
transactionAccountNumberParamName, checkNumberParamName, routingCodeParamName, receiptNumberParamName, bankNumberParamName, transactionAccountNumberParamName, checkNumberParamName, routingCodeParamName, receiptNumberParamName, bankNumberParamName,
retailEntriesParamName, childAccountIdParamName, noteParamName, amountParamName, dateParamName, isManualTransaction, retailEntriesParamName, childAccountIdParamName, noteParamName, amountParamName, dateParamName, isManualTransaction,
lienTransaction, chargesPaidByData, submittedOnDateParamName, accountIdParamName)); lienTransaction, chargesPaidByData, submittedOnDateParamName, accountIdParamName, accountNoParamName));
protected static final Set<String> SAVINGS_ACCOUNT_TRANSACTION_RESPONSE_DATA_PARAMETERS = new HashSet<>( protected static final Set<String> SAVINGS_ACCOUNT_TRANSACTION_RESPONSE_DATA_PARAMETERS = new HashSet<>(
Arrays.asList(idParamName, accountNoParamName)); Arrays.asList(idParamName, accountNoParamName));
@@ -186,7 +186,7 @@ public class SavingsAccountDataValidator {
if (lockinPeriodFrequency != null) { if (lockinPeriodFrequency != null) {
final Integer lockinPeriodFrequencyType = this.fromApiJsonHelper final Integer lockinPeriodFrequencyType = this.fromApiJsonHelper
.extractIntegerSansLocaleNamed(lockinPeriodFrequencyTypeParamName, element); .extractIntegerSansLocaleNamed(lockinPeriodFrequencyTypeParamName, element);
baseDataValidator.reset().parameter(lockinPeriodFrequencyTypeParamName).value(lockinPeriodFrequencyType).notNull() baseDataValidator.reset().parameter(lockinPeriodFrequencyTypeParamName).value(lockinPeriodFrequencyType).ignoreIfNull()
.inMinMaxRange(0, 3); .inMinMaxRange(0, 3);
} }
} }