/* * 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.utils; import java.io.Serializable; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.script.ScriptContext; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.egov.commons.CFiscalPeriod; import org.egov.commons.CVoucherHeader; import org.egov.commons.Fund; import org.egov.commons.dao.FinancialYearHibernateDAO; import org.egov.commons.dao.FiscalPeriodHibernateDAO; import org.egov.commons.dao.FundHibernateDAO; import org.egov.eis.entity.EmployeeView; import org.egov.eis.service.EisCommonService; import org.egov.infra.admin.master.entity.Department; import org.egov.infra.exception.ApplicationRuntimeException; import org.egov.infra.persistence.utils.ApplicationSequenceNumberGenerator; import org.egov.infra.persistence.utils.DBSequenceGenerator; import org.egov.infra.persistence.utils.SequenceNumberGenerator; import org.egov.infra.script.service.ScriptService; import org.egov.infstr.services.PersistenceService; import org.egov.model.bills.EgBillregister; import org.egov.model.voucher.VoucherDetails; import org.egov.pims.service.EisUtilService; import org.hibernate.Query; import org.springframework.beans.factory.annotation.Autowired; import com.exilant.eGov.src.common.EGovernCommon; import com.exilant.exility.common.TaskFailedException; /** * @author msahoo * */ public class VoucherHelper { private static final Logger LOGGER = Logger.getLogger(VoucherHelper.class); public static final String DEFAULT_SEQUENCE_PREFIX = "SQ_"; @SuppressWarnings("unchecked") private PersistenceService persistenceService; @Autowired private EisCommonService eisCommonService; @Autowired private FundHibernateDAO fundDAO; @Autowired private ScriptService scriptService; @Autowired private EGovernCommon eGovernCommon; @Autowired private FiscalPeriodHibernateDAO fiscalPeriodHibernateDAO; @Autowired private FinancialYearHibernateDAO financialYearDAO; @Autowired private DBSequenceGenerator dbSequenceGenerator; @Autowired private SequenceNumberGenerator sequenceNumberGenerator; @Autowired ApplicationSequenceNumberGenerator applicationSequenceNumberGenerator; @SuppressWarnings("unchecked") public PersistenceService getPersistenceService() { return persistenceService; } @SuppressWarnings("unchecked") public void setPersistenceService(final PersistenceService persistenceService) { this.persistenceService = persistenceService; } public static String getMisQuery(final CVoucherHeader voucherHeader) { final StringBuffer misQuery = new StringBuffer(); if (null != voucherHeader && null != voucherHeader.getVouchermis()) { if (null != voucherHeader.getVouchermis().getDepartmentid()) { misQuery.append(" and mis.departmentid.id="); misQuery.append(voucherHeader.getVouchermis().getDepartmentid().getId()); } if (null != voucherHeader.getVouchermis().getFunctionary()) { misQuery.append(" and mis.functionary.id="); misQuery.append(voucherHeader.getVouchermis().getFunctionary().getId()); } if (null != voucherHeader.getVouchermis().getSchemeid()) { misQuery.append(" and mis.schemeid.id="); misQuery.append(voucherHeader.getVouchermis().getSchemeid().getId()); } if (null != voucherHeader.getVouchermis().getSubschemeid()) { misQuery.append(" and mis.subschemeid.id="); misQuery.append(voucherHeader.getVouchermis().getSubschemeid().getId()); } if (null != voucherHeader.getVouchermis().getFundsource()) { misQuery.append(" and mis.fundsource.id="); misQuery.append(voucherHeader.getVouchermis().getFundsource().getId()); } if (null != voucherHeader.getVouchermis().getDivisionid()) { misQuery.append(" and mis.divisionid.id="); misQuery.append(voucherHeader.getVouchermis().getDivisionid().getId()); } } return misQuery.toString(); } public static String getVoucherNumDateQuery(final String voucherNumFrom, final String voucherNumTo, final String voucherDateFrom, final String voucherDateTo) { final StringBuffer numDateQuery = new StringBuffer(); try { if (null != voucherNumFrom && StringUtils.isNotEmpty(voucherNumFrom)) { numDateQuery.append(" and vh.voucherNumber >'"); numDateQuery.append(voucherNumFrom).append("'"); } if (null != voucherNumTo && StringUtils.isNotEmpty(voucherNumTo)) { numDateQuery.append(" and vh.voucherNumber <'"); numDateQuery.append(voucherNumTo).append("'"); } if (null != voucherDateFrom && StringUtils.isNotEmpty(voucherDateFrom)) numDateQuery.append(" and vh.voucherDate>='").append(Constants.DDMMYYYYFORMAT1.format(Constants.DDMMYYYYFORMAT2. parse(voucherDateFrom))).append("'"); if (null != voucherDateTo && StringUtils.isNotEmpty(voucherDateTo)) numDateQuery.append(" and vh.voucherDate<='").append(Constants.DDMMYYYYFORMAT1.format(Constants.DDMMYYYYFORMAT2. parse(voucherDateTo))).append("'"); } catch (final ParseException e) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Exception occured while parsing date" + e); } catch (final Exception e) { LOGGER.error(e); throw new ApplicationRuntimeException("Error occured while executing search instrument query"); } return numDateQuery.toString(); } public static String getBillMisQuery(final EgBillregister egBillRegister) { final StringBuffer misQuery = new StringBuffer(300); if (null != egBillRegister && null != egBillRegister.getEgBillregistermis()) { if (null != egBillRegister.getEgBillregistermis().getFund()) misQuery.append(" and billmis.fund.id=").append(egBillRegister.getEgBillregistermis().getFund().getId()); if (null != egBillRegister.getEgBillregistermis().getEgDepartment()) { misQuery.append(" and billmis.egDepartment.id="); misQuery.append(egBillRegister.getEgBillregistermis().getEgDepartment().getId()); } if (null != egBillRegister.getEgBillregistermis().getFunctionaryid()) { misQuery.append(" and billmis.functionaryid.id="); misQuery.append(egBillRegister.getEgBillregistermis().getFunctionaryid().getId()); } if (null != egBillRegister.getEgBillregistermis().getScheme()) { misQuery.append(" and billmis.scheme.id="); misQuery.append(egBillRegister.getEgBillregistermis().getScheme().getId()); } if (null != egBillRegister.getEgBillregistermis().getSubScheme()) { misQuery.append(" and billmis.subScheme.id="); misQuery.append(egBillRegister.getEgBillregistermis().getSubScheme().getId()); } if (null != egBillRegister.getEgBillregistermis().getFundsource()) { misQuery.append(" and billmis.fundsource.id="); misQuery.append(egBillRegister.getEgBillregistermis().getFundsource().getId()); } if (null != egBillRegister.getEgBillregistermis().getFieldid()) { misQuery.append(" and billmis.fieldid.id="); misQuery.append(egBillRegister.getEgBillregistermis().getFieldid().getId()); } if (null != egBillRegister.getBillnumber() && !egBillRegister.getBillnumber().equalsIgnoreCase("")) { misQuery.append(" and br.billnumber="); misQuery.append("'" + egBillRegister.getBillnumber() + "'"); } } return misQuery.toString(); } /** * Constructs the corresponding sequence name for an EG_NUMBERS record. E.g. if vouchertype = "1/CJV/CGVN" and fiscalperiod * name = "FP7", then it returns "SQ_1_CJV_CGVN_FP7". * * @param voucherType * @param fiscalPeriodName * @return */ public static String sequenceNameFor(final String voucherType, final String fiscalPeriodName) { return new StringBuilder() .append(DEFAULT_SEQUENCE_PREFIX) .append(voucherType) .append(ApplicationSequenceNumberGenerator.WORD_SEPARATOR_FOR_NAME) .append(fiscalPeriodName) .toString(); } public static String getBillDateQuery(final String billDateFrom, final String billDateTo) { final StringBuffer numDateQuery = new StringBuffer(); try { if (null != billDateFrom && StringUtils.isNotEmpty(billDateFrom)) numDateQuery.append(" and br.billdate>='").append(Constants.DDMMYYYYFORMAT1.format(Constants.DDMMYYYYFORMAT2. parse(billDateFrom))).append("'"); if (null != billDateTo && StringUtils.isNotEmpty(billDateTo)) numDateQuery.append(" and br.billdate<='").append(Constants.DDMMYYYYFORMAT1.format(Constants.DDMMYYYYFORMAT2. parse(billDateTo))).append("'"); } catch (final ParseException e) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Exception occured while parsing date" + e); } catch (final Exception e) { LOGGER.error(e); throw new ApplicationRuntimeException("Error occured while executing search instrument query"); } return numDateQuery.toString(); } public String getEg_Voucher(final String vouType, final String fiscalPeriodIdStr) throws TaskFailedException, Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug(" In EGovernCommon :getEg_Voucher method "); final Query query = persistenceService.getSession().createSQLQuery( "select name from fiscalperiod where id=" + Integer.parseInt(fiscalPeriodIdStr) + ""); final List<String> fc = query.list(); // Sequence name will be SQ_U_DBP_CGVN_FP7 for vouType U/DBP/CGVN and fiscalPeriodIdStr 7 Serializable sequenceNumber; String sequenceName; sequenceName = sequenceNameFor(vouType, fc.get(0).toString()); sequenceNumber= applicationSequenceNumberGenerator.getNextSequence(sequenceName); return sequenceNumber.toString(); } public String getGeneratedVoucherNumber(final Integer fundId, String voucherType, final Date voucherDate, String vNumGenMode, String voucherNumber) throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("fundId | in getGeneratedVoucherNumber :" + fundId); if (LOGGER.isDebugEnabled()) LOGGER.debug("voucherType | in getGeneratedVoucherNumber :" + voucherType); if (LOGGER.isDebugEnabled()) LOGGER.debug("voucherDate | in getGeneratedVoucherNumber :" + voucherDate); final String vDate = Constants.DDMMYYYYFORMAT2.format(voucherDate); final String vDateTemp = Constants.DDMMYYYYFORMAT1.format(voucherDate); final CFiscalPeriod fiscalPeriod = fiscalPeriodHibernateDAO.getFiscalPeriodByDate(voucherDate); if(fiscalPeriod==null) throw new ApplicationRuntimeException("Fiscal period is not defined for the voucher date"); final Fund vFund = fundDAO.fundById(fundId,false); final String fundIdentifier = vFund.getIdentifier().toString(); final String sequenceName = sequenceNameFor(fundIdentifier + "/" + voucherType, fiscalPeriod.getName()); final String transNumber = ""; if (vNumGenMode == null) vNumGenMode = "Auto"; if (voucherNumber == null) voucherNumber = ""; if (voucherType == null) voucherType = ""; String fVoucherNumber = null; if (vNumGenMode.equalsIgnoreCase("Auto")) { if (LOGGER.isInfoEnabled()) LOGGER.info(" before transNumber................" + transNumber); /* * if(vNumGenMode.equalsIgnoreCase("Auto")) transNumber = * cmImpl.getTransRunningNumber(fundId.toString(),voucherType,vDate,conn); if(LOGGER.isInfoEnabled()) * LOGGER.info("after transNumber..........................."+transNumber); */final String monthArr[] = vDate.split("/"); final String month = monthArr[1]; final String scriptName = "voucherheader.vouchernumber"; scriptService.getByName(scriptName); final ScriptContext scriptContext = ScriptService.createContext("fundIdentity", fundIdentifier, "voucherType", voucherType, "transNumber", transNumber, "vNumGenMode", vNumGenMode, "date", voucherDate, "month", month, "commonsService", financialYearDAO, "dbSequenceGenerator", dbSequenceGenerator, "sequenceNumberGenerator", applicationSequenceNumberGenerator, "voucherNumber", voucherNumber, "sequenceName", sequenceName); fVoucherNumber = (String) scriptService.executeScript(scriptName, scriptContext); } else // this is not client specific needs to be from script only fVoucherNumber = fundIdentifier + "/" + voucherType + "/" + voucherNumber; if (LOGGER.isDebugEnabled()) LOGGER.debug("fVoucherNumber | fVoucherNumber in getGeneratedVoucherNumber :" + fVoucherNumber); // unique checking... if (LOGGER.isDebugEnabled()) LOGGER.debug("unique checking for voucher number :- " + fVoucherNumber); if (!eGovernCommon.isUniqueVN(fVoucherNumber, vDateTemp, null)) throw new ApplicationRuntimeException("Trying to create Duplicate Voucher Number"); return fVoucherNumber; } /** * return the glcodes that are repeated. e.g [1,2,2,2,3,3] returns [2,3] * @param billDetailslist * @return */ public static List<String> getRepeatedGlcodes(final List<VoucherDetails> billDetailslist) { final List<String> list = new ArrayList<String>(); final Map<String, Object> map = new HashMap<String, Object>(); for (final VoucherDetails voucherDetail : billDetailslist) { final String glCodeIdDetail = voucherDetail.getGlcodeIdDetail().toString(); if (map.containsKey(glCodeIdDetail)) list.add(glCodeIdDetail); else map.put(glCodeIdDetail, glCodeIdDetail); } return list; } public List<Department> getAllAssgnDeptforUser() { new HashMap<String, String>(); // paramMap.put("code", employee.getCode()); final List<EmployeeView> listEmployeeView = new ArrayList<EmployeeView>();// Phoenix // eisUtilService.getEmployeeInfoList(paramMap); final List<Department> departmentList = new ArrayList<Department>(); for (final EmployeeView employeeView : listEmployeeView) { employeeView.getDepartment().getName(); if (employeeView.getPrimary()) departmentList.add(0, employeeView.getDepartment()); else departmentList.add(employeeView.getDepartment()); } return departmentList; } public static final List<String> VOUCHER_TYPES = new ArrayList<String>() { /** * */ private static final long serialVersionUID = -9199043129962242423L; { add(FinancialConstants.STANDARD_VOUCHER_TYPE_CONTRA); add(FinancialConstants.STANDARD_VOUCHER_TYPE_PAYMENT); add(FinancialConstants.STANDARD_VOUCHER_TYPE_RECEIPT); add(FinancialConstants.STANDARD_VOUCHER_TYPE_JOURNAL); } }; public static final List<String> EXPENDITURE_TYPES = new ArrayList<String>() { /** * */ private static final long serialVersionUID = -1656096571931607572L; { add(FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT); add(FinancialConstants.STANDARD_EXPENDITURETYPE_WORKS); add(FinancialConstants.STANDARD_EXPENDITURETYPE_PURCHASE); /*add(FinancialConstants.STANDARD_EXPENDITURETYPE_SALARY); add(FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION);*/ } }; public static final List<String> CONTRAVOUCHER_NAMES = new ArrayList<String>() { /** * */ private static final long serialVersionUID = -8773307498671866960L; { add(FinancialConstants.CONTRAVOUCHER_NAME_BTOB); add(FinancialConstants.CONTRAVOUCHER_NAME_PAYIN); add(FinancialConstants.CONTRAVOUCHER_NAME_INTERFUND); } }; public static final List<String> PAYMENTVOUCHER_NAMES = new ArrayList<String>() { /** * */ private static final long serialVersionUID = 1404413607001795999L; { add(FinancialConstants.PAYMENTVOUCHER_NAME_BILL); add(FinancialConstants.PAYMENTVOUCHER_NAME_DIRECTBANK); add(FinancialConstants.PAYMENTVOUCHER_NAME_REMITTANCE); add(FinancialConstants.PAYMENTVOUCHER_NAME_SALARY); add(FinancialConstants.PAYMENTVOUCHER_NAME_PENSION); add(FinancialConstants.PAYMENTVOUCHER_NAME_ADVANCE); } }; public static final List<String> JOURNALVOUCHER_NAMES = new ArrayList<String>() { /** * */ private static final long serialVersionUID = -5257979039834154425L; { add(FinancialConstants.JOURNALVOUCHER_NAME_GENERAL); add(FinancialConstants.JOURNALVOUCHER_NAME_SUPPLIERJOURNAL); add(FinancialConstants.JOURNALVOUCHER_NAME_CONTRACTORJOURNAL); add(FinancialConstants.JOURNALVOUCHER_NAME_SALARYJOURNAL); add(FinancialConstants.JOURNALVOUCHER_NAME_EXPENSEJOURNAL); add(FinancialConstants.JOURNALVOUCHER_NAME_PENSIONJOURNAL); add(FinancialConstants.JOURNALVOUCHER_NAME_ISSUE); add(FinancialConstants.JOURNALVOUCHER_NAME_SUPPLIERRECEIPT); add(FinancialConstants.JOURNALVOUCHER_NAME_LE_DEMAND); add(FinancialConstants.JOURNALVOUCHER_NAME_RECEIPT_REVERSAL); } }; public static final List<String> RECEIPT_NAMES = new ArrayList<String>() { /** * */ private static final long serialVersionUID = -911416421181673151L; { add(FinancialConstants.RECEIPT_NAME_DIRECT); add(FinancialConstants.RECEIPT_NAME_PAYMENT_REVERSAL); add(FinancialConstants.RECEIPT_NAME_OTHER_RECEIPTS); } }; public static final Map<String, List<String>> VOUCHER_TYPE_NAMES = new HashMap<String, List<String>>() { /** * */ private static final long serialVersionUID = -7593762823617257861L; { put(VOUCHER_TYPES.get(0), CONTRAVOUCHER_NAMES); put(VOUCHER_TYPES.get(1), PAYMENTVOUCHER_NAMES); put(VOUCHER_TYPES.get(2), RECEIPT_NAMES); put(VOUCHER_TYPES.get(3), JOURNALVOUCHER_NAMES); } }; public static final List<String> TNEB_REGIONS = new ArrayList<String>() { /** * */ private static final long serialVersionUID = 409633391340882378L; { add(FinancialConstants.REGION_SE_CEDC_NORTH); add(FinancialConstants.REGION_SE_CEDC_SOUTH); add(FinancialConstants.REGION_SE_CEDC_CENTRAL); add(FinancialConstants.REGION_SE_CEDC_EAST); add(FinancialConstants.REGION_SE_CEDC_WEST); } }; public EisCommonService getEisCommonService() { return eisCommonService; } public void setEisCommonService(final EisCommonService eisCommonService) { this.eisCommonService = eisCommonService; } public void setEisUtilService(final EisUtilService eisUtilService) { } public EGovernCommon geteGovernCommon() { return eGovernCommon; } public void seteGovernCommon(final EGovernCommon eGovernCommon) { this.eGovernCommon = eGovernCommon; } public FiscalPeriodHibernateDAO getFiscalPeriodHibernateDAO() { return fiscalPeriodHibernateDAO; } public void setFiscalPeriodHibernateDAO(FiscalPeriodHibernateDAO fiscalPeriodHibernateDAO) { this.fiscalPeriodHibernateDAO = fiscalPeriodHibernateDAO; } }