http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/ExtrasSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/ExtrasSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/ExtrasSheetPopulator.java new file mode 100644 index 0000000..e97eb7a --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/ExtrasSheetPopulator.java @@ -0,0 +1,116 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.organisation.monetary.data.CurrencyData; +import org.apache.fineract.portfolio.fund.data.FundData; +import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + +public class ExtrasSheetPopulator extends AbstractWorkbookPopulator { + + private List<FundData> funds; + private List<PaymentTypeData> paymentTypes; + private List<CurrencyData> currencies; + + private static final int FUND_ID_COL = 0; + private static final int FUND_NAME_COL = 1; + private static final int PAYMENT_TYPE_ID_COL = 2; + private static final int PAYMENT_TYPE_NAME_COL = 3; + private static final int CURRENCY_CODE_COL = 4; + private static final int CURRENCY_NAME_COL = 5; + + + public ExtrasSheetPopulator(List<FundData> funds, List<PaymentTypeData> paymentTypes, + List<CurrencyData> currencies) { + this.funds = funds; + this.paymentTypes = paymentTypes; + this.currencies = currencies; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + int fundRowIndex = 1; + Sheet extrasSheet = workbook.createSheet(TemplatePopulateImportConstants.EXTRAS_SHEET_NAME); + setLayout(extrasSheet); + for (FundData fund : funds) { + Row row = extrasSheet.createRow(fundRowIndex++); + writeLong(FUND_ID_COL, row, fund.getId()); + writeString(FUND_NAME_COL, row, fund.getName()); + } + int paymentTypeRowIndex = 1; + for (PaymentTypeData paymentType : paymentTypes) { + Row row; + if (paymentTypeRowIndex < fundRowIndex) + row = extrasSheet.getRow(paymentTypeRowIndex++); + else + row = extrasSheet.createRow(paymentTypeRowIndex++); + writeLong(PAYMENT_TYPE_ID_COL, row, paymentType.getId()); + writeString(PAYMENT_TYPE_NAME_COL, row, paymentType.getName().trim().replaceAll("[ )(]", "_")); + } + int currencyCodeRowIndex = 1; + for (CurrencyData currencies : currencies) { + Row row; + if (currencyCodeRowIndex < paymentTypeRowIndex) + row = extrasSheet.getRow(currencyCodeRowIndex++); + else + row = extrasSheet.createRow(currencyCodeRowIndex++); + + writeString(CURRENCY_NAME_COL, row, currencies.getName().trim().replaceAll("[ )(]", "_")); + writeString(CURRENCY_CODE_COL, row, currencies.code()); + } + extrasSheet.protectSheet(""); + + } + + private void setLayout(Sheet worksheet) { + worksheet.setColumnWidth(FUND_ID_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(FUND_NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(PAYMENT_TYPE_ID_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(PAYMENT_TYPE_NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(CURRENCY_NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(CURRENCY_CODE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + writeString(FUND_ID_COL, rowHeader, "Fund ID"); + writeString(FUND_NAME_COL, rowHeader, "Name"); + writeString(PAYMENT_TYPE_ID_COL, rowHeader, "Payment Type ID"); + writeString(PAYMENT_TYPE_NAME_COL, rowHeader, "Payment Type Name"); + writeString(CURRENCY_NAME_COL, rowHeader, "Currency Type "); + writeString(CURRENCY_CODE_COL, rowHeader, "Currency Code "); + } + public Integer getFundsSize() { + return funds.size(); + } + public Integer getPaymentTypesSize() { + return paymentTypes.size(); + } + + public Integer getCurrenciesSize() { + return currencies.size(); + } + + + +} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/FixedDepositProductSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/FixedDepositProductSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/FixedDepositProductSheetPopulator.java new file mode 100644 index 0000000..0e2185b --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/FixedDepositProductSheetPopulator.java @@ -0,0 +1,173 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.organisation.monetary.data.CurrencyData; +import org.apache.fineract.portfolio.savings.data.FixedDepositProductData; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + +public class FixedDepositProductSheetPopulator extends AbstractWorkbookPopulator { + List<FixedDepositProductData> products; + + private static final int ID_COL = 0; + private static final int NAME_COL = 1; + private static final int SHORT_NAME_COL = 2; + private static final int NOMINAL_ANNUAL_INTEREST_RATE_COL = 3; + private static final int INTEREST_COMPOUNDING_PERIOD_COL = 4; + private static final int INTEREST_POSTING_PERIOD_COL = 5; + private static final int INTEREST_CALCULATION_COL = 6; + private static final int INTEREST_CALCULATION_DAYS_IN_YEAR_COL = 7; + private static final int LOCKIN_PERIOD_COL = 8; + private static final int LOCKIN_PERIOD_FREQUENCY_COL = 9; + private static final int CURRENCY_COL = 10; + private static final int MIN_DEPOSIT_COL = 11; + private static final int MAX_DEPOSIT_COL = 12; + private static final int DEPOSIT_COL = 13; + private static final int MIN_DEPOSIT_TERM_COL = 14; + private static final int MIN_DEPOSIT_TERM_TYPE_COL = 15; + private static final int MAX_DEPOSIT_TERM_COL = 16; + private static final int MAX_DEPOSIT_TERM_TYPE_COL = 17; + private static final int PRECLOSURE_PENAL_APPLICABLE_COL = 18; + private static final int PRECLOSURE_PENAL_INTEREST_COL = 19; + private static final int PRECLOSURE_INTEREST_TYPE_COL = 20; + private static final int IN_MULTIPLES_OF_DEPOSIT_TERM_COL = 21; + private static final int IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL = 22; + + public FixedDepositProductSheetPopulator(List<FixedDepositProductData> fixedDepositProducts) { + this.products =fixedDepositProducts; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + int rowIndex = 1; + Sheet productSheet = workbook.createSheet(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME); + setLayout(productSheet); + CellStyle dateCellStyle = workbook.createCellStyle(); + short df = workbook.createDataFormat().getFormat(dateFormat); + dateCellStyle.setDataFormat(df); + for(FixedDepositProductData product : products) { + Row row = productSheet.createRow(rowIndex++); + writeLong(ID_COL, row, product.getId()); + writeString(NAME_COL, row, product.getName().trim().replaceAll("[ )(]", "_")); + writeString(SHORT_NAME_COL, row, product.getShortName().trim().replaceAll("[ )(]", "_")); + writeBigDecimal(NOMINAL_ANNUAL_INTEREST_RATE_COL, row, product.getNominalAnnualInterestRate()); + writeString(INTEREST_COMPOUNDING_PERIOD_COL, row, product.getInterestCompoundingPeriodType().getValue()); + writeString(INTEREST_POSTING_PERIOD_COL, row, product.getInterestPostingPeriodType().getValue()); + writeString(INTEREST_CALCULATION_COL, row, product.getInterestCalculationType().getValue()); + writeString(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, row, product.getInterestCalculationDaysInYearType().getValue()); + + writeBoolean(PRECLOSURE_PENAL_APPLICABLE_COL, row, product.isPreClosurePenalApplicable()); + writeInt(MIN_DEPOSIT_TERM_COL, row, product.getMinDepositTerm()); + writeString(MIN_DEPOSIT_TERM_TYPE_COL, row, product.getMinDepositTermType().getValue()); + + if(product.getMinDepositAmount() != null) + writeBigDecimal(MIN_DEPOSIT_COL, row, product.getMinDepositAmount()); + if(product.getMaxDepositAmount() != null) + writeBigDecimal(MAX_DEPOSIT_COL, row, product.getMaxDepositAmount()); + if(product.getDepositAmount() != null) + writeBigDecimal(DEPOSIT_COL, row, product.getDepositAmount()); + if(product.getMaxDepositTerm() != null) + writeInt(MAX_DEPOSIT_TERM_COL, row, product.getMaxDepositTerm()); + if(product.getInMultiplesOfDepositTerm() != null) + writeInt(IN_MULTIPLES_OF_DEPOSIT_TERM_COL, row, product.getInMultiplesOfDepositTerm()); + if(product.getPreClosurePenalInterest() != null) + writeBigDecimal(PRECLOSURE_PENAL_INTEREST_COL, row, product.getPreClosurePenalInterest()); + if(product.getMaxDepositTermType() != null) + writeString(MAX_DEPOSIT_TERM_TYPE_COL, row, product.getMaxDepositTermType().getValue()); + if(product.getPreClosurePenalInterestOnType() != null) + writeString(PRECLOSURE_INTEREST_TYPE_COL, row, product.getPreClosurePenalInterestOnType().getValue()); + if(product.getInMultiplesOfDepositTermType() != null) + writeString(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL, row, product.getInMultiplesOfDepositTermType().getValue()); + + if(product.getLockinPeriodFrequency() != null) + writeInt(LOCKIN_PERIOD_COL, row, product.getLockinPeriodFrequency()); + if(product.getLockinPeriodFrequencyType() != null) + writeString(LOCKIN_PERIOD_FREQUENCY_COL, row, product.getLockinPeriodFrequencyType().getValue()); + CurrencyData currency = product.getCurrency(); + writeString(CURRENCY_COL, row, currency.code()); + } + productSheet.protectSheet(""); + } + + private void setLayout(Sheet worksheet) { + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + worksheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(SHORT_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(NOMINAL_ANNUAL_INTEREST_RATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_COMPOUNDING_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_POSTING_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_CALCULATION_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(LOCKIN_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(LOCKIN_PERIOD_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(CURRENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_DEPOSIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_DEPOSIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(DEPOSIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_DEPOSIT_TERM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_DEPOSIT_TERM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_DEPOSIT_TERM_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_DEPOSIT_TERM_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(PRECLOSURE_PENAL_APPLICABLE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(PRECLOSURE_PENAL_INTEREST_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(PRECLOSURE_INTEREST_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(IN_MULTIPLES_OF_DEPOSIT_TERM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + + writeString(ID_COL, rowHeader, "ID"); + writeString(NAME_COL, rowHeader, "Name"); + writeString(SHORT_NAME_COL, rowHeader, "Short Name"); + writeString(NOMINAL_ANNUAL_INTEREST_RATE_COL, rowHeader, "Interest"); + writeString(INTEREST_COMPOUNDING_PERIOD_COL, rowHeader, "Interest Compounding Period"); + writeString(INTEREST_POSTING_PERIOD_COL, rowHeader, "Interest Posting Period"); + writeString(INTEREST_CALCULATION_COL, rowHeader, "Interest Calculated Using"); + writeString(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, rowHeader, "# Days In Year"); + writeString(LOCKIN_PERIOD_COL, rowHeader, "Locked In For"); + writeString(LOCKIN_PERIOD_FREQUENCY_COL, rowHeader, "Frequency"); + writeString(CURRENCY_COL, rowHeader, "Currency"); + writeString(MIN_DEPOSIT_COL, rowHeader, "Min Deposit"); + writeString(MAX_DEPOSIT_COL, rowHeader, "Max Deposit"); + writeString(DEPOSIT_COL, rowHeader, "Deposit"); + writeString(MIN_DEPOSIT_TERM_COL, rowHeader, "Min Deposit Term"); + writeString(MAX_DEPOSIT_TERM_COL, rowHeader, "Max Deposit Term"); + writeString(MIN_DEPOSIT_TERM_TYPE_COL, rowHeader, "Min Deposit Term Type"); + writeString(MAX_DEPOSIT_TERM_TYPE_COL, rowHeader, "Max Deposit Term Type"); + writeString(PRECLOSURE_PENAL_APPLICABLE_COL, rowHeader, "Preclosure Penal Applicable"); + writeString(PRECLOSURE_PENAL_INTEREST_COL, rowHeader, "Penal Interest"); + writeString(PRECLOSURE_INTEREST_TYPE_COL, rowHeader, "Penal Interest Type"); + writeString(IN_MULTIPLES_OF_DEPOSIT_TERM_COL, rowHeader, "Multiples of Deposit Term"); + writeString(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL, rowHeader, "Multiples of Deposit Term Type"); + } + + public List<FixedDepositProductData> getProducts() { + return products; + } + + public Integer getProductsSize() { + return products.size(); + } +} http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GlAccountSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GlAccountSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GlAccountSheetPopulator.java new file mode 100644 index 0000000..04390c1 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GlAccountSheetPopulator.java @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.accounting.glaccount.data.GLAccountData; +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + +public class GlAccountSheetPopulator extends AbstractWorkbookPopulator { + private List<GLAccountData> allGlAccounts; + + private static final int ID_COL = 0; + private static final int ACCOUNT_NAME_COL = 1; + + public GlAccountSheetPopulator(List<GLAccountData> glAccounts) { + this.allGlAccounts = glAccounts; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + int rowIndex = 1; + Sheet glAccountSheet = workbook.createSheet(TemplatePopulateImportConstants.GL_ACCOUNTS_SHEET_NAME); + setLayout(glAccountSheet); + populateglAccounts(glAccountSheet, rowIndex); + glAccountSheet.protectSheet(""); + + } + + private void setLayout(Sheet worksheet) { + worksheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(ACCOUNT_NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + writeString(ID_COL, rowHeader, "Gl Account ID"); + writeString(ACCOUNT_NAME_COL, rowHeader, "Gl Account Name"); + } + + private void populateglAccounts(Sheet GlAccountSheet, int rowIndex) { + for (GLAccountData glAccount : allGlAccounts) { + Row row = GlAccountSheet.createRow(rowIndex); + writeLong(ID_COL, row, glAccount.getId()); + writeString(ACCOUNT_NAME_COL, row, glAccount.getName().trim().replaceAll("[ )(]", "_")); + rowIndex++; + } + } + + public Integer getGlAccountNamesSize() { + return allGlAccounts.size(); + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GroupSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GroupSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GroupSheetPopulator.java new file mode 100644 index 0000000..4d6e1b3 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/GroupSheetPopulator.java @@ -0,0 +1,126 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.organisation.office.data.OfficeData; +import org.apache.fineract.portfolio.group.data.GroupGeneralData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class GroupSheetPopulator extends AbstractWorkbookPopulator { + private List<GroupGeneralData> groups; + private List<OfficeData> offices; + + private Map<String, ArrayList<String>> officeToGroups; + private Map<Integer, Integer[]> officeNameToBeginEndIndexesOfGroups; + private Map<String,Long> groupNameToGroupId; + + private static final int OFFICE_NAME_COL = 0; + private static final int GROUP_NAME_COL = 1; + private static final int GROUP_ID_COL = 2; + + public GroupSheetPopulator(final List<GroupGeneralData> groups, final List<OfficeData> offices) { + this.groups = groups; + this.offices = offices; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + Sheet groupSheet = workbook.createSheet(TemplatePopulateImportConstants.GROUP_SHEET_NAME); + setLayout(groupSheet); + setGroupNameToGroupIdMap(); + setOfficeToGroupsMap(); + populateGroupsByOfficeName(groupSheet); + groupSheet.protectSheet(""); + } + + private void setLayout(Sheet worksheet) { + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + for (int colIndex = 0; colIndex <= 10; colIndex++) + worksheet.setColumnWidth(colIndex, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + writeString(OFFICE_NAME_COL, rowHeader, "Office Names"); + writeString(GROUP_NAME_COL, rowHeader, "Group Names"); + writeString(GROUP_ID_COL, rowHeader, "Group ID"); + } + + private void setOfficeToGroupsMap() { + officeToGroups = new HashMap<>(); + for (GroupGeneralData group : groups) { + add(group.getOfficeName().trim().replaceAll("[ )(]", "_"), group.getName().trim()); + } + } + //Guava Multi-map can reduce this. + private void add(String key, String value) { + ArrayList<String> values = officeToGroups.get(key); + if (values == null) { + values = new ArrayList<>(); + } + values.add(value); + officeToGroups.put(key, values); + } + private void populateGroupsByOfficeName(Sheet groupSheet) { + int rowIndex = 1, officeIndex = 0, startIndex = 1; + officeNameToBeginEndIndexesOfGroups = new HashMap<>(); + Row row = groupSheet.createRow(rowIndex); + for(OfficeData office : offices) { + startIndex = rowIndex+1; + writeString(OFFICE_NAME_COL, row, office.name()); + ArrayList<String> groupsList = new ArrayList<>(); + + if(officeToGroups.containsKey(office.name().trim().replaceAll("[ )(]", "_"))) + groupsList = officeToGroups.get(office.name().trim().replaceAll("[ )(]", "_")); + + if(!groupsList.isEmpty()) { + for(String groupName : groupsList) { + writeString(GROUP_NAME_COL, row, groupName); + writeLong(GROUP_ID_COL, row, groupNameToGroupId.get(groupName)); + row = groupSheet.createRow(++rowIndex); + } + officeNameToBeginEndIndexesOfGroups.put(officeIndex++, new Integer[]{startIndex, rowIndex}); + } + else { + officeNameToBeginEndIndexesOfGroups.put(officeIndex++, new Integer[]{startIndex, rowIndex+1}); + } + } + } + public List<GroupGeneralData> getGroups() { + return groups; + } + public Integer getGroupsSize() { + return groups.size(); + } + public Map<Integer, Integer[]> getOfficeNameToBeginEndIndexesOfGroups() { + return officeNameToBeginEndIndexesOfGroups; + } + private void setGroupNameToGroupIdMap(){ + groupNameToGroupId=new HashMap<String,Long>(); + for (GroupGeneralData group : groups) { + groupNameToGroupId.put(group.getName().trim(), group.getId()); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/LoanProductSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/LoanProductSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/LoanProductSheetPopulator.java new file mode 100644 index 0000000..93de884 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/LoanProductSheetPopulator.java @@ -0,0 +1,199 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.portfolio.loanproduct.data.LoanProductData; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + + +public class LoanProductSheetPopulator extends AbstractWorkbookPopulator { + + private List<LoanProductData> products; + + private static final int ID_COL = 0; + private static final int NAME_COL = 1; + private static final int FUND_NAME_COL = 2; + private static final int PRINCIPAL_COL = 3; + private static final int MIN_PRINCIPAL_COL = 4; + private static final int MAX_PRINCIPAL_COL = 5; + private static final int NO_OF_REPAYMENTS_COL = 6; + private static final int MIN_REPAYMENTS_COL = 7; + private static final int MAX_REPAYMENTS_COL = 8; + private static final int REPAYMENT_EVERY_COL = 9; + private static final int REPAYMENT_FREQUENCY_COL = 10; + private static final int INTEREST_RATE_COL = 11; + private static final int MIN_INTEREST_RATE_COL = 12; + private static final int MAX_INTEREST_RATE_COL = 13; + private static final int INTEREST_RATE_FREQUENCY_COL = 14; + private static final int AMORTIZATION_TYPE_COL = 15; + private static final int INTEREST_TYPE_COL = 16; + private static final int INTEREST_CALCULATION_PERIOD_TYPE_COL = 17; + private static final int IN_ARREARS_TOLERANCE_COL = 18; + private static final int TRANSACTION_PROCESSING_STRATEGY_NAME_COL = 19; + private static final int GRACE_ON_PRINCIPAL_PAYMENT_COL = 20; + private static final int GRACE_ON_INTEREST_PAYMENT_COL = 21; + private static final int GRACE_ON_INTEREST_CHARGED_COL = 22; + private static final int START_DATE_COL = 23; + private static final int CLOSE_DATE_COL = 24; + + + + public LoanProductSheetPopulator(List<LoanProductData> products) { + this.products = products; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + int rowIndex = 1; + Sheet productSheet = workbook.createSheet(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME); + setLayout(productSheet); + CellStyle dateCellStyle = workbook.createCellStyle(); + short df = workbook.createDataFormat().getFormat(dateFormat); + dateCellStyle.setDataFormat(df); + for (LoanProductData product : products) { + Row row = productSheet.createRow(rowIndex++); + writeLong(ID_COL, row, product.getId()); + writeString(NAME_COL, row, product.getName().trim().replaceAll("[ )(]", "_")); + if (product.getFundName() != null) + writeString(FUND_NAME_COL, row, product.getFundName()); + writeBigDecimal(PRINCIPAL_COL, row, product.getPrincipal()); + if (product.getMinPrincipal() != null) + writeBigDecimal(MIN_PRINCIPAL_COL, row, product.getMinPrincipal()); + else + writeInt(MIN_PRINCIPAL_COL, row, 1); + if (product.getMaxPrincipal() != null) + writeBigDecimal(MAX_PRINCIPAL_COL, row, product.getMaxPrincipal()); + else + writeInt(MAX_PRINCIPAL_COL, row, 999999999); + writeInt(NO_OF_REPAYMENTS_COL, row, product.getNumberOfRepayments()); + if (product.getMinNumberOfRepayments() != null) + writeInt(MIN_REPAYMENTS_COL, row, product.getMinNumberOfRepayments()); + else + writeInt(MIN_REPAYMENTS_COL, row, 1); + if (product.getMaxNumberOfRepayments() != null) + writeInt(MAX_REPAYMENTS_COL, row, product.getMaxNumberOfRepayments()); + else + writeInt(MAX_REPAYMENTS_COL, row, 999999999); + writeInt(REPAYMENT_EVERY_COL, row, product.getRepaymentEvery()); + writeString(REPAYMENT_FREQUENCY_COL, row, product.getRepaymentFrequencyType().getValue()); + writeBigDecimal(INTEREST_RATE_COL, row, product.getInterestRatePerPeriod()); + if (product.getMinInterestRatePerPeriod() != null) + writeBigDecimal(MIN_INTEREST_RATE_COL, row, product.getMinInterestRatePerPeriod()); + else + writeInt(MIN_INTEREST_RATE_COL, row, 1); + if (product.getMaxInterestRatePerPeriod() != null) + writeBigDecimal(MAX_INTEREST_RATE_COL, row, product.getMaxInterestRatePerPeriod()); + else + writeInt(MAX_INTEREST_RATE_COL, row, 999999999); + writeString(INTEREST_RATE_FREQUENCY_COL, row, product.getInterestRateFrequencyType().getValue()); + writeString(AMORTIZATION_TYPE_COL, row, product.getAmortizationType().getValue()); + writeString(INTEREST_TYPE_COL, row, product.getInterestType().getValue()); + writeString(INTEREST_CALCULATION_PERIOD_TYPE_COL, row, + product.getInterestCalculationPeriodType().getValue()); + if (product.getInArrearsTolerance() != null) + writeBigDecimal(IN_ARREARS_TOLERANCE_COL, row, product.getInArrearsTolerance()); + writeString(TRANSACTION_PROCESSING_STRATEGY_NAME_COL, row, product.getTransactionProcessingStrategyName()); + if (product.getGraceOnPrincipalPayment() != null) + writeInt(GRACE_ON_PRINCIPAL_PAYMENT_COL, row, product.getGraceOnPrincipalPayment()); + if (product.getGraceOnInterestPayment() != null) + writeInt(GRACE_ON_INTEREST_PAYMENT_COL, row, product.getGraceOnInterestPayment()); + if (product.getGraceOnInterestCharged() != null) + writeInt(GRACE_ON_INTEREST_CHARGED_COL, row, product.getGraceOnInterestCharged()); + if (product.getStartDate() != null) + writeDate(START_DATE_COL, row, product.getStartDate().toString(), dateCellStyle,dateFormat); + else + writeDate(START_DATE_COL, row, "1/1/1970", dateCellStyle,dateFormat); + if (product.getCloseDate() != null) + writeDate(CLOSE_DATE_COL, row, product.getCloseDate().toString(), dateCellStyle,dateFormat); + else + writeDate(CLOSE_DATE_COL, row, "1/1/2040", dateCellStyle,dateFormat); + productSheet.protectSheet(""); + } + + } + + private void setLayout(Sheet worksheet) { + worksheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(FUND_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(PRINCIPAL_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_PRINCIPAL_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_PRINCIPAL_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(NO_OF_REPAYMENTS_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_REPAYMENTS_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_REPAYMENTS_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(REPAYMENT_EVERY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(REPAYMENT_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_RATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_INTEREST_RATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_INTEREST_RATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_RATE_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(AMORTIZATION_TYPE_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(INTEREST_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_CALCULATION_PERIOD_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(IN_ARREARS_TOLERANCE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(TRANSACTION_PROCESSING_STRATEGY_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(GRACE_ON_PRINCIPAL_PAYMENT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(GRACE_ON_INTEREST_PAYMENT_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(GRACE_ON_INTEREST_CHARGED_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(START_DATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(CLOSE_DATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + writeString(ID_COL, rowHeader, "ID"); + writeString(NAME_COL, rowHeader, "Name"); + writeString(FUND_NAME_COL, rowHeader, "Fund"); + writeString(PRINCIPAL_COL, rowHeader, "Principal"); + writeString(MIN_PRINCIPAL_COL, rowHeader, "Min Principal"); + writeString(MAX_PRINCIPAL_COL, rowHeader, "Max Principal"); + writeString(NO_OF_REPAYMENTS_COL, rowHeader, "# of Repayments"); + writeString(MIN_REPAYMENTS_COL, rowHeader, "Min Repayments"); + writeString(MAX_REPAYMENTS_COL, rowHeader, "Max Repayments"); + writeString(REPAYMENT_EVERY_COL, rowHeader, "Repayment Every"); + writeString(REPAYMENT_FREQUENCY_COL, rowHeader, "Frequency"); + writeString(INTEREST_RATE_COL, rowHeader, "Interest"); + writeString(MIN_INTEREST_RATE_COL, rowHeader, "Min Interest"); + writeString(MAX_INTEREST_RATE_COL, rowHeader, "Max Interest"); + writeString(INTEREST_RATE_FREQUENCY_COL, rowHeader, "Frequency"); + writeString(AMORTIZATION_TYPE_COL, rowHeader, "Amortization Type"); + writeString(INTEREST_TYPE_COL, rowHeader, "Interest Type"); + writeString(INTEREST_CALCULATION_PERIOD_TYPE_COL, rowHeader, "Interest Calculation Period"); + writeString(IN_ARREARS_TOLERANCE_COL, rowHeader, "In Arrears Tolerance"); + writeString(TRANSACTION_PROCESSING_STRATEGY_NAME_COL, rowHeader, "Transaction Processing Strategy"); + writeString(GRACE_ON_PRINCIPAL_PAYMENT_COL, rowHeader, "Grace On Principal Payment"); + writeString(GRACE_ON_INTEREST_PAYMENT_COL, rowHeader, "Grace on Interest Payment"); + writeString(GRACE_ON_INTEREST_CHARGED_COL, rowHeader, "Grace on Interest Charged"); + writeString(START_DATE_COL, rowHeader, "Start Date"); + writeString(CLOSE_DATE_COL, rowHeader, "End Date"); + } + public List<LoanProductData> getProducts(){ + return products; + + } + public Integer getProductsSize() { + return products.size(); + } +} http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/OfficeSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/OfficeSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/OfficeSheetPopulator.java new file mode 100644 index 0000000..a2ff620 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/OfficeSheetPopulator.java @@ -0,0 +1,82 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.organisation.office.data.OfficeData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.ArrayList; +import java.util.List; + +public class OfficeSheetPopulator extends AbstractWorkbookPopulator { + + private List<OfficeData> offices; + + private static final int ID_COL = 0; + private static final int OFFICE_NAME_COL = 1; + + public OfficeSheetPopulator(final List<OfficeData> offices) { + this.offices = offices; + } + + + @Override + public void populate(final Workbook workbook,String dateFormat) { + int rowIndex = 1; + Sheet officeSheet = workbook.createSheet(TemplatePopulateImportConstants.OFFICE_SHEET_NAME); + setLayout(officeSheet); + + populateOffices(officeSheet, rowIndex); + officeSheet.protectSheet(""); + } + + private void populateOffices(Sheet officeSheet, int rowIndex) { + for (OfficeData office : offices) { + Row row = officeSheet.createRow(rowIndex); + writeLong(ID_COL, row, office.getId()); + writeString(OFFICE_NAME_COL, row, office.name().trim().replaceAll("[ )(]", "_")); + rowIndex++; + } + } + + private void setLayout(Sheet worksheet) { + worksheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(OFFICE_NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + writeString(ID_COL, rowHeader, "ID"); + writeString(OFFICE_NAME_COL, rowHeader, "Name"); + } + + public List<OfficeData> getOffices() { + return offices; + } + + public List<String> getOfficeNames() { + List<String> officeNames=new ArrayList<>(); + for (OfficeData office : offices) { + officeNames.add(office.name()); + } + return officeNames; + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/PersonnelSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/PersonnelSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/PersonnelSheetPopulator.java new file mode 100644 index 0000000..2894616 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/PersonnelSheetPopulator.java @@ -0,0 +1,131 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.organisation.office.data.OfficeData; +import org.apache.fineract.organisation.staff.data.StaffData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +//import org.apache.commons.collections.CollectionUtils; + +public class PersonnelSheetPopulator extends AbstractWorkbookPopulator { + + private List<StaffData> personnel; + private List<OfficeData> offices; + + // Maintaining the one to many relationship + private Map<String, List<StaffData>> officeToPersonnel; + + /* + * Guava Multimap would make this more readable. The value Integer[] contains the beginIndex and + * endIndex for the staff list of each office. Required for applying names in excel. + */ + private Map<Integer, Integer[]> officeNameToBeginEndIndexesOfStaff; + + private static final int OFFICE_NAME_COL = 0; + private static final int STAFF_NAME_COL = 1; + private static final int STAFF_ID_COL = 2; + + public PersonnelSheetPopulator(List<StaffData> personnel, List<OfficeData> offices) { + this.personnel = personnel; + this.offices = offices; + } + + + @Override + public void populate(Workbook workbook,String dateFormat) { + Sheet staffSheet = workbook.createSheet(TemplatePopulateImportConstants.STAFF_SHEET_NAME); + setLayout(staffSheet); + + /* + * This piece of code could have been avoided by making multiple trips to the database for the + * staff of each office but this is more performance efficient + */ + setOfficeToPersonnelMap(); + + populateStaffByOfficeName(staffSheet); + staffSheet.protectSheet(""); + } + + + private void populateStaffByOfficeName(Sheet staffSheet) { + int rowIndex = 1, startIndex = 1, officeIndex = 0; + officeNameToBeginEndIndexesOfStaff = new HashMap<>(); + Row row = staffSheet.createRow(rowIndex); + for (OfficeData office : offices) { + startIndex = rowIndex + 1; + writeString(OFFICE_NAME_COL, row, office.name().trim().replaceAll("[ )(]", "_")); + + List<StaffData> staffList = + officeToPersonnel.get(office.name().trim().replaceAll("[ )(]", "_")); + + if (staffList!=null){ + if (!staffList.isEmpty()) { + for (StaffData staff : staffList) { + writeString(STAFF_NAME_COL, row, staff.getDisplayName()); + writeLong(STAFF_ID_COL, row, staff.getId()); + row = staffSheet.createRow(++rowIndex); + } + officeNameToBeginEndIndexesOfStaff.put(officeIndex++, new Integer[]{startIndex, rowIndex}); + } + }else + officeIndex++; + } + } + + private void setOfficeToPersonnelMap() { + officeToPersonnel = new HashMap<>(); + for (StaffData person : personnel) { + add(person.getOfficeName().trim().replaceAll("[ )(]", "_"), person); + } + } + + // Guava Multi-map can reduce this. + private void add(String key, StaffData value) { + List<StaffData> values = officeToPersonnel.get(key); + if (values == null) { + values = new ArrayList<>(); + } + values.add(value); + officeToPersonnel.put(key, values); + } + + private void setLayout(Sheet worksheet) { + for (Integer i = 0; i < 3; i++) + worksheet.setColumnWidth(i, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + writeString(OFFICE_NAME_COL, rowHeader, "Office Name"); + writeString(STAFF_NAME_COL, rowHeader, "Staff List"); + writeString(STAFF_ID_COL, rowHeader, "Staff ID"); + } + + public Map<Integer, Integer[]> getOfficeNameToBeginEndIndexesOfStaff() { + return officeNameToBeginEndIndexesOfStaff; + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RecurringDepositProductSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RecurringDepositProductSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RecurringDepositProductSheetPopulator.java new file mode 100644 index 0000000..32af96d --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RecurringDepositProductSheetPopulator.java @@ -0,0 +1,190 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.organisation.monetary.data.CurrencyData; +import org.apache.fineract.portfolio.savings.data.RecurringDepositProductData; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + +public class RecurringDepositProductSheetPopulator extends AbstractWorkbookPopulator { + + private List<RecurringDepositProductData> products; + + private static final int ID_COL = 0; + private static final int NAME_COL = 1; + private static final int SHORT_NAME_COL = 2; + private static final int NOMINAL_ANNUAL_INTEREST_RATE_COL = 3; + private static final int INTEREST_COMPOUNDING_PERIOD_COL = 4; + private static final int INTEREST_POSTING_PERIOD_COL = 5; + private static final int INTEREST_CALCULATION_COL = 6; + private static final int INTEREST_CALCULATION_DAYS_IN_YEAR_COL = 7; + private static final int LOCKIN_PERIOD_COL = 8; + private static final int LOCKIN_PERIOD_FREQUENCY_COL = 9; + private static final int CURRENCY_COL = 10; + private static final int MIN_DEPOSIT_COL = 11; + private static final int MAX_DEPOSIT_COL = 12; + private static final int DEPOSIT_COL = 13; + private static final int MIN_DEPOSIT_TERM_COL = 14; + private static final int MIN_DEPOSIT_TERM_TYPE_COL = 15; + private static final int MAX_DEPOSIT_TERM_COL = 16; + private static final int MAX_DEPOSIT_TERM_TYPE_COL = 17; + private static final int PRECLOSURE_PENAL_APPLICABLE_COL = 18; + private static final int PRECLOSURE_PENAL_INTEREST_COL = 19; + private static final int PRECLOSURE_INTEREST_TYPE_COL = 20; + private static final int IN_MULTIPLES_OF_DEPOSIT_TERM_COL = 21; + private static final int IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL = 22; + private static final int IS_MANDATORY_DEPOSIT_COL = 23; + private static final int ALLOW_WITHDRAWAL_COL = 24; + private static final int ADJUST_ADVANCE_COL = 25; + + public RecurringDepositProductSheetPopulator(List<RecurringDepositProductData> recurringDepositProducts) { + this.products=recurringDepositProducts; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + int rowIndex = 1; + Sheet productSheet = workbook.createSheet(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME); + setLayout(productSheet); + CellStyle dateCellStyle = workbook.createCellStyle(); + short df = workbook.createDataFormat().getFormat(dateFormat); + dateCellStyle.setDataFormat(df); + for(RecurringDepositProductData product : products) { + Row row = productSheet.createRow(rowIndex++); + writeLong(ID_COL, row, product.getId()); + writeString(NAME_COL, row, product.getName().trim().replaceAll("[ )(]", "_")); + writeString(SHORT_NAME_COL, row, product.getShortName().trim().replaceAll("[ )(]", "_")); + writeBigDecimal(NOMINAL_ANNUAL_INTEREST_RATE_COL, row, product.getNominalAnnualInterestRate()); + writeString(INTEREST_COMPOUNDING_PERIOD_COL, row, product.getInterestCompoundingPeriodType().getValue()); + writeString(INTEREST_POSTING_PERIOD_COL, row, product.getInterestPostingPeriodType().getValue()); + writeString(INTEREST_CALCULATION_COL, row, product.getInterestCalculationType().getValue()); + writeString(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, row, product.getInterestCalculationDaysInYearType().getValue()); + writeBoolean(PRECLOSURE_PENAL_APPLICABLE_COL, row, product.isPreClosurePenalApplicable()); + writeString(MIN_DEPOSIT_TERM_TYPE_COL, row, product.getMinDepositTermType().getValue()); + + if(product.getMinDepositAmount() != null) + writeBigDecimal(MIN_DEPOSIT_COL, row, product.getMinDepositAmount()); + if(product.getMaxDepositAmount() != null) + writeBigDecimal(MAX_DEPOSIT_COL, row, product.getMaxDepositAmount()); + if(product.getDepositAmount() != null) + writeBigDecimal(DEPOSIT_COL, row, product.getDepositAmount()); + if(product.getMaxDepositTerm() != null) + writeInt(MAX_DEPOSIT_TERM_COL, row, product.getMaxDepositTerm()); + + if(product.getMinDepositTerm() != null) + writeInt(MIN_DEPOSIT_TERM_COL, row, product.getMinDepositTerm()); + + + if(product.getInMultiplesOfDepositTerm() != null) + writeInt(IN_MULTIPLES_OF_DEPOSIT_TERM_COL, row, product.getInMultiplesOfDepositTerm()); + if(product.getPreClosurePenalInterest() != null) + writeBigDecimal(PRECLOSURE_PENAL_INTEREST_COL, row, product.getPreClosurePenalInterest()); + if(product.getMaxDepositTermType() != null) + writeString(MAX_DEPOSIT_TERM_TYPE_COL, row, product.getMaxDepositTermType().getValue()); + if(product.getPreClosurePenalInterestOnType() != null) + writeString(PRECLOSURE_INTEREST_TYPE_COL, row, product.getPreClosurePenalInterestOnType().getValue()); + if(product.getInMultiplesOfDepositTermType() != null) + writeString(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL, row, product.getInMultiplesOfDepositTermType().getValue()); + writeBoolean(ALLOW_WITHDRAWAL_COL, row, product.isAllowWithdrawal()); + writeBoolean(ADJUST_ADVANCE_COL, row, product.isAdjustAdvanceTowardsFuturePayments()); + writeBoolean(IS_MANDATORY_DEPOSIT_COL, row, product.isMandatoryDeposit()); + if(product.getLockinPeriodFrequency() != null) + writeInt(LOCKIN_PERIOD_COL, row, product.getLockinPeriodFrequency()); + if(product.getLockinPeriodFrequencyType() != null) + writeString(LOCKIN_PERIOD_FREQUENCY_COL, row, product.getLockinPeriodFrequencyType().getValue()); + CurrencyData currency = product.getCurrency(); + writeString(CURRENCY_COL, row, currency.code()); + } + productSheet.protectSheet(""); + } + + private void setLayout(Sheet worksheet) { + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + worksheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(SHORT_NAME_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(NOMINAL_ANNUAL_INTEREST_RATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_COMPOUNDING_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_POSTING_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_CALCULATION_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(LOCKIN_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(LOCKIN_PERIOD_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(CURRENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_DEPOSIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_DEPOSIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(DEPOSIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_DEPOSIT_TERM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_DEPOSIT_TERM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_DEPOSIT_TERM_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MAX_DEPOSIT_TERM_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(PRECLOSURE_PENAL_APPLICABLE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(PRECLOSURE_PENAL_INTEREST_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(PRECLOSURE_INTEREST_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(IN_MULTIPLES_OF_DEPOSIT_TERM_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(IS_MANDATORY_DEPOSIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(ALLOW_WITHDRAWAL_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(ADJUST_ADVANCE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + + writeString(ID_COL, rowHeader, "ID"); + writeString(NAME_COL, rowHeader, "Name"); + writeString(SHORT_NAME_COL, rowHeader, "Short Name"); + writeString(NOMINAL_ANNUAL_INTEREST_RATE_COL, rowHeader, "Interest"); + writeString(INTEREST_COMPOUNDING_PERIOD_COL, rowHeader, "Interest Compounding Period"); + writeString(INTEREST_POSTING_PERIOD_COL, rowHeader, "Interest Posting Period"); + writeString(INTEREST_CALCULATION_COL, rowHeader, "Interest Calculated Using"); + writeString(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, rowHeader, "# Days In Year"); + writeString(LOCKIN_PERIOD_COL, rowHeader, "Locked In For"); + writeString(LOCKIN_PERIOD_FREQUENCY_COL, rowHeader, "Frequency"); + writeString(CURRENCY_COL, rowHeader, "Currency"); + writeString(MIN_DEPOSIT_COL, rowHeader, "Min Deposit"); + writeString(MAX_DEPOSIT_COL, rowHeader, "Max Deposit"); + writeString(DEPOSIT_COL, rowHeader, "Deposit"); + writeString(MIN_DEPOSIT_TERM_COL, rowHeader, "Min Deposit Term"); + writeString(MAX_DEPOSIT_TERM_COL, rowHeader, "Max Deposit Term"); + writeString(MIN_DEPOSIT_TERM_TYPE_COL, rowHeader, "Min Deposit Term Type"); + writeString(MAX_DEPOSIT_TERM_TYPE_COL, rowHeader, "Max Deposit Term Type"); + writeString(PRECLOSURE_PENAL_APPLICABLE_COL, rowHeader, "Preclosure Penal Applicable"); + writeString(PRECLOSURE_PENAL_INTEREST_COL, rowHeader, "Penal Interest"); + writeString(PRECLOSURE_INTEREST_TYPE_COL, rowHeader, "Penal Interest Type"); + writeString(IN_MULTIPLES_OF_DEPOSIT_TERM_COL, rowHeader, "Multiples of Deposit Term"); + writeString(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE_COL, rowHeader, "Multiples of Deposit Term Type"); + writeString(IS_MANDATORY_DEPOSIT_COL, rowHeader, "Is Mandatory Deposit?"); + writeString(ALLOW_WITHDRAWAL_COL, rowHeader, "Allow Withdrawal?"); + writeString(ADJUST_ADVANCE_COL, rowHeader, "Adjust Advance Towards Future Payments?"); + } + + public List<RecurringDepositProductData> getProducts() { + return products; + } + + public Integer getProductsSize() { + return products.size(); + } + +} http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RoleSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RoleSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RoleSheetPopulator.java new file mode 100644 index 0000000..a7717f8 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/RoleSheetPopulator.java @@ -0,0 +1,67 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.useradministration.data.RoleData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + +public class RoleSheetPopulator extends AbstractWorkbookPopulator { + private List<RoleData>rolesList; + + private static final int ID_COL=0; + private static final int ROLE_NAME=1; + + public RoleSheetPopulator(List<RoleData> roles) { + this.rolesList=roles; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + int rowIndex = 1; + Sheet rolesSheet = workbook.createSheet(TemplatePopulateImportConstants.ROLES_SHEET_NAME); + setLayout(rolesSheet); + populateRoles(rolesSheet, rowIndex); + rolesSheet.protectSheet(""); + } + + private void populateRoles(Sheet rolesSheet, int rowIndex) { + for (RoleData role : rolesList) { + Row row = rolesSheet.createRow(rowIndex); + writeLong(ID_COL, row, role.getId()); + writeString(ROLE_NAME, row, role.getName().trim().replaceAll("[ )(]", "_")); + rowIndex++; + } + } + + private void setLayout(Sheet rolesSheet) { + rolesSheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + rolesSheet.setColumnWidth(ROLE_NAME, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + Row rowHeader = rolesSheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + writeString(ID_COL, rowHeader, "ID"); + writeString(ROLE_NAME, rowHeader, "Role Name"); + } + + +} http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsAccountSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsAccountSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsAccountSheetPopulator.java new file mode 100644 index 0000000..e2a9c77 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsAccountSheetPopulator.java @@ -0,0 +1,84 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.portfolio.client.data.ClientData; +import org.apache.fineract.portfolio.savings.data.SavingsAccountData; +import org.apache.fineract.template.domain.Template; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; +import java.util.Map; + +public class SavingsAccountSheetPopulator extends AbstractWorkbookPopulator { + + private List<SavingsAccountData> savingsAccountDataList; + private Map<ClientData,List<SavingsAccountData>> clientToSavingsMap; + + private static final int SAVINGS_ACCOUNT_ID_COL=0; + private static final int SAVING_ACCOUNT_NO=1; + private static final int CURRENCY_COL=2; + private static final int CLIENT_NAME=3; + + + public SavingsAccountSheetPopulator(List<SavingsAccountData> savingsAccountDataList) { + this.savingsAccountDataList=savingsAccountDataList; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + Sheet savingsSheet=workbook.createSheet(TemplatePopulateImportConstants.SAVINGS_ACCOUNTS_SHEET_NAME); + setLayout(savingsSheet); + populateSavingsSheet(savingsSheet); + savingsSheet.protectSheet(""); + } + + private void populateSavingsSheet(Sheet savingsSheet) { + int rowIndex=1; + for (SavingsAccountData savings: savingsAccountDataList) { + Row row=savingsSheet.createRow(rowIndex++); + writeLong(SAVINGS_ACCOUNT_ID_COL,row,savings.id()); + writeString(SAVING_ACCOUNT_NO,row,savings.getAccountNo()); + writeString(CURRENCY_COL,row,savings.currency().code()); + writeString(CLIENT_NAME,row,savings.getClientName()); + } + } + + + private void setLayout(Sheet savingsSheet) { + Row rowHeader = savingsSheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + + savingsSheet.setColumnWidth(SAVINGS_ACCOUNT_ID_COL,TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + writeString(SAVINGS_ACCOUNT_ID_COL,rowHeader,"Savings Account Id"); + + savingsSheet.setColumnWidth(SAVING_ACCOUNT_NO,TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + writeString(SAVING_ACCOUNT_NO,rowHeader,"Savings Account No"); + + savingsSheet.setColumnWidth(CURRENCY_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CURRENCY_COL,rowHeader,"Currency Code"); + + savingsSheet.setColumnWidth(CLIENT_NAME,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CLIENT_NAME,rowHeader,"Client Name"); + + } +} http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsProductSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsProductSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsProductSheetPopulator.java new file mode 100644 index 0000000..2803a01 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SavingsProductSheetPopulator.java @@ -0,0 +1,136 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.organisation.monetary.data.CurrencyData; +import org.apache.fineract.portfolio.savings.data.SavingsProductData; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + +public class SavingsProductSheetPopulator extends AbstractWorkbookPopulator { + private List<SavingsProductData> savingsProducts; + + private static final int ID_COL = 0; + private static final int NAME_COL = 1; + private static final int NOMINAL_ANNUAL_INTEREST_RATE_COL = 2; + private static final int INTEREST_COMPOUNDING_PERIOD_COL = 3; + private static final int INTEREST_POSTING_PERIOD_COL = 4; + private static final int INTEREST_CALCULATION_COL = 5; + private static final int INTEREST_CALCULATION_DAYS_IN_YEAR_COL = 6; + private static final int MIN_OPENING_BALANCE_COL = 7; + private static final int LOCKIN_PERIOD_COL = 8; + private static final int LOCKIN_PERIOD_FREQUENCY_COL = 9; + private static final int CURRENCY_COL = 10; + private static final int DECIMAL_PLACES_COL = 11; + private static final int IN_MULTIPLES_OF_COL = 12; + private static final int WITHDRAWAL_FEE_COL = 13; + private static final int ALLOW_OVERDRAFT_COL = 14; + private static final int OVERDRAFT_LIMIT_COL = 15; + + public SavingsProductSheetPopulator(List<SavingsProductData> savingsProducts) { + this.savingsProducts=savingsProducts; + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + int rowIndex = 1; + Sheet productSheet = workbook.createSheet(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME); + setLayout(productSheet); + CellStyle dateCellStyle = workbook.createCellStyle(); + short df = workbook.createDataFormat().getFormat(dateFormat); + dateCellStyle.setDataFormat(df); + for(SavingsProductData product : savingsProducts) { + Row row = productSheet.createRow(rowIndex++); + writeLong(ID_COL, row, product.getId()); + writeString(NAME_COL, row, product.getName().trim().replaceAll("[ )(]", "_")); + writeBigDecimal(NOMINAL_ANNUAL_INTEREST_RATE_COL, row, product.getNominalAnnualInterestRate()); + writeString(INTEREST_COMPOUNDING_PERIOD_COL, row, product.getInterestCompoundingPeriodType().getValue()); + writeString(INTEREST_POSTING_PERIOD_COL, row, product.getInterestPostingPeriodType().getValue()); + writeString(INTEREST_CALCULATION_COL, row, product.getInterestCalculationType().getValue()); + writeString(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, row, product.getInterestCalculationDaysInYearType().getValue()); + if(product.getMinRequiredOpeningBalance() != null) + writeBigDecimal(MIN_OPENING_BALANCE_COL, row, product.getMinRequiredOpeningBalance()); + if(product.getLockinPeriodFrequency() != null) + writeInt(LOCKIN_PERIOD_COL, row, product.getLockinPeriodFrequency()); + if(product.getLockinPeriodFrequencyType() != null) + writeString(LOCKIN_PERIOD_FREQUENCY_COL, row, product.getLockinPeriodFrequencyType().getValue()); + CurrencyData currency = product.getCurrency(); + writeString(CURRENCY_COL, row, currency.code()); + writeInt(DECIMAL_PLACES_COL, row, currency.decimalPlaces()); + if(currency.currencyInMultiplesOf() != null) + writeInt(IN_MULTIPLES_OF_COL, row, currency.currencyInMultiplesOf()); + writeBoolean(WITHDRAWAL_FEE_COL, row, product.isWithdrawalFeeForTransfers()); + writeBoolean(ALLOW_OVERDRAFT_COL, row,product.isAllowOverdraft()); + if(product.getOverdraftLimit() != null) + writeBigDecimal(OVERDRAFT_LIMIT_COL, row, product.getOverdraftLimit()); + } + productSheet.protectSheet(""); + } + + private void setLayout(Sheet worksheet) { + Row rowHeader = worksheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + worksheet.setColumnWidth(ID_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(NAME_COL, TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + worksheet.setColumnWidth(NOMINAL_ANNUAL_INTEREST_RATE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_COMPOUNDING_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_POSTING_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_CALCULATION_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(MIN_OPENING_BALANCE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(LOCKIN_PERIOD_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(LOCKIN_PERIOD_FREQUENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(CURRENCY_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(DECIMAL_PLACES_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(IN_MULTIPLES_OF_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(WITHDRAWAL_FEE_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(ALLOW_OVERDRAFT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + worksheet.setColumnWidth(OVERDRAFT_LIMIT_COL, TemplatePopulateImportConstants.SMALL_COL_SIZE); + + writeString(ID_COL, rowHeader, "ID"); + writeString(NAME_COL, rowHeader, "Name"); + writeString(NOMINAL_ANNUAL_INTEREST_RATE_COL, rowHeader, "Interest"); + writeString(INTEREST_COMPOUNDING_PERIOD_COL, rowHeader, "Interest Compounding Period"); + writeString(INTEREST_POSTING_PERIOD_COL, rowHeader, "Interest Posting Period"); + writeString(INTEREST_CALCULATION_COL, rowHeader, "Interest Calculated Using"); + writeString(INTEREST_CALCULATION_DAYS_IN_YEAR_COL, rowHeader, "# Days In Year"); + writeString(MIN_OPENING_BALANCE_COL, rowHeader, "Min Opening Balance"); + writeString(LOCKIN_PERIOD_COL, rowHeader, "Locked In For"); + writeString(LOCKIN_PERIOD_FREQUENCY_COL, rowHeader, "Frequency"); + writeString(CURRENCY_COL, rowHeader, "Currency"); + writeString(DECIMAL_PLACES_COL, rowHeader, "Decimal Places"); + writeString(IN_MULTIPLES_OF_COL, rowHeader, "In Multiples Of"); + writeString(WITHDRAWAL_FEE_COL, rowHeader, "Withdrawal Fee for Transfers?"); + writeString(ALLOW_OVERDRAFT_COL, rowHeader, "Apply Overdraft"); + writeString(OVERDRAFT_LIMIT_COL, rowHeader, "Overdraft Limit"); + } + + public List<SavingsProductData> getProducts() { + return savingsProducts; + } + + public Integer getProductsSize() { + return savingsProducts.size(); + } +} http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SharedProductsSheetPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SharedProductsSheetPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SharedProductsSheetPopulator.java new file mode 100644 index 0000000..33fbd8f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/SharedProductsSheetPopulator.java @@ -0,0 +1,159 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; +import org.apache.fineract.infrastructure.core.service.DateUtils; +import org.apache.fineract.portfolio.charge.data.ChargeData; +import org.apache.fineract.portfolio.shareproducts.data.ShareProductData; +import org.apache.fineract.portfolio.shareproducts.data.ShareProductMarketPriceData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import java.math.BigDecimal; +import java.util.*; + +public class SharedProductsSheetPopulator extends AbstractWorkbookPopulator { + private List<ShareProductData> sharedProductDataList; + private List<ChargeData> chargesForSharedProducts; + private Map<Long,Integer[]>productToBeginEndIndexesofCharges; + + private static final int PRODUCT_ID=0; + private static final int PRODUCT_NAME_COL = 1; + private static final int CURRENCY_COL = 2; + private static final int DECIMAL_PLACES_COL = 3; + private static final int TODAYS_PRICE_COL = 4; + private static final int CURRENCY_IN_MULTIPLES_COL = 5; + private static final int CHARGES_ID_1_COL = 7; + private static final int CHARGES_NAME_1_COL = 8; + private static final int CHARGES_ID_2_COL = 9; + private static final int CHARGES_NAME_2_COL = 10; + private static final int CHARGES_ID_3_COL = 11; + private static final int CHARGES_NAME_3_COL = 12; + + + + public SharedProductsSheetPopulator(List<ShareProductData> shareProductDataList,List<ChargeData> chargesForShares) { + this.sharedProductDataList=shareProductDataList; + this.chargesForSharedProducts=chargesForShares; + + } + + @Override + public void populate(Workbook workbook,String dateFormat) { + Sheet sharedProductsSheet=workbook.createSheet(TemplatePopulateImportConstants.SHARED_PRODUCTS_SHEET_NAME); + setLayout(sharedProductsSheet); + populateSheet(sharedProductsSheet); + sharedProductsSheet.protectSheet(""); + } + + private void populateSheet(Sheet sharedProductsSheet) { + int index = 0; + int startIndexCharges = 1; + int endIndexCharges = 0; + productToBeginEndIndexesofCharges = new HashMap<>(); + for (ShareProductData productData : sharedProductDataList) { + Row row = sharedProductsSheet.createRow(++index); + writeLong(PRODUCT_ID, row, productData.getId()); + writeString(PRODUCT_NAME_COL, row, productData.getName().replaceAll("[ ]", "_")); + writeString(CURRENCY_COL, row, productData.getCurrency().getName().replaceAll("[ ]", "_")); + writeInt(DECIMAL_PLACES_COL, row, productData.getCurrency().decimalPlaces()); + writeBigDecimal(TODAYS_PRICE_COL, row, deriveMarketPrice(productData)); + writeInt(CURRENCY_IN_MULTIPLES_COL,row,productData.getCurrency().currencyInMultiplesOf()); + if (chargesForSharedProducts != null) { + int chargeRowIndex=0; + for (ChargeData chargeData:chargesForSharedProducts) { + if (chargeData.getCurrency().getName().equals(productData.getCurrency().getName())) { + writeString(CHARGES_NAME_1_COL+chargeRowIndex, row, chargeData.getName()); + writeLong(CHARGES_ID_1_COL+chargeRowIndex, row, chargeData.getId()); + chargeRowIndex+=2; + endIndexCharges++; + } + } + productToBeginEndIndexesofCharges.put(productData.getId(), new Integer[]{startIndexCharges, endIndexCharges}); + startIndexCharges = endIndexCharges + 1; + } + } + } + private BigDecimal deriveMarketPrice(final ShareProductData shareProductData) { + BigDecimal marketValue = shareProductData.getUnitPrice(); + Collection<ShareProductMarketPriceData> marketDataSet = shareProductData.getMarketPrice(); + if (marketDataSet != null && !marketDataSet.isEmpty()) { + Date currentDate = DateUtils.getDateOfTenant(); + for (ShareProductMarketPriceData data : marketDataSet) { + Date futureDate = data.getStartDate(); + if (currentDate.after(futureDate)) { + marketValue = data.getShareValue(); + } + } + } + return marketValue; + } + + private void setLayout(Sheet workSheet) { + Row rowHeader=workSheet.createRow(TemplatePopulateImportConstants.ROWHEADER_INDEX); + rowHeader.setHeight(TemplatePopulateImportConstants.ROW_HEADER_HEIGHT); + + workSheet.setColumnWidth(PRODUCT_ID,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(PRODUCT_ID,rowHeader,"Product Id"); + + workSheet.setColumnWidth(PRODUCT_NAME_COL,TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + writeString(PRODUCT_NAME_COL,rowHeader,"Product Name"); + + workSheet.setColumnWidth(CURRENCY_COL,TemplatePopulateImportConstants.MEDIUM_COL_SIZE); + writeString(CURRENCY_COL,rowHeader,"Currency"); + + workSheet.setColumnWidth(DECIMAL_PLACES_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(DECIMAL_PLACES_COL,rowHeader,"Decimal Places"); + + workSheet.setColumnWidth(TODAYS_PRICE_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(TODAYS_PRICE_COL,rowHeader,"Today's Price"); + + workSheet.setColumnWidth(CURRENCY_IN_MULTIPLES_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CURRENCY_IN_MULTIPLES_COL,rowHeader,"Currency in multiples of"); + + workSheet.setColumnWidth(CHARGES_NAME_1_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CHARGES_NAME_1_COL,rowHeader,"Charges Name 1"); + + workSheet.setColumnWidth(CHARGES_ID_1_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CHARGES_ID_1_COL,rowHeader,"Charges Id 1"); + + workSheet.setColumnWidth(CHARGES_NAME_2_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CHARGES_NAME_2_COL,rowHeader,"Charges Name 2"); + + workSheet.setColumnWidth(CHARGES_ID_2_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CHARGES_ID_2_COL,rowHeader,"Charges Id 2"); + + workSheet.setColumnWidth(CHARGES_NAME_3_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CHARGES_NAME_3_COL,rowHeader,"Charges Name 3"); + + workSheet.setColumnWidth(CHARGES_ID_3_COL,TemplatePopulateImportConstants.SMALL_COL_SIZE); + writeString(CHARGES_ID_3_COL,rowHeader,"Charges Id 3"); + + } + + public List<ShareProductData> getSharedProductDataList() { + return sharedProductDataList; + } + + public Map<Long, Integer[]> getProductToBeginEndIndexesofCharges() { + return productToBeginEndIndexesofCharges; + } +} http://git-wip-us.apache.org/repos/asf/fineract/blob/210647d4/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/WorkbookPopulator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/WorkbookPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/WorkbookPopulator.java new file mode 100644 index 0000000..9ff2a1c --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/WorkbookPopulator.java @@ -0,0 +1,27 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.bulkimport.populator; + +import org.apache.poi.ss.usermodel.Workbook; + +public interface WorkbookPopulator { + + void populate(Workbook workbook,String dateFormat); + +} \ No newline at end of file