/* * eGov suite of products aim to improve the internal efficiency,transparency, * accountability and the service delivery of the government organizations. * * Copyright (C) <2015> eGovernments Foundation * * The updated version of eGov suite of products as by eGovernments Foundation * is available at http://www.egovernments.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/ or * http://www.gnu.org/licenses/gpl.html . * * In addition to the terms of the GPL license to be adhered to in using this * program, the following additional terms are to be complied with: * * 1) All versions of this program, verbatim or modified must carry this * Legal Notice. * * 2) Any misrepresentation of the origin of the material is prohibited. It * is required that all modified versions of this material be marked in * reasonable ways as different from the original version. * * 3) This license does not grant any rights to any user of the program * with regards to rights under trademark law for use of the trade names * or trademarks of eGovernments Foundation. * * In case of any queries, you can reach eGovernments Foundation at contact@egovernments.org. */ /* * Created on July 25, 2008 * @author Iliyaraja.S */ package com.exilant.eGov.src.reports; import com.exilant.exility.common.TaskFailedException; import org.apache.log4j.Logger; import org.egov.infstr.utils.EGovConfig; import java.math.BigDecimal; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; public class SchemeUtilizationReport { private static final Logger LOGGER = Logger.getLogger(SchemeUtilizationReport.class); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); String filterGlcode = ""; List part1 = new ArrayList(); List part2 = new ArrayList(); List part3 = new ArrayList(); List partTotalReceipts = new ArrayList(); List part4 = new ArrayList(); List part5 = new ArrayList(); List partTotalClosingBal = new ArrayList(); CallableStatement cstmt = null; CallableStatement cstmt2 = null; String dynamicSubSchemName[]; private static TaskFailedException taskExc; public ArrayList getSchemeUtilizationReport(final int pschemeid, final String startDate, final String endDate) throws Exception { Connection con = null; try { con = null;// This fix is for Phoenix Migration.EgovDatabaseManager.openConnection(); LinkedHashMap data = null; final int majorCodeLength = Integer.parseInt(EGovConfig.getProperty("egf_config.xml", "majorcodevalue", "", "AccountCode")); filterGlcode = EGovConfig.getProperty("egf_config.xml", "filterGlcodeForScheme", "", "SchemeUtilization"); if (LOGGER.isInfoEnabled()) LOGGER.info("SchemeUtilizationReport filterGlcode--->" + filterGlcode); if (LOGGER.isInfoEnabled()) LOGGER.info("pschemeid=" + pschemeid + ",startDate=" + formatter.format(sdf.parse(startDate)) + ",endDate=" + formatter.format(sdf.parse(endDate)) + ",majorcodelength=" + majorCodeLength); /* For Opening balance Scheme and Sub scheme wise procedure start */ if (LOGGER.isInfoEnabled()) LOGGER.info("For Opening balance Scheme and Sub scheme wise procedure start"); final CallableStatement cstmt = con.prepareCall("{? = call EGF_REPORT.OPBALSCHEMEREPORT(?,?,?,?)}"); cstmt.setFetchSize(1000); // This fix is for Phoenix Migration. // cstmt.registerOutParameter(1,OracleTypes.CURSOR); cstmt.setInt(1, pschemeid); cstmt.setString(2, formatter.format(sdf.parse(startDate))); // cstmt.setString(4,formatter.format(sdf.parse(endDate))); cstmt.setInt(4, majorCodeLength); cstmt.setString(5, filterGlcode); if (LOGGER.isInfoEnabled()) LOGGER.info("BEFORE EXECUTE PROCEDURE for Opening Balance"); cstmt.executeQuery(); if (LOGGER.isInfoEnabled()) LOGGER.info("AFTER EXECUTE PROCEDURE for Opening Balance"); final ResultSet rs = (ResultSet) cstmt.getObject(1); final ResultSetMetaData rsmd = rs.getMetaData(); final int columnCount = rsmd.getColumnCount(); if (LOGGER.isInfoEnabled()) LOGGER.info("Total result set column count-->" + columnCount); // Here number of static column is "1",that's why we have to subtract "1" from total column count,now we will get the // dynamic Column count final int dynamicColumn = columnCount - 1; new LinkedHashMap(); String columnLabel = "", amt = ""; if (rs.next()) { if (LOGGER.isInfoEnabled()) LOGGER.info("Inside while-for Opening balance Row"); data = new LinkedHashMap(); data.put("particulars", "<b>Opening Balance</b>"); for (int j = 0; j < dynamicColumn; j++) { // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicColumn amount--->"+rs.getString(j+1)); // Here dynamic Column is starting from "1",that's why we have to start dynamic Column count from "1" onwards. amt = rs.getString(j + 1); if (amt == null) amt = "0.00"; columnLabel = rsmd.getColumnName(j + 1); data.put(columnLabel, formatAmtTwoDecimal(amt)); }// for if (LOGGER.isInfoEnabled()) LOGGER.info("scheme total--->" + rs.getString("SCHAMT")); if (rs.getString("SCHAMT") != null) data.put("schemetotal", formatAmtTwoDecimal(rs.getString("SCHAMT"))); else data.put("schemetotal", "0.00"); part1.add(data); } else // if no records in opening balance { if (LOGGER.isInfoEnabled()) LOGGER.info("Inside else--No records for Opening balance "); data = new LinkedHashMap(); data.put("particulars", "<b>Opening Balance</b>"); for (int j = 0; j < dynamicColumn; j++) { columnLabel = rsmd.getColumnName(j + 1); data.put(columnLabel, "0.00"); }// for // data.put("subschemetotal",formatAmtTwoDecimal("0.00")); data.put("schemetotal", formatAmtTwoDecimal("0.00")); part1.add(data); } if (LOGGER.isInfoEnabled()) LOGGER.info("For Opening balance Scheme and Sub scheme wise procedure end"); /* For Opening balance Scheme and Sub scheme wise procedure end */ /* For Scheme and Sub scheme wise procedure start */ if (LOGGER.isInfoEnabled()) LOGGER.info("For Scheme and Sub scheme wise procedure start"); final CallableStatement cstmt2 = con.prepareCall("{? = call EGF_REPORT.SCHEMEREPORT(?,?,?,?,?)}"); cstmt2.setFetchSize(1000); // This fix is for Phoenix Migration. // cstmt2.registerOutParameter(1,OracleTypes.CURSOR); cstmt2.setInt(2, pschemeid); cstmt2.setString(3, formatter.format(sdf.parse(startDate))); cstmt2.setString(4, formatter.format(sdf.parse(endDate))); cstmt2.setInt(5, majorCodeLength); cstmt2.setString(6, filterGlcode); if (LOGGER.isInfoEnabled()) LOGGER.info("BEFORE EXECUTE PROCEDURE for Scheme and Sub scheme"); cstmt2.executeQuery(); if (LOGGER.isInfoEnabled()) LOGGER.info("AFTER EXECUTE PROCEDURE for Scheme and Sub scheme"); final ResultSet rs2 = (ResultSet) cstmt2.getObject(1); final ResultSetMetaData rsmd2 = rs2.getMetaData(); final int columnCount2 = rsmd2.getColumnCount(); if (LOGGER.isInfoEnabled()) LOGGER.info("Total result set column count-->" + columnCount2); // Here number of static column is "4",that's why we have to subtract "4" from total column count,now we will get the // dynamic Column count. final int dynamicColumn2 = columnCount2 - 4; new LinkedHashMap(); String addCapitalReceiptsSubHead = ""; String addRevenueReceiptsSubHead = ""; String totalReceiptsSubHead = ""; String lessCapitalExpSubHead = ""; String lessRevenueExpSubHead = ""; final String closingBalanceSubHead = ""; dynamicSubSchemName = new String[dynamicColumn2]; for (int j = 0; j < dynamicColumn2; j++) { // Here dynamic Column is starting from "3",that's why we have to start dynamic Column count from "3" onwards. dynamicSubSchemName[j] = rsmd2.getColumnName(j + 3); if (LOGGER.isInfoEnabled()) LOGGER.info("ARRAY VALUE dynamicSubSchemName[j]--->" + dynamicSubSchemName[j]); } while (rs2.next()) { if (LOGGER.isInfoEnabled()) LOGGER.info("Inside while-for Scheme and sub scheme row"); // double totalSubScheme2 =0; String columnLabel2 = "", amt2 = ""; if (rs2.getString("CTYPE").equalsIgnoreCase("L")) { if (!addCapitalReceiptsSubHead.equals("CRECEIPTS")) { data = new LinkedHashMap(); data.put("particulars", "<b>Add: Capital Receipts</b>"); for (int j = 0; j < dynamicColumn2; j++) { columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, " "); } // data.put("subschemetotal"," "); data.put("schemetotal", " "); part2.add(data); addCapitalReceiptsSubHead = "CRECEIPTS"; } data = new LinkedHashMap(); data.put("particulars", rs2.getString("MAJORCODE") + "-" + rs2.getString("COANAME")); for (int j = 0; j < dynamicColumn2; j++) { // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicColumn amount--->"+rs2.getString(j+3)); // Here dynamic Column is starting from "3",that's why we have to start dynamic Column count from "3" // onwards. amt2 = rs2.getString(j + 3); if (amt2 == null) amt2 = "0.00"; columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, formatAmtTwoDecimal(amt2)); // totalSubScheme2= totalSubScheme2 + Double.parseDouble(amt2); }// for if (LOGGER.isInfoEnabled()) LOGGER.info("scheme total--->" + rs2.getString("SCHAMT")); if (rs2.getString("SCHAMT") != null) data.put("schemetotal", formatAmtTwoDecimal(rs2.getString("SCHAMT"))); else data.put("schemetotal", "0.00"); part2.add(data); } // for "Liability code" else if (rs2.getString("CTYPE").equalsIgnoreCase("I")) { if (!addRevenueReceiptsSubHead.equals("RENENUERECEIPTS")) { data = new LinkedHashMap(); data.put("particulars", "<b>Add: Revenue Receipts</b>"); for (int j = 0; j < dynamicColumn2; j++) { columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, " "); } data.put("schemetotal", " "); part3.add(data); addRevenueReceiptsSubHead = "RENENUERECEIPTS"; } data = new LinkedHashMap(); data.put("particulars", rs2.getString("MAJORCODE") + "-" + rs2.getString("COANAME")); for (int j = 0; j < dynamicColumn2; j++) { // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicColumn amount--->"+rs2.getString(j+3)); amt2 = rs2.getString(j + 3); if (amt2 == null) amt2 = "0.00"; columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, formatAmtTwoDecimal(amt2)); // totalSubScheme2= totalSubScheme2 + Double.parseDouble(amt2); }// for if (LOGGER.isInfoEnabled()) LOGGER.info("scheme total--->" + rs2.getString("SCHAMT")); if (rs2.getString("SCHAMT") != null) data.put("schemetotal", formatAmtTwoDecimal(rs2.getString("SCHAMT"))); else data.put("schemetotal", "0.00"); part3.add(data); } // for "Income code" else if (rs2.getString("CTYPE").equalsIgnoreCase("A")) { if (!lessCapitalExpSubHead.equals("CEXPENDITURE")) { data = new LinkedHashMap(); data.put("particulars", "<b>Less: Capital Expenditure</b>"); for (int j = 0; j < dynamicColumn2; j++) { columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, " "); } // data.put("subschemetotal"," "); data.put("schemetotal", " "); part4.add(data); lessCapitalExpSubHead = "CEXPENDITURE"; } data = new LinkedHashMap(); data.put("particulars", rs2.getString("MAJORCODE") + "-" + rs2.getString("COANAME")); for (int j = 0; j < dynamicColumn2; j++) { // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicColumn amount--->"+rs2.getString(j+3)); amt2 = rs2.getString(j + 3); if (amt2 == null) amt2 = "0.00"; columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, formatAmtTwoDecimal(amt2)); // totalSubScheme2= totalSubScheme2 + Double.parseDouble(amt2); }// for // if(LOGGER.isInfoEnabled()) LOGGER.info("totalSubScheme2--->"+totalSubScheme2); // data.put("subschemetotal", formatAmtTwoDecimal(totalSubScheme2+"")); if (LOGGER.isInfoEnabled()) LOGGER.info("scheme total--->" + rs2.getString("SCHAMT")); if (rs2.getString("SCHAMT") != null) data.put("schemetotal", formatAmtTwoDecimal(rs2.getString("SCHAMT"))); else data.put("schemetotal", "0.00"); part4.add(data); } // for "Asset code" else if (rs2.getString("CTYPE").equalsIgnoreCase("E")) { if (!lessRevenueExpSubHead.equals("RENENUEEXPENDITURE")) { data = new LinkedHashMap(); data.put("particulars", "<b>Less: Revenue Expenditure</b>"); for (int j = 0; j < dynamicColumn2; j++) { columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, " "); } // data.put("subschemetotal"," "); data.put("schemetotal", " "); part5.add(data); lessRevenueExpSubHead = "RENENUEEXPENDITURE"; } data = new LinkedHashMap(); data.put("particulars", rs2.getString("MAJORCODE") + "-" + rs2.getString("COANAME")); for (int j = 0; j < dynamicColumn2; j++) { // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicColumn amount--->"+rs2.getString(j+3)); amt2 = rs2.getString(j + 3); if (amt2 == null) amt2 = "0.00"; columnLabel2 = rsmd2.getColumnName(j + 3); data.put(columnLabel2, formatAmtTwoDecimal(amt2)); // totalSubScheme2= totalSubScheme2 + Double.parseDouble(amt2); }// for // if(LOGGER.isInfoEnabled()) LOGGER.info("totalSubScheme2--->"+totalSubScheme2); // data.put("subschemetotal", formatAmtTwoDecimal(totalSubScheme2+"")); if (LOGGER.isInfoEnabled()) LOGGER.info("scheme total--->" + rs2.getString("SCHAMT")); if (rs2.getString("SCHAMT") != null) data.put("schemetotal", formatAmtTwoDecimal(rs2.getString("SCHAMT"))); else data.put("schemetotal", "0.00"); part5.add(data); } // for "Expense code" }// while if (LOGGER.isInfoEnabled()) LOGGER.info("For Scheme and Sub scheme wise procedure end"); /* For Scheme and Sub scheme wise procedure End */ // If it is no record for that particular ctype,we have to show empty row start if (addCapitalReceiptsSubHead.equals("")) { if (LOGGER.isInfoEnabled()) LOGGER.info("Inside If it is No Capital Receipts---------->"); data = new LinkedHashMap(); data.put("particulars", "<b>Add: Capital Receipts</b>"); for (final String element : dynamicSubSchemName) // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicSubSchemName[j]--->"+dynamicSubSchemName[j]); data.put(element, formatAmtTwoDecimal("0.00")); // data.put("subschemetotal","0.00"); data.put("schemetotal", formatAmtTwoDecimal("0.00")); part2.add(data); } if (addRevenueReceiptsSubHead.equals("")) { if (LOGGER.isInfoEnabled()) LOGGER.info("Inside If it is No Revenue Receipts----------->"); data = new LinkedHashMap(); data.put("particulars", "<b>Add: Revenue Receipts</b>"); for (final String element : dynamicSubSchemName) // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicSubSchemName[j]--->"+dynamicSubSchemName[j]); data.put(element, formatAmtTwoDecimal("0.00")); // data.put("subschemetotal","0.00"); data.put("schemetotal", formatAmtTwoDecimal("0.00")); part3.add(data); } if (lessCapitalExpSubHead.equals("")) { if (LOGGER.isInfoEnabled()) LOGGER.info("Inside If it is No Capital Expenditure---------->"); data = new LinkedHashMap(); data.put("particulars", "<b>Less: Capital Expenditure</b>"); for (final String element : dynamicSubSchemName) // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicSubSchemName[j]--->"+dynamicSubSchemName[j]); data.put(element, formatAmtTwoDecimal("0.00")); // data.put("subschemetotal","0.00"); data.put("schemetotal", formatAmtTwoDecimal("0.00")); part4.add(data); } if (lessRevenueExpSubHead.equals("")) { if (LOGGER.isInfoEnabled()) LOGGER.info("Inside If it is No Revenue Expenditure---------->"); data = new LinkedHashMap(); data.put("particulars", "<b>Less: Revenue Expenditure</b>"); for (final String element : dynamicSubSchemName) // if(LOGGER.isInfoEnabled()) LOGGER.info("dynamicSubSchemName[j]--->"+dynamicSubSchemName[j]); data.put(element, formatAmtTwoDecimal("0.00")); // data.put("subschemetotal","0.00"); data.put("schemetotal", formatAmtTwoDecimal("0.00")); part5.add(data); } // If it is no record for that particular ctype,we have to show empty row end // cumulative for Total Receipts including Opening Balance start final LinkedHashMap totalOpeningBal = new LinkedHashMap(); final Iterator itr = part1.iterator(); while (itr.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr.next(); final Set keySet = hm.keySet(); final Iterator itr1 = keySet.iterator(); while (itr1.hasNext()) { final String str = (String) itr1.next(); for (int i = 0; i < dynamicSubSchemName.length; i++) if (totalOpeningBal.containsKey(dynamicSubSchemName[i])) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get(dynamicSubSchemName[i]).equals(" ") && str.equals(dynamicSubSchemName[i])) temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()) .add(new BigDecimal(hm.get(dynamicSubSchemName[i]).toString())); else temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()); totalOpeningBal.put(dynamicSubSchemName[i], temp); } else if (str.equals(dynamicSubSchemName[i]) && !hm.get(dynamicSubSchemName[i]).equals(" ")) totalOpeningBal.put(dynamicSubSchemName[i], hm.get(dynamicSubSchemName[i]).toString()); // for scheme total if (totalOpeningBal.containsKey("schemetotal")) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get("schemetotal").equals(" ") && str.equals("schemetotal")) temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()).add(new BigDecimal(hm .get("schemetotal").toString())); else temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()); totalOpeningBal.put("schemetotal", temp); } else if (str.equals("schemetotal") && !hm.get("schemetotal").equals(" ")) totalOpeningBal.put("schemetotal", hm.get("schemetotal").toString()); // }// end while 2 }// end while 1 final Iterator itr2 = part2.iterator(); while (itr2.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr2.next(); final Set keySet = hm.keySet(); final Iterator itr1 = keySet.iterator(); while (itr1.hasNext()) { final String str = (String) itr1.next(); for (int i = 0; i < dynamicSubSchemName.length; i++) if (totalOpeningBal.containsKey(dynamicSubSchemName[i])) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get(dynamicSubSchemName[i]).equals(" ") && str.equals(dynamicSubSchemName[i])) temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()) .add(new BigDecimal(hm.get(dynamicSubSchemName[i]).toString())); else temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()); totalOpeningBal.put(dynamicSubSchemName[i], temp); } else if (str.equals(dynamicSubSchemName[i]) && !hm.get(dynamicSubSchemName[i]).equals(" ")) totalOpeningBal.put(dynamicSubSchemName[i], hm.get(dynamicSubSchemName[i]).toString()); // for scheme total if (totalOpeningBal.containsKey("schemetotal")) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get("schemetotal").equals(" ") && str.equals("schemetotal")) temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()).add(new BigDecimal(hm .get("schemetotal").toString())); else temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()); totalOpeningBal.put("schemetotal", temp); } else if (str.equals("schemetotal") && !hm.get("schemetotal").equals(" ")) totalOpeningBal.put("schemetotal", hm.get("schemetotal").toString()); // }// end while 2 }// end while 1 final Iterator itr3 = part3.iterator(); while (itr3.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr3.next(); final Set keySet = hm.keySet(); final Iterator itr1 = keySet.iterator(); while (itr1.hasNext()) { final String str = (String) itr1.next(); for (int i = 0; i < dynamicSubSchemName.length; i++) if (totalOpeningBal.containsKey(dynamicSubSchemName[i])) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get(dynamicSubSchemName[i]).equals(" ") && str.equals(dynamicSubSchemName[i])) temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()) .add(new BigDecimal(hm.get(dynamicSubSchemName[i]).toString())); else temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()); totalOpeningBal.put(dynamicSubSchemName[i], temp); } else if (str.equals(dynamicSubSchemName[i]) && !hm.get(dynamicSubSchemName[i]).equals(" ")) totalOpeningBal.put(dynamicSubSchemName[i], hm.get(dynamicSubSchemName[i]).toString()); // for scheme total if (totalOpeningBal.containsKey("schemetotal")) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get("schemetotal").equals(" ") && str.equals("schemetotal")) temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()).add(new BigDecimal(hm .get("schemetotal").toString())); else temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()); totalOpeningBal.put("schemetotal", temp); } else if (str.equals("schemetotal") && !hm.get("schemetotal").equals(" ")) totalOpeningBal.put("schemetotal", hm.get("schemetotal").toString()); // }// end while 2 }// end while 1 if (!totalReceiptsSubHead.equals("TotalReceipts")) { data = new LinkedHashMap(); data.put("particulars", "<b>Total Receipts including Opening Balance</b>"); for (final String element : dynamicSubSchemName) data.put(element, "<b>" + totalOpeningBal.get(element).toString() + "</b>"); // data.put("subschemetotal","<b>"+(totalOpeningBal.get("subschemetotal").toString())+"</b>"); data.put("schemetotal", "<b>" + totalOpeningBal.get("schemetotal").toString() + "</b>"); partTotalReceipts.add(data); totalReceiptsSubHead = "TotalReceipts"; } // cumulative for Total Receipts including Opening Balance end // cumulative for Total Closing Balance start final Iterator itr4 = part4.iterator(); while (itr4.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr4.next(); final Set keySet = hm.keySet(); final Iterator itr1 = keySet.iterator(); while (itr1.hasNext()) { final String str = (String) itr1.next(); for (int i = 0; i < dynamicSubSchemName.length; i++) if (totalOpeningBal.containsKey(dynamicSubSchemName[i])) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get(dynamicSubSchemName[i]).equals(" ") && str.equals(dynamicSubSchemName[i])) temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()) .subtract(new BigDecimal(hm.get(dynamicSubSchemName[i]).toString())); else temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()); totalOpeningBal.put(dynamicSubSchemName[i], temp); } else if (str.equals(dynamicSubSchemName[i]) && !hm.get(dynamicSubSchemName[i]).equals(" ")) totalOpeningBal.put(dynamicSubSchemName[i], hm.get(dynamicSubSchemName[i]).toString()); // for scheme total if (totalOpeningBal.containsKey("schemetotal")) { BigDecimal temp = new BigDecimal("0.00"); if (!hm.get("schemetotal").equals(" ") && str.equals("schemetotal")) temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()).subtract(new BigDecimal(hm .get("schemetotal").toString())); else temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()); totalOpeningBal.put("schemetotal", temp); } else if (str.equals("schemetotal") && !hm.get("schemetotal").equals(" ")) totalOpeningBal.put("schemetotal", hm.get("schemetotal").toString()); // }// end while 2 }// end while 1 final Iterator itr5 = part5.iterator(); while (itr5.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr5.next(); final Set keySet = hm.keySet(); final Iterator itr1 = keySet.iterator(); while (itr1.hasNext()) { final String str = (String) itr1.next(); for (int i = 0; i < dynamicSubSchemName.length; i++) if (totalOpeningBal.containsKey(dynamicSubSchemName[i])) { BigDecimal temp = new BigDecimal(0); if (!hm.get(dynamicSubSchemName[i]).equals(" ") && str.equals(dynamicSubSchemName[i])) temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()) .subtract(new BigDecimal(hm.get(dynamicSubSchemName[i]).toString())); else temp = new BigDecimal(totalOpeningBal.get(dynamicSubSchemName[i]).toString()); totalOpeningBal.put(dynamicSubSchemName[i], temp); } else if (str.equals(dynamicSubSchemName[i]) && !hm.get(dynamicSubSchemName[i]).equals(" ")) totalOpeningBal.put(dynamicSubSchemName[i], hm.get(dynamicSubSchemName[i]).toString()); // for scheme total if (totalOpeningBal.containsKey("schemetotal")) { BigDecimal temp = new BigDecimal(0); if (!hm.get("schemetotal").equals(" ") && str.equals("schemetotal")) temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()).subtract(new BigDecimal(hm .get("schemetotal").toString())); else temp = new BigDecimal(totalOpeningBal.get("schemetotal").toString()); totalOpeningBal.put("schemetotal", temp); } else if (str.equals("schemetotal") && !hm.get("schemetotal").equals(" ")) totalOpeningBal.put("schemetotal", hm.get("schemetotal").toString()); // }// end while 2 }// end while 1 if (!closingBalanceSubHead.equals("ClosingBalance ")) { data = new LinkedHashMap(); data.put("particulars", "<b>Closing Balance</b>"); for (final String element : dynamicSubSchemName) data.put(element, "<b>" + totalOpeningBal.get(element).toString() + "</b>"); // data.put("subschemetotal","<b>"+(totalOpeningBal.get("subschemetotal").toString())+"</b>"); data.put("schemetotal", "<b>" + totalOpeningBal.get("schemetotal").toString() + "</b>"); partTotalClosingBal.add(data); totalReceiptsSubHead = "ClosingBalance"; } // cumulative for Total Closing Balance end } catch (final Exception e) { LOGGER.error("Exp in Scheme Report==" + e.getMessage()); throw taskExc; } // ArrayList finalReportList=(ArrayList)part1; final ArrayList finalReportList = new ArrayList(); final Iterator itrOpBal = part1.iterator(); while (itrOpBal.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itrOpBal.next(); finalReportList.add(hm); } final Iterator itr1 = part2.iterator(); while (itr1.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr1.next(); finalReportList.add(hm); } final Iterator itr2 = part3.iterator(); while (itr2.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr2.next(); finalReportList.add(hm); } final Iterator itrTotalR = partTotalReceipts.iterator(); while (itrTotalR.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itrTotalR.next(); finalReportList.add(hm); } final Iterator itr3 = part4.iterator(); while (itr3.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr3.next(); finalReportList.add(hm); } final Iterator itr4 = part5.iterator(); while (itr4.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itr4.next(); finalReportList.add(hm); } final Iterator itrClosingTotal = partTotalClosingBal.iterator(); while (itrClosingTotal.hasNext()) { final LinkedHashMap hm = (LinkedHashMap) itrClosingTotal.next(); finalReportList.add(hm); } return finalReportList; } public String formatAmtTwoDecimal(final String amt) { // BigDecimal ammt= new BigDecimal(0.000); NumberFormat formatter; formatter = new DecimalFormat("##############0.00"); return formatter.format(new BigDecimal(amt)); } } // CLASS