fineract-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From av...@apache.org
Subject [10/19] fineract git commit: all modules populate & import
Date Wed, 13 Dec 2017 09:03:23 GMT
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


Mime
View raw message