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

Reply via email to