/* * 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. */ package org.egov.services.cheque; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.egov.commons.Accountdetailtype; import org.egov.commons.Bankaccount; import org.egov.commons.CChartOfAccounts; import org.egov.commons.CVoucherHeader; import org.egov.commons.EgwStatus; import org.egov.commons.dao.ChartOfAccountsDAO; import org.egov.commons.dao.EgwStatusHibernateDAO; import org.egov.commons.utils.EntityType; import org.egov.infra.admin.master.entity.AppConfigValues; import org.egov.infra.admin.master.service.AppConfigValueService; import org.egov.infra.exception.ApplicationException; import org.egov.infra.exception.ApplicationRuntimeException; import org.egov.infstr.services.PersistenceService; import org.egov.model.payment.ChequeAssignment; import org.egov.model.payment.Paymentheader; import org.egov.utils.Constants; import org.egov.utils.FinancialConstants; import org.hibernate.Query; import org.hibernate.transform.Transformers; import org.hibernate.type.BigDecimalType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import java.io.Serializable; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ChequeAssignmentService extends PersistenceService<Paymentheader, Long> { public SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Constants.LOCALE); public final SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Constants.LOCALE); @Autowired private AppConfigValueService appConfigValuesService; @Autowired @Qualifier("persistenceService") private PersistenceService persistenceService; private Query query; private List<ChequeAssignment> finalCBillChequeAssignmentList; private List<ChequeAssignment> tempExpenseChequeAssignmentList; private List<ChequeAssignment> finalChequeAssignmentList; private static final Logger LOGGER = Logger.getLogger(ChequeAssignmentService.class); private static final String DELIMETER = "~"; private String approvedstatus = ""; private String statusId = ""; private List<BigDecimal> cBillGlcodeIdList = null; private String instrumentReconciledStatus = ""; private String instrumentNewStatus = ""; private String filterConditions = ""; public List<CChartOfAccounts> purchaseBillGlcodeList = new ArrayList<CChartOfAccounts>(); public List<CChartOfAccounts> worksBillGlcodeList = new ArrayList<CChartOfAccounts>(); public List<CChartOfAccounts> salaryBillGlcodeList = new ArrayList<CChartOfAccounts>(); public List<CChartOfAccounts> contingentBillGlcodeList = new ArrayList<CChartOfAccounts>(); @Autowired private ChartOfAccountsDAO coaDAO; @Autowired private EgwStatusHibernateDAO egwStatusDAO; public ChequeAssignmentService() { super(Paymentheader.class); } public ChequeAssignmentService(final Class<Paymentheader> type) { super(type); } @SuppressWarnings("unchecked") public void setPersistenceService(final PersistenceService persistenceService) { this.persistenceService = persistenceService; } // *************IMPORTANT - CALL THIS METHOD BEFORE CALLING ANYTHING ELSE********************************************** public void setStatusAndFilterValues(final Map<String, String[]> parameters, final CVoucherHeader voucherHeader) throws ParseException { filterConditions = getFilterParamaters(parameters, voucherHeader); setStatusValues(); } // This method returns the Direct Bank Payments and Bill Payments for Expense, Contractor and Supplier bills for mode Cheque public List<ChequeAssignment> getPaymentVoucherNotInInstrument(final Map<String, String[]> parameters) throws ApplicationException, ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getPaymentVoucherNotInInstrument..."); finalChequeAssignmentList.addAll(getExpenseBillPayments()); finalChequeAssignmentList.addAll(getDirectBankPaymentsForChequeAssignment()); finalChequeAssignmentList.addAll(getContractorSupplierPaymentsForChequeAssignment(parameters)); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getPaymentVoucherNotInInstrument."); return finalChequeAssignmentList; } // This method returns the Bill Payments for Expense for mode Cheque public List<ChequeAssignment> getExpenseBillPayments() throws ParseException, NumberFormatException, ApplicationException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getExpenseBillPayments..."); getExpenseBillPaymentsHavingNoCheques(); getExpenseBillPaymentsWithNoSurrenderedCheque(); getExpenseBillPaymentsWithSurrenderedCheques(); if (tempExpenseChequeAssignmentList != null && tempExpenseChequeAssignmentList.size() != 0) prepareChequeList(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getExpenseBillPayments."); return finalCBillChequeAssignmentList; } // This method returns the consolidated mode payments that are not for salary or remittance @SuppressWarnings("unchecked") public List<ChequeAssignment> getPaymentVouchersConsolidatedMode(final Map<String, String[]> parameters, final CVoucherHeader voucherHeader) throws ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getPaymentVouchersConsolidatedMode..."); final String filterConditions = getFilterParamaters(parameters, voucherHeader); setStatusValues(); query = getSession() .createSQLQuery( "select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,vh.voucherDate as voucherDate,sum(misbill.paidamount) as paidAmount,current_date as chequeDate from Paymentheader ph,voucherheader vh,vouchermis vmis, Miscbilldetail misbill " + " where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and vh.id not in (select voucherHeaderId from egf_InstrumentVoucher iv, EGF_INSTRUMENTHEADER ih where iv.INSTRUMENTHEADERID = ih.id and ih.ID_STATUS in (" + statusId + ") ) and vh.type='" + FinancialConstants.STANDARD_VOUCHER_TYPE_PAYMENT + "' and vh.name NOT IN ('" + FinancialConstants.PAYMENTVOUCHER_NAME_REMITTANCE + "' , '" + FinancialConstants.PAYMENTVOUCHER_NAME_SALARY + "') " + " group by vh.id,vh.voucherNumber,vh.voucherDate order by vh.voucherNumber ") .addScalar("voucherid", BigDecimalType.INSTANCE).addScalar("voucherNumber").addScalar("voucherDate") .addScalar("paidAmount", BigDecimalType.INSTANCE) .addScalar("chequeDate") .setResultTransformer(Transformers.aliasToBean(ChequeAssignment.class)); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getPaymentVouchersConsolidatedMode."); return query.list(); } @SuppressWarnings("unchecked") public List<ChequeAssignment> getContractorSupplierPaymentsForChequeAssignment(final Map<String, String[]> parameters) throws ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getContractorSupplierPaymentsForChequeAssignment..."); final Bankaccount ba = (Bankaccount) persistenceService.find(" from Bankaccount where id=?", Long.valueOf(parameters.get("bankaccount")[0])); String billCondition = "";// "'"+FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT+"'"; if (null != parameters.get("voucherName") && null != parameters.get("voucherName")[0] && FinancialConstants.PAYMENTVOUCHER_NAME_PENSION.equalsIgnoreCase(parameters.get("voucherName")[0])) billCondition = " in ('" + FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION + "') "; else billCondition = " not in ('" + FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT + "','" + FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION + "')"; final String supplierBillPaymentQuery = "select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,vh.voucherDate as voucherDate ,0 as detailtypeid ,0 as detailkeyid ,misbill.paidto as paidTo,sum(misbill.paidamount) as paidAmount,current_date as chequeDate " + " from Paymentheader ph,voucherheader vh,vouchermis vmis, Miscbilldetail misbill ,voucherheader billvh, eg_billregister br, eg_billregistermis billmis, generalledger gl, " + " egf_instrumentvoucher iv right outer join voucherheader pvh on (pvh.id=iv.VOUCHERHEADERID) " + " where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vh.name='Bill Payment' and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and gl.voucherheaderid =vh.id and gl.creditamount>0 and gl.glcodeid in (" + ba.getChartofaccounts().getId() + ") and br.id=billmis.billid and billmis.voucherheaderid=billvh.id and br.expendituretype " + billCondition + " and misbill.billvhid=billvh.id " + " and pvh.id=vh.id and iv.id IS NULL group by vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto " + " union select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,vh.voucherDate as voucherDate ,0 as detailtypeid ,0 as detailkeyid ,misbill.paidto as paidTo,sum(misbill.paidamount) as paidAmount,current_date as chequeDate " + " from Paymentheader ph,voucherheader vh,vouchermis vmis, Miscbilldetail misbill ,voucherheader billvh, eg_billregister br, eg_billregistermis billmis, generalledger gl, " + " egf_instrumentvoucher iv right outer join voucherheader pvh on (pvh.id=iv.VOUCHERHEADERID) left outer join egf_instrumentheader ih on (ih.ID=iv.INSTRUMENTHEADERID) " + " where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vh.name='Bill Payment' and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and gl.voucherheaderid =vh.id and gl.creditamount>0 and gl.glcodeid in (" + ba.getChartofaccounts().getId() + ") and br.id=billmis.billid and billmis.voucherheaderid=billvh.id and br.expendituretype " + billCondition + " and misbill.billvhid=billvh.id " + " and pvh.id=vh.id and ih.id IN (SELECT MAX(ih.id) FROM egf_instrumentvoucher iv RIGHT OUTER JOIN voucherheader pvh ON (pvh.id=iv.VOUCHERHEADERID) LEFT OUTER JOIN " + " egf_instrumentheader ih ON (ih.ID =iv.INSTRUMENTHEADERID) WHERE pvh.id =vh.id AND ih.payto =misbill.paidto) AND ih.ID_STATUS NOT IN (" + statusId + ") group by vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto " + " union select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,vh.voucherDate as voucherDate ,0 as detailtypeid ,0 as detailkeyid ,misbill.paidto as paidTo,sum(misbill.paidamount) as paidAmount,current_date as chequeDate " + " from Paymentheader ph,voucherheader vh,vouchermis vmis, Miscbilldetail misbill ,voucherheader billvh, eg_billregister br, eg_billregistermis billmis, generalledger gl " + " where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vh.name='Bill Payment' and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and gl.voucherheaderid =vh.id and gl.creditamount>0 and gl.glcodeid in (" + ba.getChartofaccounts().getId() + ") and br.id=billmis.billid and billmis.voucherheaderid=billvh.id and br.expendituretype " + billCondition + " and misbill.billvhid=billvh.id " + " and misbill.paidto NOT IN (SELECT DISTINCT(ih.payto) FROM egf_instrumentvoucher iv RIGHT OUTER JOIN voucherheader pvh " + " ON (pvh.id=iv.VOUCHERHEADERID) LEFT OUTER JOIN egf_instrumentheader ih ON (ih.ID=iv.INSTRUMENTHEADERID) WHERE pvh.id=vh.id AND ih.ID_STATUS IN (" + statusId + ")) " + " group by vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto order by paidto,voucherNumber "; query = getSession().createSQLQuery(supplierBillPaymentQuery) .addScalar("voucherid", BigDecimalType.INSTANCE).addScalar("voucherNumber").addScalar("voucherDate") .addScalar("detailtypeid", BigDecimalType.INSTANCE) .addScalar("detailkeyid", BigDecimalType.INSTANCE).addScalar("paidTo") .addScalar("paidAmount", BigDecimalType.INSTANCE).addScalar("chequeDate") .setResultTransformer(Transformers.aliasToBean(ChequeAssignment.class)); if (LOGGER.isDebugEnabled()) LOGGER.debug("CONTRACTOR/SUPLLIER BILL PAYMENT QUERY - " + supplierBillPaymentQuery); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getContractorSupplierPaymentsForChequeAssignment."); return query.list(); } @SuppressWarnings("unchecked") public List<ChequeAssignment> getDirectBankPaymentsForChequeAssignment() throws ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getDirectBankPaymentsForChequeAssignment..."); final String bankPaymentQuery = "select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,0 as detailtypeid ,0 as detailkeyid,vh.voucherDate as voucherDate ,misbill.paidto as paidTo,sum(misbill.paidamount) as paidAmount,current_date as chequeDate" + " From Paymentheader ph,voucherheader vh,vouchermis vmis, Miscbilldetail misbill, " + " egf_instrumentvoucher iv right outer join voucherheader pvh on (pvh.id=iv.VOUCHERHEADERID)" + " Where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vh.name in ('Direct Bank Payment','Advance Payment') and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and pvh.id=vh.id and iv.id IS NULL group by vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto " + " union select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,0 as detailtypeid ,0 as detailkeyid,vh.voucherDate as voucherDate ,misbill.paidto as paidTo,sum(misbill.paidamount) as paidAmount,current_date as chequeDate" + " From Paymentheader ph,voucherheader vh,vouchermis vmis, Miscbilldetail misbill, " + " egf_instrumentvoucher iv right outer join voucherheader pvh on (pvh.id=iv.VOUCHERHEADERID)" + " left outer join egf_instrumentheader ih on (ih.ID=iv.INSTRUMENTHEADERID)" + " Where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vh.name in ('Direct Bank Payment','Advance Payment') and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and pvh.id=vh.id and ih.id IN (SELECT MAX(ih.id) FROM egf_instrumentvoucher iv RIGHT OUTER JOIN voucherheader pvh ON (pvh.id=iv.VOUCHERHEADERID) LEFT OUTER JOIN " + " egf_instrumentheader ih ON (ih.ID =iv.INSTRUMENTHEADERID) WHERE pvh.id =vh.id AND ih.payto =misbill.paidto) AND ih.ID_STATUS NOT IN (" + statusId + ") group by vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto " + " union select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,0 as detailtypeid ,0 as detailkeyid,vh.voucherDate as voucherDate ,misbill.paidto as paidTo,sum(misbill.paidamount) as paidAmount,current_date as chequeDate" + " From Paymentheader ph,voucherheader vh,vouchermis vmis, Miscbilldetail misbill " + " Where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vh.name in ('Direct Bank Payment','Advance Payment') and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and misbill.paidto NOT IN (SELECT DISTINCT(ih.payto) FROM egf_instrumentvoucher iv RIGHT OUTER JOIN voucherheader pvh " + " ON (pvh.id=iv.VOUCHERHEADERID) LEFT OUTER JOIN egf_instrumentheader ih ON (ih.ID=iv.INSTRUMENTHEADERID) WHERE pvh.id=vh.id AND ih.ID_STATUS IN (" + statusId + ")) group by vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto " + " order by paidto,voucherNumber "; query = getSession().createSQLQuery(bankPaymentQuery) .addScalar("voucherid", BigDecimalType.INSTANCE).addScalar("voucherNumber") .addScalar("detailtypeid", BigDecimalType.INSTANCE).addScalar("detailkeyid", BigDecimalType.INSTANCE) .addScalar("voucherDate").addScalar("paidTo").addScalar("paidAmount", BigDecimalType.INSTANCE) .addScalar("chequeDate") .setResultTransformer(Transformers.aliasToBean(ChequeAssignment.class)); if (LOGGER.isDebugEnabled()) LOGGER.debug("DIRECT BANK PAYMENT QUERY - " + bankPaymentQuery); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getDirectBankPaymentsForChequeAssignment."); return query.list(); } // Getting only those payments for which cheques have not been assigned. @SuppressWarnings("unchecked") private void getExpenseBillPaymentsHavingNoCheques() throws NumberFormatException, ApplicationException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getExpenseBillPaymentsHavingNoCheques... NOT YET ASSIGNED"); List<ChequeAssignment> billChequeAssignmentList = null; final List<Long> billVHIds = new ArrayList<Long>(); final List<Long> billVHIdsForDebtitSideCC = new ArrayList<Long>(); List<Object[]> generalLedgerDetailList = new ArrayList<Object[]>(); List<Object[]> generalLedgerDetailListForDebtitSideCC = new ArrayList<Object[]>(); final Map<Long, List<Object[]>> billVHIdAndgeneralLedgerDetailListMap = new HashMap<Long, List<Object[]>>(); final Map<Long, List<Object[]>> billVHIdAndGLDListForDebtitSideCCMap = new HashMap<Long, List<Object[]>>(); final String strQuery = "select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,vh.voucherDate as voucherDate ,0 as detailtypeid ,0 as detailkeyid ," + " misbill.paidto as paidTo,case when sum(misbill.paidamount) is null then 0 else sum(misbill.paidamount) end as paidAmount,current_date as chequeDate, misbill.billvhid as billVHId " + " from Paymentheader ph,egf_instrumentvoucher iv right outer join voucherheader vh on (vh.id=iv.VOUCHERHEADERID) ,vouchermis vmis, Miscbilldetail misbill, generalledger gl ,voucherheader billvh, eg_billregister br,eg_billregistermis billmis " + " where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and gl.voucherheaderid =vh.id and gl.creditamount>0 and misbill.billvhid=billvh.id and br.id=billmis.billid and billmis.voucherheaderid=billvh.id and br.expendituretype='" + FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT + "' and iv.id is null " + " group by misbill.billvhid,vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto "; query = getSession().createSQLQuery(strQuery) .addScalar("voucherid", BigDecimalType.INSTANCE).addScalar("voucherNumber").addScalar("voucherDate") .addScalar("paidAmount", BigDecimalType.INSTANCE) .addScalar("chequeDate").addScalar("paidTo").addScalar("billVHId", BigDecimalType.INSTANCE) .addScalar("detailtypeid", BigDecimalType.INSTANCE) .addScalar("detailkeyid", BigDecimalType.INSTANCE) .setResultTransformer(Transformers.aliasToBean(ChequeAssignment.class)); if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED No cheques - " + strQuery); billChequeAssignmentList = query.list(); for (final ChequeAssignment ca : billChequeAssignmentList) billVHIds.add(ca.getBillVHId().longValue()); if (billVHIds != null && billVHIds.size() > 0) generalLedgerDetailList = getDetailTypeKeyAmtForBillVHId(billVHIds); for (final Object[] gld : generalLedgerDetailList) if (billVHIdAndgeneralLedgerDetailListMap.containsKey(getLongValue(gld[3]))) billVHIdAndgeneralLedgerDetailListMap.get(getLongValue(gld[3])).add(gld); else { final List<Object[]> generalLedgerDetails = new ArrayList<Object[]>(); generalLedgerDetails.add(gld); billVHIdAndgeneralLedgerDetailListMap.put(getLongValue(gld[3]), generalLedgerDetails); } for (final ChequeAssignment ca : billChequeAssignmentList) { final List<Object[]> detailTypeKeyAmtList = billVHIdAndgeneralLedgerDetailListMap.get(ca.getBillVHId().longValue()); if (detailTypeKeyAmtList == null || detailTypeKeyAmtList.size() == 0) billVHIdsForDebtitSideCC.add(ca.getBillVHId().longValue()); } if (billVHIdsForDebtitSideCC != null && billVHIdsForDebtitSideCC.size() > 0) generalLedgerDetailListForDebtitSideCC = getDetailTypeKeyAmtForDebtitSideCC(billVHIdsForDebtitSideCC); for (final Object[] gld : generalLedgerDetailListForDebtitSideCC) if (billVHIdAndGLDListForDebtitSideCCMap.containsKey(getLongValue(gld[3]))) billVHIdAndGLDListForDebtitSideCCMap.get(getLongValue(gld[3])).add(gld); else { final List<Object[]> generalLedgerDetails = new ArrayList<Object[]>(); generalLedgerDetails.add(gld); billVHIdAndGLDListForDebtitSideCCMap.put(getLongValue(gld[3]), generalLedgerDetails); } for (final ChequeAssignment chqAssgn : billChequeAssignmentList) { if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: Start Checking for Billvhid " + chqAssgn.getBillVHId()); if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: checking getDetailTypeKeyAmtForBillVHId for Net payable codes"); List<Object[]> detailTypeKeyAmtList = billVHIdAndgeneralLedgerDetailListMap.get(chqAssgn.getBillVHId().longValue()) != null ? billVHIdAndgeneralLedgerDetailListMap .get(chqAssgn.getBillVHId().longValue()) : new ArrayList<Object[]>(); if (detailTypeKeyAmtList != null && detailTypeKeyAmtList.size() != 0) { if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: detailTypeKeyAmtList for Billvhid " + chqAssgn.getBillVHId() + " size :" + detailTypeKeyAmtList.size()); if (detailTypeKeyAmtList.size() < 2) { tempExpenseChequeAssignmentList.add(chqAssgn); if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: adding inside detailTypeKeyAmtList.size()<2 block to Assignment List\n" + chqAssgn); } else for (final Object[] detailTypeKeyAmtObj : detailTypeKeyAmtList) { final ChequeAssignment ca = new ChequeAssignment(); ca.setVoucherid(new BigDecimal(chqAssgn.getVoucherid())); ca.setVoucherNumber(chqAssgn.getVoucherNumber()); if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: Voucher Number" + chqAssgn.getVoucherNumber()); ca.setVoucherDate(chqAssgn.getVoucherDate()); ca.setPaidAmount((BigDecimal) detailTypeKeyAmtObj[2]); ca.setChequeDate(chqAssgn.getChequeDate()); ca.setPaidTo(getEntity(Integer.parseInt(detailTypeKeyAmtObj[0].toString()), (Serializable) detailTypeKeyAmtObj[1]).getName()); ca.setDetailtypeid((BigDecimal.valueOf(Integer.valueOf(detailTypeKeyAmtObj[0].toString()).longValue()))); ca.setDetailkeyid((BigDecimal.valueOf(Integer.valueOf(detailTypeKeyAmtObj[1].toString()).longValue()))); if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: detailTypeKeyAmtList.size()>=2 block to Assignment List\n" + ca); tempExpenseChequeAssignmentList.add(ca); } } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: checking getDetailTypeKeyAmtForDebtitSideCC for " + chqAssgn.getBillVHId()); detailTypeKeyAmtList = billVHIdAndGLDListForDebtitSideCCMap.get(chqAssgn.getBillVHId().longValue()) != null ? billVHIdAndGLDListForDebtitSideCCMap .get(chqAssgn.getBillVHId().longValue()) : new ArrayList<Object[]>(); if (detailTypeKeyAmtList == null || detailTypeKeyAmtList.size() == 0) { if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: adding to checkassignlist as detailTypeKeyAmtList is null or zero" + chqAssgn); tempExpenseChequeAssignmentList.add(chqAssgn); } else if (detailTypeKeyAmtList != null && detailTypeKeyAmtList.size() == 1) { if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: adding to checkassignlist as detailTypeKeyAmtList is 1" + chqAssgn); tempExpenseChequeAssignmentList.add(chqAssgn); } else { BigDecimal deduction = BigDecimal.valueOf(0); // THIS dedcution will work for only one subledger .If more than one you cannot have non subledger dedcution // as // you can not distribute that among multiple people // Also this needs same subledger entity used on debit and credit side if (detailTypeKeyAmtList.size() == 1) deduction = getNonSubledgerDeductions(chqAssgn.getBillVHId()); Map<String, BigDecimal> dedMap = new HashMap<String, BigDecimal>(); dedMap = getSubledgerAmtForDeduction(chqAssgn.getBillVHId()); String key = ""; for (final Object[] obj : detailTypeKeyAmtList) { final ChequeAssignment c = new ChequeAssignment(); c.setChequeDate(chqAssgn.getChequeDate()); c.setVoucherHeaderId(chqAssgn.getVoucherid()); c.setVoucherNumber(chqAssgn.getVoucherNumber()); if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: Voucher Number :" + chqAssgn.getVoucherNumber()); c.setVoucherDate(chqAssgn.getVoucherDate()); c.setDetailtypeid((BigDecimal) obj[0]); c.setDetailkeyid((BigDecimal) obj[1]); key = obj[0].toString() + DELIMETER + obj[1].toString(); // deduct only if deduction is available if (deduction != null) obj[2] = ((BigDecimal) obj[2]).subtract(deduction); c.setPaidAmount(dedMap.get(key) == null ? (BigDecimal) obj[2] : ((BigDecimal) obj[2]).subtract(dedMap .get(key))); c.setPaidTo(getEntity(Integer.valueOf(obj[0].toString()), (Serializable) obj[1]).getName()); if (LOGGER.isDebugEnabled()) LOGGER.debug("NOT YET ASSIGNED: detailTypeKeyAmtList.size()>=2 block to Assignment List\n" + c); tempExpenseChequeAssignmentList.add(c); } } } } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getExpenseBillPaymentsHavingNoCheques."); } private BigDecimal getNonSubledgerDeductions(final BigDecimal billVHId) { final Query query = getSession().createSQLQuery("SELECT SUM(gl.creditamount) " + "FROM generalledger gl " + "WHERE gl.creditamount>0 " + "AND gl.glcodeid NOT IN (:glcodeIdList) " + "AND voucherheaderid =" + billVHId + " " + "AND gl.glcodeid NOT IN " + "(SELECT glcodeid FROM chartofaccountdetail) order by gl.glcode"); query.setParameterList("glcodeIdList", cBillGlcodeIdList); if (query.list() != null && !query.list().isEmpty()) return (BigDecimal) query.list().get(0); else return BigDecimal.valueOf(0); } // Getting only those payments for which cheques have been assigned but no cheque is surrendered. @SuppressWarnings("unchecked") private void getExpenseBillPaymentsWithNoSurrenderedCheque() throws NumberFormatException, ApplicationException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getExpenseBillPaymentsWithNoSurrenderedCheque...ALREADY ASSIGNED: "); final List<Long> billVHIds = new ArrayList<Long>(); final List<Long> billVHIdsForDebtitSideCC = new ArrayList<Long>(); final Map<Long, List<Object[]>> billVHIdAndgeneralLedgerDetailListMap = new HashMap<Long, List<Object[]>>(); final Map<Long, List<Object[]>> billVHIdAndGLDListForDebtitSideCCMap = new HashMap<Long, List<Object[]>>(); List<Object[]> generalLedgerDetailList = new ArrayList<Object[]>(); List<Object[]> generalLedgerDetailListForDebtitSideCC = new ArrayList<Object[]>(); List<ChequeAssignment> billChequeAssignmentList = null; final String strQuery = " select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,vh.voucherDate as voucherDate ,0 as detailtypeid ,0 as detailkeyid ," + " misbill.paidto as paidTo,case when sum(misbill.paidamount) is null then 0 else sum(misbill.paidamount) end as paidAmount,current_date as chequeDate,misbill.billvhid as billVHId " + " from Paymentheader ph, voucherheader vh ,vouchermis vmis, Miscbilldetail misbill , generalledger gl,voucherheader billvh, eg_billregister br,eg_billregistermis billmis " + " where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and gl.voucherheaderid =vh.id and gl.creditamount>0 and misbill.billvhid=billvh.id and br.id=billmis.billid and billmis.voucherheaderid=billvh.id and br.expendituretype='" + FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT + "' " + " and not exists(select 1 from egf_instrumentvoucher iv, egf_instrumentheader ih where ih.id= iv.instrumentheaderid and iv.voucherheaderid=vh.id and ih.id_status not in (" + statusId + ") ) " + " and exists (select 1 from egf_instrumentvoucher iv where iv.voucherheaderid=vh.id) group by misbill.billvhid,vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto "; final Query query = getSession().createSQLQuery(strQuery) .addScalar("voucherid", BigDecimalType.INSTANCE).addScalar("voucherNumber").addScalar("voucherDate") .addScalar("paidAmount", BigDecimalType.INSTANCE) .addScalar("chequeDate").addScalar("paidTo").addScalar("billVHId", BigDecimalType.INSTANCE) .addScalar("detailtypeid", BigDecimalType.INSTANCE) .addScalar("detailkeyid", BigDecimalType.INSTANCE) .setResultTransformer(Transformers.aliasToBean(ChequeAssignment.class)); if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: No surrendered cheques - " + strQuery); billChequeAssignmentList = query.list(); for (final ChequeAssignment ca : billChequeAssignmentList) billVHIds.add(ca.getBillVHId().longValue()); if (billVHIds != null && billVHIds.size() > 0) generalLedgerDetailList = getDetailTypeKeyAmtForBillVHId(billVHIds); for (final Object[] gld : generalLedgerDetailList) if (billVHIdAndgeneralLedgerDetailListMap.containsKey(getLongValue(gld[3]))) billVHIdAndgeneralLedgerDetailListMap.get(getLongValue(gld[3])).add(gld); else { final List<Object[]> generalLedgerDetails = new ArrayList<Object[]>(); generalLedgerDetails.add(gld); billVHIdAndgeneralLedgerDetailListMap.put(getLongValue(gld[3]), generalLedgerDetails); } for (final ChequeAssignment ca : billChequeAssignmentList) { final List<Object[]> detailTypeKeyAmtList = billVHIdAndgeneralLedgerDetailListMap.get(ca.getBillVHId().longValue()); if (detailTypeKeyAmtList == null || detailTypeKeyAmtList.size() == 0) billVHIdsForDebtitSideCC.add(ca.getBillVHId().longValue()); } if (billVHIdsForDebtitSideCC != null && billVHIdsForDebtitSideCC.size() > 0) generalLedgerDetailListForDebtitSideCC = getDetailTypeKeyAmtForDebtitSideCC(billVHIdsForDebtitSideCC); for (final Object[] gld : generalLedgerDetailListForDebtitSideCC) if (billVHIdAndGLDListForDebtitSideCCMap.containsKey(getLongValue(gld[3]))) billVHIdAndGLDListForDebtitSideCCMap.get(getLongValue(gld[3])).add(gld); else { final List<Object[]> generalLedgerDetails = new ArrayList<Object[]>(); generalLedgerDetails.add(gld); billVHIdAndGLDListForDebtitSideCCMap.put(getLongValue(gld[3]), generalLedgerDetails); } for (final ChequeAssignment chqAssgn : billChequeAssignmentList) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: Start Checking for Billvhid " + chqAssgn.getBillVHId()); if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: checking getDetailTypeKeyAmtForBillVHId for Net payable codes"); List<Object[]> detailTypeKeyAmtList = billVHIdAndgeneralLedgerDetailListMap.get(chqAssgn.getBillVHId().longValue()) != null ? billVHIdAndgeneralLedgerDetailListMap .get(chqAssgn.getBillVHId().longValue()) : new ArrayList<Object[]>(); if (detailTypeKeyAmtList != null && detailTypeKeyAmtList.size() != 0) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: detailTypeKeyAmtList for Billvhid " + chqAssgn.getBillVHId() + " size :" + detailTypeKeyAmtList.size()); if (detailTypeKeyAmtList.size() < 2)// single subledger { final String queryString = " select distinct(ih.payTo) from egf_InstrumentHeader ih, egf_InstrumentVoucher iv where iv.instrumentHeaderId=ih.id " + "and iv.voucherHeaderId=" + chqAssgn.getVoucherid() + " and ih.payTo=:payTo and ih.id_status in (" + statusId + ") "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: queryString" + queryString); final List<Object> payTo = getSession().createSQLQuery(queryString) .setString("payTo", chqAssgn.getPaidTo()).list(); if (payTo == null || payTo.size() == 0) { if (LOGGER.isDebugEnabled()) LOGGER.debug(" ALREADY ASSIGNED: adding to chequeAssignlist as payTo s null or size 0" + chqAssgn); tempExpenseChequeAssignmentList.add(chqAssgn); } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: Not adding continuing"); continue; } } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: Entering detailTypeKeyAmtList.size()>2 code"); for (final Object[] detailTypeKeyAmtObj : detailTypeKeyAmtList) { String queryString = " select distinct(ih.payTo) from egf_InstrumentHeader ih, egf_InstrumentVoucher iv where " + "iv.instrumentHeaderId=ih.id and iv.voucherHeaderId=" + chqAssgn.getVoucherid() + " " + "and ih.detailTypeId=" + detailTypeKeyAmtObj[0] + " and ih.detailKeyId=" + detailTypeKeyAmtObj[1] + " " + "and ih.id_status in (" + statusId + ") "; if (LOGGER.isDebugEnabled()) LOGGER.debug("queryString" + queryString); List<Object> payTo = getSession().createSQLQuery(queryString).list(); if (payTo == null || payTo.size() == 0) { // this check will avoid already assigned by single subledger take subleger logic as it should be // single subledger take payto queryString = " select distinct(ih.payTo) from egf_InstrumentHeader ih, egf_InstrumentVoucher iv where iv.instrumentHeaderId=ih.id " + "and iv.voucherHeaderId=" + chqAssgn.getVoucherid() + " and ih.payTo=:payTo and ih.id_status in (" + statusId + ") "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: queryString" + queryString); payTo = getSession().createSQLQuery(queryString) .setString("payTo", chqAssgn.getPaidTo()).list(); if (payTo != null) continue; final ChequeAssignment ca = new ChequeAssignment(); ca.setVoucherid(new BigDecimal(chqAssgn.getVoucherid())); ca.setVoucherNumber(chqAssgn.getVoucherNumber()); ca.setVoucherDate(chqAssgn.getVoucherDate()); ca.setPaidAmount((BigDecimal) detailTypeKeyAmtObj[2]); ca.setChequeDate(chqAssgn.getChequeDate()); ca.setPaidTo(getEntity(Integer.parseInt(detailTypeKeyAmtObj[0].toString()), (Serializable) detailTypeKeyAmtObj[1]).getName()); ca.setDetailtypeid((BigDecimal) detailTypeKeyAmtObj[0]); ca.setDetailkeyid((BigDecimal) detailTypeKeyAmtObj[1]); if (LOGGER.isDebugEnabled()) LOGGER.debug(" ALREADY ASSIGNED: adding to chequeAssignlist" + ca); tempExpenseChequeAssignmentList.add(ca); } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: Not adding continuing"); continue; } } } } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: entering getDetailTypeKeyAmtForDebtitSideCC "); detailTypeKeyAmtList = billVHIdAndGLDListForDebtitSideCCMap.get(chqAssgn.getBillVHId().longValue()) != null ? billVHIdAndGLDListForDebtitSideCCMap .get(chqAssgn.getBillVHId().longValue()) : new ArrayList<Object[]>(); if (detailTypeKeyAmtList == null || detailTypeKeyAmtList.size() == 0) { final String queryString = " select distinct(ih.payTo) from egf_InstrumentHeader ih, egf_InstrumentVoucher iv where iv.instrumentHeaderId=ih.id and iv.voucherHeaderId=" + chqAssgn.getVoucherid() + " and ih.payTo =:payTo and ih.id_status in (" + statusId + ") "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: queryString" + queryString); final List<Object> payTo = getSession().createSQLQuery(queryString) .setString("payTo", chqAssgn.getPaidTo()).list(); if (payTo == null || payTo.size() == 0) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: adding to chequeAssignlist as payto is null or 0" + chqAssgn); tempExpenseChequeAssignmentList.add(chqAssgn); } } else { Map<String, BigDecimal> dedMap = new HashMap<String, BigDecimal>(); dedMap = getSubledgerAmtForDeduction(chqAssgn.getBillVHId()); String key = ""; for (final Object[] obj : detailTypeKeyAmtList) { String queryString = " select distinct(ih.payTo) from egf_InstrumentHeader ih, egf_InstrumentVoucher iv where iv.instrumentHeaderId=ih.id and iv.voucherHeaderId=" + chqAssgn.getVoucherid() + " and ih.detailTypeId=" + obj[0] + " and ih.detailKeyId=" + obj[1] + " and ih.id_status in (" + statusId + ") "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: Querying for " + queryString); List<Object> payTo = getSession().createSQLQuery(queryString).list(); if (payTo == null || payTo.size() == 0) { // this check will avoid already assigned by single subledger take subleger logic as it should be // single subledger take payto queryString = " select distinct(ih.payTo) from egf_InstrumentHeader ih, egf_InstrumentVoucher iv where iv.instrumentHeaderId=ih.id " + "and iv.voucherHeaderId=" + chqAssgn.getVoucherid() + " and ih.payTo=:payTo and ih.id_status in (" + statusId + ") "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: queryString" + queryString); payTo = getSession().createSQLQuery(queryString) .setString("payTo", chqAssgn.getPaidTo()).list(); if (payTo != null) continue; final ChequeAssignment c = new ChequeAssignment(); c.setChequeDate(chqAssgn.getChequeDate()); c.setVoucherHeaderId(chqAssgn.getVoucherid()); c.setVoucherNumber(chqAssgn.getVoucherNumber()); c.setVoucherDate(chqAssgn.getVoucherDate()); c.setDetailtypeid((BigDecimal) obj[0]); c.setDetailkeyid((BigDecimal) obj[1]); key = obj[0].toString() + DELIMETER + obj[1].toString(); c.setPaidAmount(dedMap.get(key) == null ? (BigDecimal) obj[2] : ((BigDecimal) obj[2]) .subtract(dedMap.get(key))); c.setPaidTo(getEntity(Integer.valueOf(obj[0].toString()), (Serializable) obj[1]).getName()); if (LOGGER.isDebugEnabled()) LOGGER.debug("ALREADY ASSIGNED: adding to chequeAssignlist as from payTo==null || payTo.size()==0 \n" + c); tempExpenseChequeAssignmentList.add(c); } else continue; } } } } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getExpenseBillPaymentsWithNoSurrenderedCheque."); } // Getting only those payments associated with surrendered cheques @SuppressWarnings("unchecked") private void getExpenseBillPaymentsWithSurrenderedCheques() throws NumberFormatException, ApplicationException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getExpenseBillPaymentsWithSurrenderedCheques...ASSIGNED BUT SURRENDARD: "); List<ChequeAssignment> billChequeAssignmentList = null; final List<Long> billVHIds = new ArrayList<Long>(); final List<Long> billVHIdsForDebtitSideCC = new ArrayList<Long>(); final Map<Long, List<Object[]>> billVHIdAndgeneralLedgerDetailListMap = new HashMap<Long, List<Object[]>>(); final Map<Long, List<Object[]>> billVHIdAndGLDListForDebtitSideCCMap = new HashMap<Long, List<Object[]>>(); List<Object[]> generalLedgerDetailList = new ArrayList<Object[]>(); List<Object[]> generalLedgerDetailListForDebtitSideCC = new ArrayList<Object[]>(); final String strQuery = " select vh.id as voucherid ,vh.voucherNumber as voucherNumber ,vh.voucherDate as voucherDate ,0 as detailtypeid ,0 as detailkeyid ," + " misbill.paidto as paidTo,case when sum(misbill.paidamount)=null then 0 else sum(misbill.paidamount) end as paidAmount,current_date as chequeDate,misbill.billvhid as billVHId " + " from Paymentheader ph, voucherheader vh ,vouchermis vmis, Miscbilldetail misbill , generalledger gl,voucherheader billvh, eg_billregister br,eg_billregistermis billmis " + " where ph.voucherheaderid=misbill.payvhid and ph.voucherheaderid=vh.id and vmis.voucherheaderid= vh.id and vh.status =" + approvedstatus + " " + filterConditions + " " + " and gl.voucherheaderid =vh.id and gl.creditamount>0 and misbill.billvhid=billvh.id and br.id=billmis.billid and billmis.voucherheaderid=billvh.id and br.expendituretype='" + FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT + "' " + " and exists(select 1 from egf_instrumentvoucher iv, egf_instrumentheader ih where ih.id= iv.instrumentheaderid and iv.voucherheaderid=vh.id and ih.id_status not in (" + statusId + ") ) " + " group by misbill.billvhid,vh.id,vh.voucherNumber,vh.voucherDate,misbill.paidto "; final Query query = getSession().createSQLQuery(strQuery) .addScalar("voucherid", BigDecimalType.INSTANCE).addScalar("voucherNumber").addScalar("voucherDate") .addScalar("paidAmount", BigDecimalType.INSTANCE) .addScalar("chequeDate").addScalar("paidTo").addScalar("billVHId", BigDecimalType.INSTANCE) .addScalar("detailtypeid", BigDecimalType.INSTANCE) .addScalar("detailkeyid", BigDecimalType.INSTANCE) .setResultTransformer(Transformers.aliasToBean(ChequeAssignment.class)); if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: With surrendered cheques - " + strQuery); billChequeAssignmentList = query.list(); for (final ChequeAssignment ca : billChequeAssignmentList) billVHIds.add(ca.getBillVHId().longValue()); if (billVHIds != null && billVHIds.size() > 0) generalLedgerDetailList = getDetailTypeKeyAmtForBillVHId(billVHIds); for (final Object[] gld : generalLedgerDetailList) if (billVHIdAndgeneralLedgerDetailListMap.containsKey(getLongValue(gld[3]))) billVHIdAndgeneralLedgerDetailListMap.get(getLongValue(gld[3])).add(gld); else { final List<Object[]> generalLedgerDetails = new ArrayList<Object[]>(); generalLedgerDetails.add(gld); billVHIdAndgeneralLedgerDetailListMap.put(getLongValue(gld[3]), generalLedgerDetails); } for (final ChequeAssignment ca : billChequeAssignmentList) { final List<Object[]> detailTypeKeyAmtList = billVHIdAndgeneralLedgerDetailListMap.get(ca.getBillVHId().longValue()); if (detailTypeKeyAmtList == null || detailTypeKeyAmtList.size() == 0) billVHIdsForDebtitSideCC.add(ca.getBillVHId().longValue()); } if (billVHIdsForDebtitSideCC != null && billVHIdsForDebtitSideCC.size() > 0) generalLedgerDetailListForDebtitSideCC = getDetailTypeKeyAmtForDebtitSideCC(billVHIdsForDebtitSideCC); for (final Object[] gld : generalLedgerDetailListForDebtitSideCC) if (billVHIdAndGLDListForDebtitSideCCMap.containsKey(getLongValue(gld[3]))) billVHIdAndGLDListForDebtitSideCCMap.get(getLongValue(gld[3])).add(gld); else { final List<Object[]> generalLedgerDetails = new ArrayList<Object[]>(); generalLedgerDetails.add(gld); billVHIdAndGLDListForDebtitSideCCMap.put(getLongValue(gld[3]), generalLedgerDetails); } for (final ChequeAssignment chqAssgn : billChequeAssignmentList) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: With surrendered cheques - for Billvhid" + chqAssgn.getBillVHId()); List<Object[]> detailTypeKeyAmtList = billVHIdAndgeneralLedgerDetailListMap.get(chqAssgn.getBillVHId().longValue()) != null ? billVHIdAndgeneralLedgerDetailListMap .get(chqAssgn.getBillVHId().longValue()) : new ArrayList<Object[]>(); if (detailTypeKeyAmtList != null && detailTypeKeyAmtList.size() != 0) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: With surrendered cheques - for Billvhid " + chqAssgn.getBillVHId() + " and size " + detailTypeKeyAmtList); if (detailTypeKeyAmtList.size() < 2) { final String queryString = " select iv.id,ih.id_status from egf_instrumentheader ih, egf_instrumentvoucher iv where iv.instrumentheaderid=ih.id and iv.voucherheaderid=" + chqAssgn.getVoucherid() + " and ih.payTo=:payTo order by id desc "; if (LOGGER.isDebugEnabled()) LOGGER.debug("instrumentStatus- " + queryString); final List<Object[]> instrumentStatus = getSession() .createSQLQuery(queryString).setString("payTo", chqAssgn.getPaidTo()).list(); if (instrumentStatus == null || instrumentStatus.size() == 0 || !instrumentStatus.get(0)[1].toString().equalsIgnoreCase(instrumentNewStatus) && !instrumentStatus .get(0)[1].toString().equalsIgnoreCase(instrumentReconciledStatus)) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: Adding to chequeAssignmentlist as istrumentStatus " + chqAssgn); tempExpenseChequeAssignmentList.add(chqAssgn); } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: Continuing not adding"); continue; } } else for (final Object[] detailTypeKeyAmtObj : detailTypeKeyAmtList) { final String queryString = " select iv.id,ih.id_status from egf_instrumentheader ih, egf_instrumentvoucher iv where iv.instrumentheaderid=ih.id and iv.voucherheaderid=" + chqAssgn.getVoucherid() + " and ih.detailtypeid=" + detailTypeKeyAmtObj[0] + " and ih.detailkeyid=" + detailTypeKeyAmtObj[1] + " order by id desc "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: Inside detailTypeKeyAmtList loop- " + queryString); final List<Object[]> instrumentStatus = getSession() .createSQLQuery(queryString).list(); if (instrumentStatus == null || instrumentStatus.size() == 0 || !instrumentStatus.get(0)[1].toString().equalsIgnoreCase(instrumentNewStatus) && !instrumentStatus .get(0)[1].toString().equalsIgnoreCase(instrumentReconciledStatus)) { final ChequeAssignment ca = new ChequeAssignment(); ca.setVoucherid(new BigDecimal(chqAssgn.getVoucherid())); ca.setVoucherNumber(chqAssgn.getVoucherNumber()); ca.setVoucherDate(chqAssgn.getVoucherDate()); ca.setPaidAmount((BigDecimal) detailTypeKeyAmtObj[2]); ca.setChequeDate(chqAssgn.getChequeDate()); ca.setPaidTo(getEntity(Integer.parseInt(detailTypeKeyAmtObj[0].toString()), (Serializable) detailTypeKeyAmtObj[1]).getName()); ca.setDetailtypeid(BigDecimal.valueOf(((Integer)detailTypeKeyAmtObj[0]).longValue())); ca.setDetailkeyid(BigDecimal.valueOf(((Integer) detailTypeKeyAmtObj[1]).longValue())); if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: inside loop adding " + ca); tempExpenseChequeAssignmentList.add(ca); } else continue; } }// End of checking bills with SL where credit amount>0 else { if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: checking getDetailTypeKeyAmtForDebtitSideCC for " + chqAssgn.getBillVHId()); detailTypeKeyAmtList = billVHIdAndGLDListForDebtitSideCCMap.get(chqAssgn.getBillVHId().longValue()) != null ? billVHIdAndGLDListForDebtitSideCCMap .get(chqAssgn.getBillVHId().longValue()) : new ArrayList<Object[]>(); if (detailTypeKeyAmtList == null || detailTypeKeyAmtList.size() == 0) { final String queryString = " select iv.id,ih.id_status from egf_instrumentheader ih, egf_instrumentvoucher iv where iv.instrumentheaderid=ih.id and iv.voucherheaderid=" + chqAssgn.getVoucherid() + " and ih.payTo=:payTo order by id desc "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: getDetailTypeKeyAmtForDebtitSideCC " + queryString); final List<Object[]> instrumentStatus = getSession() .createSQLQuery(queryString).setString("payTo", chqAssgn.getPaidTo()).list(); if (instrumentStatus == null || instrumentStatus.size() == 0 || !instrumentStatus.get(0)[1].toString().equalsIgnoreCase(instrumentNewStatus) && !instrumentStatus .get(0)[1].toString().equalsIgnoreCase(instrumentReconciledStatus)) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: Adding to chequeAssignmentlist in getDetailTypeKeyAmtForDebtitSideCC " + chqAssgn); tempExpenseChequeAssignmentList.add(chqAssgn); } } else if (detailTypeKeyAmtList != null && detailTypeKeyAmtList.size() == 1) { final String queryString = " select iv.id,ih.id_status from egf_instrumentheader ih, egf_instrumentvoucher iv where iv.instrumentheaderid=ih.id and iv.voucherheaderid=" + chqAssgn.getVoucherid() + " and ih.payTo=:payTo order by id desc "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: detailTypeKeyAmtList size=1" + queryString); final List<Object[]> instrumentStatus = getSession() .createSQLQuery(queryString).setString("payTo", chqAssgn.getPaidTo()).list(); if (instrumentStatus == null || instrumentStatus.size() == 0 || !instrumentStatus.get(0)[1].toString().equalsIgnoreCase(instrumentNewStatus) && !instrumentStatus .get(0)[1].toString().equalsIgnoreCase(instrumentReconciledStatus)) { final String queryString2 = " select iv.id,ih.id_status from egf_instrumentheader ih, " + " egf_instrumentvoucher iv where iv.instrumentheaderid=ih.id and iv.voucherheaderid=" + chqAssgn.getVoucherid() + " " + " and ih.payTo=:payTo order by id desc "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: detailTypeKeyAmtList again checking " + queryString2); final List<Object[]> instrumentStatusWithsubledgerPaidto = getSession() .createSQLQuery(queryString2) .setString( "payTo", getEntity(Integer.parseInt(detailTypeKeyAmtList.get(0)[0].toString()), (Serializable) detailTypeKeyAmtList.get(0)[1]).getName()) .list(); if (instrumentStatusWithsubledgerPaidto == null || instrumentStatusWithsubledgerPaidto.size() == 0 || !instrumentStatusWithsubledgerPaidto.get(0)[1].toString().equalsIgnoreCase( instrumentNewStatus) && !instrumentStatusWithsubledgerPaidto.get(0)[1].toString() .equalsIgnoreCase(instrumentReconciledStatus)) { if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: adding inside again checking" + chqAssgn); tempExpenseChequeAssignmentList.add(chqAssgn); } } } else// if more than 1 SL entries with debit side CC { Map<String, BigDecimal> dedMap = new HashMap<String, BigDecimal>(); dedMap = getSubledgerAmtForDeduction(chqAssgn.getBillVHId()); String key = ""; for (final Object[] obj : detailTypeKeyAmtList) { final String queryString = " select iv.id,ih.id_status from egf_instrumentheader ih, egf_instrumentvoucher iv where " + "iv.instrumentheaderid=ih.id and iv.voucherheaderid=" + chqAssgn.getVoucherid() + "" + " and ih.detailtypeid=" + obj[0] + " and ih.detailkeyid=" + obj[1] + " order by id desc "; if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: detailTypeKeyAmtList checking " + queryString); final List<Object[]> instrumentStatus = getSession() .createSQLQuery(queryString).list(); if (instrumentStatus == null || instrumentStatus.size() == 0 || !instrumentStatus.get(0)[1].toString().equalsIgnoreCase(instrumentNewStatus) && !instrumentStatus .get(0)[1].toString().equalsIgnoreCase(instrumentReconciledStatus)) { final ChequeAssignment c = new ChequeAssignment(); c.setChequeDate(chqAssgn.getChequeDate()); c.setVoucherHeaderId(chqAssgn.getVoucherid()); c.setVoucherNumber(chqAssgn.getVoucherNumber()); c.setVoucherDate(chqAssgn.getVoucherDate()); c.setDetailtypeid((BigDecimal) obj[0]); c.setDetailkeyid((BigDecimal) obj[1]); key = obj[0].toString() + DELIMETER + obj[1].toString(); c.setPaidAmount(dedMap.get(key) == null ? (BigDecimal) obj[2] : ((BigDecimal) obj[2]) .subtract(dedMap.get(key))); c.setPaidTo(getEntity(Integer.valueOf(obj[0].toString()), (Serializable) obj[1]).getName()); if (LOGGER.isDebugEnabled()) LOGGER.debug("ASSIGNED BUT SURRENDARD: adding inside detailTypeKeyAmtList loop" + c); tempExpenseChequeAssignmentList.add(c); } else continue; } } }// End of main Else } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getExpenseBillPaymentsWithSurrenderedCheques."); } private String getFilterParamaters(final Map<String, String[]> parameters, final CVoucherHeader voucherHeader) throws ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getFilterParamaters..."); final StringBuffer sql = new StringBuffer(); if (!"".equals(parameters.get("fromDate")[0])) sql.append(" and vh.voucherDate>='" + sdf.format(formatter.parse(parameters.get("fromDate")[0])) + "' "); if (!"".equals(parameters.get("toDate")[0])) sql.append(" and vh.voucherDate<='" + sdf.format(formatter.parse(parameters.get("toDate")[0])) + "'"); if (!StringUtils.isEmpty(voucherHeader.getVoucherNumber())) sql.append(" and vh.voucherNumber like '%" + voucherHeader.getVoucherNumber() + "%'"); if (voucherHeader.getFundId() != null) sql.append(" and vh.fundId=" + voucherHeader.getFundId().getId()); if (voucherHeader.getVouchermis().getFundsource() != null) sql.append(" and vmis.fundsourceId=" + voucherHeader.getVouchermis().getFundsource().getId()); if (voucherHeader.getVouchermis().getDepartmentid() != null) sql.append(" and vmis.departmentid=" + voucherHeader.getVouchermis().getDepartmentid().getId()); if (voucherHeader.getVouchermis().getSchemeid() != null) sql.append(" and vmis.schemeid=" + voucherHeader.getVouchermis().getSchemeid().getId()); if (voucherHeader.getVouchermis().getSubschemeid() != null) sql.append(" and vmis.subschemeid=" + voucherHeader.getVouchermis().getSubschemeid().getId()); if (voucherHeader.getVouchermis().getFunctionary() != null) sql.append(" and vmis.functionaryid=" + voucherHeader.getVouchermis().getFunctionary().getId()); if (voucherHeader.getVouchermis().getDivisionid() != null) sql.append(" and vmis.divisionid=" + voucherHeader.getVouchermis().getDivisionid().getId()); sql.append(" and ph.bankaccountnumberid=" + parameters.get("bankaccount")[0]); sql.append(" and lower(ph.type)=lower('" + parameters.get("paymentMode")[0] + "')"); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getFilterParamaters."); return sql.toString(); } @SuppressWarnings("unchecked") private List<Object[]> getDetailTypeKeyAmtForBillVHId(final List<Long> billVHIds) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getDetailTypeKeyAmtForBillVHId..."); final List<Long> cBillGlcodeIdsList = new ArrayList<Long>(); for (final BigDecimal glCodeId : cBillGlcodeIdList) cBillGlcodeIdsList.add(glCodeId.longValue()); List<Object[]> generalLedgerDetailList = new ArrayList<Object[]>(); int size = billVHIds.size(); if (size > 999) { int fromIndex = 0; int toIndex = 0; final int step = 1000; List<Object[]> newGLDList; while (size - step >= 0) { newGLDList = new ArrayList<Object[]>(); toIndex += step; final Query generalLedgerDetailsQuery = getSession() .createQuery( " select gld.detailTypeId.id,gld.detailKeyId.id,gld.amount,gl.voucherHeaderId.id from CGeneralLedger gl, CGeneralLedgerDetail gld where gl.voucherHeaderId.id in ( :IDS ) and gl.id = gld.generalLedgerId.id and gl.creditAmount>0 and gl.glcodeId.id in (:glcodeIdList)"); generalLedgerDetailsQuery.setParameterList("IDS", billVHIds.subList(fromIndex, toIndex)); generalLedgerDetailsQuery.setParameterList("glcodeIdList", cBillGlcodeIdsList); newGLDList = generalLedgerDetailsQuery.list(); fromIndex = toIndex; size -= step; if (newGLDList != null) generalLedgerDetailList.addAll(newGLDList); } if (size > 0) { newGLDList = new ArrayList<Object[]>(); fromIndex = toIndex; toIndex = fromIndex + size; final Query generalLedgerDetailsQuery = getSession() .createQuery( " select gld.detailTypeId.id,gld.detailKeyId,gld.amount,gl.voucherHeaderId.id from CGeneralLedger gl, CGeneralLedgerDetail gld where gl.voucherHeaderId.id in ( :IDS ) and gl.id = gld.generalLedgerId.id and gl.creditAmount>0 and gl.glcodeId.id in (:glcodeIdList)"); generalLedgerDetailsQuery.setParameterList("IDS", billVHIds.subList(fromIndex, toIndex)); generalLedgerDetailsQuery.setParameterList("glcodeIdList", cBillGlcodeIdsList); newGLDList = generalLedgerDetailsQuery.list(); if (newGLDList != null) generalLedgerDetailList.addAll(newGLDList); } } else { final Query generalLedgerDetailsQuery = getSession() .createQuery( " select gld.detailTypeId.id,gld.detailKeyId,gld.amount,gl.voucherHeaderId.id from CGeneralLedger gl, CGeneralLedgerDetail gld where gl.voucherHeaderId.id in ( :IDS ) and gl.id = gld.generalLedgerId.id and gl.creditAmount>0 and gl.glcodeId.id in (:glcodeIdList)"); generalLedgerDetailsQuery.setParameterList("IDS", billVHIds); generalLedgerDetailsQuery.setParameterList("glcodeIdList", cBillGlcodeIdsList); generalLedgerDetailList = generalLedgerDetailsQuery.list(); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getDetailTypeKeyAmtForBillVHId."); return generalLedgerDetailList; } @SuppressWarnings("unchecked") private List<Object[]> getDetailTypeKeyAmtForDebtitSideCC(final List<Long> billVHIds) { List<Object[]> generalLedgerDetailList = new ArrayList<Object[]>(); int size = billVHIds.size(); if (size > 999) { int fromIndex = 0; int toIndex = 0; final int step = 1000; List<Object[]> newGLDList; while (size - step >= 0) { newGLDList = new ArrayList<Object[]>(); toIndex += step; final Query generalLedgerDetailsQuery = getSession() .createQuery( " select gld.detailTypeId.id,gld.detailKeyId,gld.amount,gl.voucherHeaderId.id from CGeneralLedger gl, CGeneralLedgerDetail gld where gl.voucherHeaderId.id in ( :IDS ) and gl.id = gld.generalLedgerId.id and gl.debitAmount>0"); generalLedgerDetailsQuery.setParameterList("IDS", billVHIds.subList(fromIndex, toIndex)); newGLDList = generalLedgerDetailsQuery.list(); fromIndex = toIndex; size -= step; if (newGLDList != null) generalLedgerDetailList.addAll(newGLDList); } if (size > 0) { newGLDList = new ArrayList<Object[]>(); fromIndex = toIndex; toIndex = fromIndex + size; final Query generalLedgerDetailsQuery = getSession() .createQuery( " select gld.detailTypeId.id,gld.detailKeyId,gld.amount,gl.voucherHeaderId.id from CGeneralLedger gl, CGeneralLedgerDetail gld where gl.voucherHeaderId.id in ( :IDS ) and gl.id = gld.generalLedgerId.id and gl.debitAmount>0"); generalLedgerDetailsQuery.setParameterList("IDS", billVHIds.subList(fromIndex, toIndex)); newGLDList = generalLedgerDetailsQuery.list(); if (newGLDList != null) generalLedgerDetailList.addAll(newGLDList); } } else { final Query generalLedgerDetailsQuery = getSession() .createQuery( " select gld.detailTypeId.id,gld.detailKeyId,gld.amount,gl.voucherHeaderId.id from CGeneralLedger gl, CGeneralLedgerDetail gld where gl.voucherHeaderId.id in ( :IDS ) and gl.id = gld.generalLedgerId.id and gl.debitAmount>0"); generalLedgerDetailsQuery.setParameterList("IDS", billVHIds); generalLedgerDetailList = generalLedgerDetailsQuery.list(); } return generalLedgerDetailList; } private void setStatusValues() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting setStatusValues..."); finalChequeAssignmentList = new ArrayList<ChequeAssignment>(); finalCBillChequeAssignmentList = new ArrayList<ChequeAssignment>(); tempExpenseChequeAssignmentList = new ArrayList<ChequeAssignment>(); final List<AppConfigValues> appList = appConfigValuesService .getConfigValuesByModuleAndKey("EGF", "APPROVEDVOUCHERSTATUS"); approvedstatus = appList.get(0).getValue(); final List<String> descriptionList = new ArrayList<String>(); descriptionList.add("New"); descriptionList.add("Reconciled"); final List<EgwStatus> egwStatusList = egwStatusDAO.getStatusListByModuleAndCodeList("Instrument", descriptionList); statusId = ""; for (final EgwStatus egwStatus : egwStatusList) statusId = statusId + egwStatus.getId() + ","; if (egwStatusList.size() == 2) { instrumentNewStatus = egwStatusList.get(0).getId().toString(); instrumentReconciledStatus = egwStatusList.get(1).getId().toString(); } statusId = statusId.substring(0, statusId.length() - 1); getGlcodeIds(); // cBillGlcodeIdList=cBillGlcodeIdList; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed setStatusValues."); } private void prepareChequeList() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting prepareChequeList..."); ChequeAssignment outerChqAssgn; ChequeAssignment innerChqAssgn; final List<Integer> alreadyProcessedIndices = new ArrayList<Integer>(); for (int i = 0; i < tempExpenseChequeAssignmentList.size(); i++) { if (alreadyProcessedIndices.contains(i)) continue; outerChqAssgn = tempExpenseChequeAssignmentList.get(i); for (int j = i + 1; j < tempExpenseChequeAssignmentList.size(); j++) { innerChqAssgn = tempExpenseChequeAssignmentList.get(j); if (outerChqAssgn.getVoucherid().equals(innerChqAssgn.getVoucherid()) && outerChqAssgn.getVoucherDate().equals(innerChqAssgn.getVoucherDate()) && outerChqAssgn.getVoucherNumber().equals(innerChqAssgn.getVoucherNumber()) && outerChqAssgn.getPaidTo().equals(innerChqAssgn.getPaidTo()) && outerChqAssgn.getDetailtypeid().equals(innerChqAssgn.getDetailtypeid()) && outerChqAssgn.getDetailkeyid().equals(innerChqAssgn.getDetailkeyid())) { outerChqAssgn.setPaidAmount(outerChqAssgn.getPaidAmount().add(innerChqAssgn.getPaidAmount())); alreadyProcessedIndices.add(j); } } finalCBillChequeAssignmentList.add(outerChqAssgn); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed prepareChequeList."); } @SuppressWarnings("unchecked") private Map<String, BigDecimal> getSubledgerAmtForDeduction(final BigDecimal billVHId) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getSubledgerAmtForDeduction..."); final Map<String, BigDecimal> map = new HashMap<String, BigDecimal>(); final Query query = getSession().createSQLQuery( "SELECT gld.detailtypeid, gld.detailkeyid, SUM(gld.amount) FROM generalledgerdetail gld, generalledger gl" + " WHERE gl.voucherheaderid=" + billVHId + " AND gl.id =gld.generalledgerid AND gl.creditamount >0" + " AND gl.glcodeid NOT IN (:glcodeIdList) GROUP BY gld.detailtypeid, gld.detailkeyid"); query.setParameterList("glcodeIdList", cBillGlcodeIdList); final List<Object[]> list = query.list(); if (list != null && !list.isEmpty()) for (final Object[] ob : list) map.put(ob[0].toString() + DELIMETER + ob[1].toString(), (BigDecimal) ob[2]); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getSubledgerAmtForDeduction."); return map; } public void getGlcodeIds() throws ApplicationRuntimeException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getGlcodeIds..."); try { List<AppConfigValues> appList; worksBillGlcodeList = populateGlCodeIds(Constants.WORKS_BILL_PURPOSE_IDS); purchaseBillGlcodeList = populateGlCodeIds(Constants.PURCHASE_BILL_PURPOSE_IDS); salaryBillGlcodeList = populateGlCodeIds("salaryBillPurposeIds"); // Contingent Bill appList = appConfigValuesService.getConfigValuesByModuleAndKey(Constants.EGF, Constants.CONTINGENCY_BILL_PURPOSE_IDS); cBillGlcodeIdList = new ArrayList<BigDecimal>(); if (appList != null && appList.size() > 0) { final Integer iPurposeIds[] = new Integer[appList.size()]; int z = 0; for (final AppConfigValues appConfigValues : appList) { iPurposeIds[z] = Integer.parseInt(appConfigValues.getValue()); z++; } final List<CChartOfAccounts> coaList = coaDAO.getAccountCodeByListOfPurposeId(iPurposeIds); if (LOGGER.isDebugEnabled()) LOGGER.debug("Size contingentBillGlcodeList" + coaList.size()); contingentBillGlcodeList = coaList; for (final CChartOfAccounts coa1 : coaList) // if(LOGGER.isDebugEnabled()) // LOGGER.debug("Adding to contingentBillGlcodeList"+coa1.getGlcode()+":::"+coa1.getPurposeId()); cBillGlcodeIdList.add(BigDecimal.valueOf(coa1.getId())); } } catch (final Exception e) { LOGGER.error(e.getMessage()); throw new ApplicationRuntimeException(e.getMessage()); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getGlcodeIds."); } private List<CChartOfAccounts> populateGlCodeIds(final String appConfigKey) throws ApplicationException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting populateGlCodeIds..."); final List<CChartOfAccounts> glCodeList = new ArrayList<CChartOfAccounts>(); final List<AppConfigValues> appList = appConfigValuesService.getConfigValuesByModuleAndKey(Constants.EGF, appConfigKey); final String purposeids = appList.get(0).getValue(); if (purposeids != null && !purposeids.equals("")) { final String purposeIds[] = purposeids.split(","); for (final String purposeId : purposeIds) { final List<CChartOfAccounts> coaList = coaDAO.getAccountCodeByPurpose(Integer.parseInt(purposeId)); for (final CChartOfAccounts coa1 : coaList) glCodeList.add(coa1); } } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed populateGlCodeIds."); return glCodeList; } public EntityType getEntity(final Integer detailTypeId, final Serializable detailKeyId) throws ApplicationException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getEntity..."); EntityType entity; try { final Accountdetailtype accountdetailtype = (Accountdetailtype) persistenceService.find( " from Accountdetailtype where id=?", detailTypeId); final Class<?> service = Class.forName(accountdetailtype.getFullQualifiedName()); // getting the entity type service. final String detailTypeName = service.getSimpleName(); String dataType = ""; final java.lang.reflect.Method method = service.getMethod("getId"); dataType = method.getReturnType().getSimpleName(); if (dataType.equals("Long")) entity = (EntityType) persistenceService.find( "from " + detailTypeName + " where id=? order by name", Long.valueOf(detailKeyId.toString())); else entity = (EntityType) persistenceService.find( "from " + detailTypeName + " where id=? order by name", Integer.valueOf(detailKeyId.toString())); } catch (final Exception e) { LOGGER.error("Exception to get EntityType=" + e.getMessage() + "for detailTypeId=" + detailTypeId + " for Detail key " + detailKeyId); throw new ApplicationException("Exception to get EntityType=" + e.getMessage()); } if (entity == null) { LOGGER.error("Exception to get EntityType for detailTypeId=" + detailTypeId + " for Detail key " + detailKeyId); throw new ApplicationException("Exception to get EntityType"); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getEntity."); return entity; } private Long getLongValue(final Object object) { return object != null ? new Long(object.toString()) : 0; } }