/* * 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.voucher; import com.exilant.GLEngine.Transaxtion; import com.exilant.GLEngine.TransaxtionParameter; import com.exilant.eGov.src.common.EGovernCommon; import com.exilant.eGov.src.transactions.VoucherTypeForULB; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.egov.commons.Accountdetailtype; import org.egov.commons.CChartOfAccounts; import org.egov.commons.CFinancialYear; import org.egov.commons.CFiscalPeriod; import org.egov.commons.CGeneralLedger; import org.egov.commons.CGeneralLedgerDetail; import org.egov.commons.CVoucherHeader; import org.egov.commons.EgfRecordStatus; import org.egov.commons.EgwStatus; import org.egov.commons.dao.AccountdetailtypeHibernateDAO; import org.egov.commons.dao.ChartOfAccountsDAO; import org.egov.commons.dao.FinancialYearHibernateDAO; import org.egov.commons.dao.FunctionDAO; import org.egov.commons.utils.EntityType; import org.egov.dao.budget.BudgetDetailsDAO; import org.egov.dao.budget.BudgetDetailsHibernateDAO; import org.egov.dao.voucher.VoucherHibernateDAO; import org.egov.egf.autonumber.JVBillNumberGenerator; import org.egov.egf.commons.EgovCommon; import org.egov.eis.entity.Assignment; import org.egov.eis.entity.Employee; import org.egov.eis.entity.EmployeeView; import org.egov.eis.service.AssignmentService; import org.egov.eis.service.DesignationService; import org.egov.eis.service.EisCommonService; import org.egov.infra.admin.master.entity.AppConfigValues; import org.egov.infra.admin.master.entity.Boundary; import org.egov.infra.admin.master.entity.Department; import org.egov.infra.admin.master.entity.User; import org.egov.infra.admin.master.service.AppConfigValueService; import org.egov.infra.config.core.ApplicationThreadLocals; import org.egov.infra.exception.ApplicationException; import org.egov.infra.exception.ApplicationRuntimeException; import org.egov.infra.script.entity.Script; import org.egov.infra.script.service.ScriptService; import org.egov.infra.utils.DateUtils; import org.egov.infra.utils.autonumber.AutonumberServiceBeanResolver; import org.egov.infra.validation.exception.ValidationError; import org.egov.infra.validation.exception.ValidationException; import org.egov.infstr.services.EISServeable; import org.egov.infstr.services.PersistenceService; import org.egov.infstr.utils.EGovConfig; import org.egov.model.bills.EgBillPayeedetails; import org.egov.model.bills.EgBillSubType; import org.egov.model.bills.EgBilldetails; import org.egov.model.bills.EgBillregister; import org.egov.model.bills.EgBillregistermis; import org.egov.model.payment.Paymentheader; import org.egov.model.voucher.VoucherDetails; import org.egov.model.voucher.VoucherTypeBean; import org.egov.pims.commons.Designation; import org.egov.pims.commons.Position; import org.egov.pims.model.PersonalInformation; import org.egov.pims.service.EmployeeServiceOld; import org.egov.services.bills.EgBillRegisterService; import org.egov.utils.Constants; import org.egov.utils.FinancialConstants; import org.egov.utils.VoucherHelper; import org.hibernate.HibernateException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @Service public class VoucherService extends PersistenceService<CVoucherHeader, Long> { private static final Logger LOGGER = Logger.getLogger(VoucherService.class); @Autowired @Qualifier("persistenceService") protected PersistenceService persistenceService; @Autowired @Qualifier("eisCommonService") protected EisCommonService eisCommonService; @Autowired @Qualifier("budgetDetailsDAO") private BudgetDetailsDAO budgetDetailsDAO; private @Autowired AppConfigValueService appConfigValuesService; @Autowired @Qualifier("voucherHibDAO") private VoucherHibernateDAO voucherHibDAO; @Autowired private ChartOfAccountsDAO coaDAO; @Autowired private VoucherTypeForULB voucherTypeForULB; @Autowired private FunctionDAO functionDAO; @Autowired private AssignmentService assignmentService; @Autowired @Qualifier("voucherHelper") private VoucherHelper voucherHelper; @Autowired @Qualifier("eGovernCommon") private EGovernCommon eGovernCommon; @Autowired @Qualifier("financialYearDAO") private FinancialYearHibernateDAO financialYearDAO; @Autowired private EgovCommon egovCommon; @Autowired private DesignationService designationService; @Autowired private AutonumberServiceBeanResolver beanResolver; private EISServeable eisService; private EmployeeServiceOld employeeService; @Autowired private ScriptService scriptService; @Autowired @Qualifier("egBillRegisterService") private EgBillRegisterService egBillRegisterService; @Autowired private AccountdetailtypeHibernateDAO accountdetailtypeHibernateDAO; @Autowired @Qualifier("recordStatusPersistenceService") private PersistenceService recordStatusPersistenceService; public VoucherService(final Class<CVoucherHeader> voucherHeader) { super(voucherHeader); } public VoucherService() { super(CVoucherHeader.class); } public Boundary getBoundaryForUser(final CVoucherHeader rv) { return egovCommon.getBoundaryForUser(rv.getCreatedBy()); } public String getEmployeeNameForPositionId(final Position pos) throws ApplicationRuntimeException { Assignment assignment = assignmentService.getAssignmentsForPosition( +pos.getId(), new Date()).get(0); return assignment.getEmployee().getName() + " (" + assignment.getDesignation().getName() + ")"; } public Department getCurrentDepartment() { final Assignment assignment = eisCommonService .getLatestAssignmentForEmployeeByDate( ApplicationThreadLocals.getUserId(), new Date()); return assignment.getDepartment(); } public Department getDepartmentForWfItem(final CVoucherHeader cv) { final Assignment assignment = eisCommonService .getLatestAssignmentForEmployeeByDate( cv.getCreatedBy().getId(), new Date()); return assignment.getDepartment(); } public Department getTempDepartmentForWfItem(final CVoucherHeader cv, final Position position) { Department d = null; eisCommonService.getEmployeeByUserId(cv.getCreatedBy().getId()); d = (Department) persistenceService .find("select v.deptId from EmployeeView v left join v.userMaster as user where v.isPrimary=true and user.id=?", ApplicationThreadLocals.getUserId()); return d; } public Department getDepartmentForUser(final User user) { return egovCommon.getDepartmentForUser(user, eisCommonService, employeeService, persistenceService); } public PersonalInformation getEmpForCurrentUser() { return eisCommonService.getEmployeeByUserId(ApplicationThreadLocals .getUserId()); } public Position getPositionForWfItem(final CVoucherHeader rv) { return eisCommonService.getPositionByUserId(rv.getCreatedBy().getId()); } public boolean budgetaryCheck(final EgBillregister billregister) throws ValidationException { final Map<String, Object> paramMap = new HashMap<String, Object>(); CChartOfAccounts coa = null; boolean result = false; paramMap.put("asondate", billregister.getBilldate()); if (billregister.getEgBillregistermis().getScheme() != null) paramMap.put("schemeid", billregister.getEgBillregistermis() .getScheme().getId()); if (billregister.getEgBillregistermis().getSubScheme() != null) paramMap.put("subschemeid", billregister.getEgBillregistermis() .getSubScheme().getId()); if (billregister.getEgBillregistermis().getFieldid() != null) paramMap.put("boundaryid", billregister.getEgBillregistermis() .getFieldid().getId()); if (billregister.getEgBillregistermis().getEgDepartment() != null) paramMap.put("deptid", billregister.getEgBillregistermis() .getEgDepartment().getId()); if (billregister.getEgBillregistermis().getFunctionaryid() != null) paramMap.put("functionaryid", billregister.getEgBillregistermis() .getFunctionaryid().getId()); if (billregister.getEgBillregistermis().getFund() != null) paramMap.put("fundid", billregister.getEgBillregistermis() .getFund().getId()); paramMap.put("mis.budgetcheckreq", billregister.getEgBillregistermis() .isBudgetCheckReq()); for (final EgBilldetails detail : billregister.getEgBilldetailes()) { paramMap.put("debitAmt", detail.getDebitamount()); paramMap.put("creditAmt", detail.getCreditamount()); coa = (CChartOfAccounts) persistenceService.find( " from CChartOfAccounts where id=?", Long.valueOf(detail.getGlcodeid().toString())); paramMap.put("glcode", coa.getGlcode()); if (detail.getFunctionid() != null) paramMap.put("functionid", Long.valueOf(detail.getFunctionid().toString())); paramMap.put("bill", billregister); result = budgetDetailsDAO.budgetaryCheckForBill(paramMap); if (!result) throw new ValidationException("", "Budget Check failed for " + coa.getGlcode()); } return result; } @SuppressWarnings({ "unchecked", "deprecation" }) public Map<String, Object> getDesgByDeptAndTypeAndVoucherDate( final String type, final String scriptName, final Date vouDate, final Paymentheader paymentheader) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | getDesgUserByDeptAndDesgName | Start"); final Map<String, Object> map = new HashMap<String, Object>(); Designation designation = null; final Double grossAmount = getJVsGrassAmount(paymentheader); // final Script validScript = (Script) // persistenceService.findAllByNamedQuery(Script.BY_NAME, // scriptName).get(0); final List<String> list = (List<String>) scriptService.executeScript( scriptName, ScriptService.createContext("eisCommonServiceBean", eisCommonService, "grossAmount", grossAmount, "userId", ApplicationThreadLocals.getUserId().intValue(), "DATE", new Date(), "type", type, "vouDate", vouDate.getTime(), "paymentheader", paymentheader)); Map<String, Object> desgFuncryMap; final List<Map<String, Object>> designationList = new ArrayList<Map<String, Object>>(); for (final String desgFuncryName : list) if (desgFuncryName.trim().length() != 0 && !desgFuncryName.equalsIgnoreCase("END")) { desgFuncryMap = new HashMap<String, Object>(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Designation and Functionary Name = " + desgFuncryName); designation = designationService .getDesignationByName(desgFuncryName .substring(desgFuncryName.indexOf('-') + 1)); desgFuncryMap.put("designationName", desgFuncryName .substring(0, desgFuncryName.indexOf('-')) .split("~")[0] + "-" + designation.getName()); desgFuncryMap.put( "designationId", designation.getId() + "-" + desgFuncryName.substring(0, desgFuncryName.indexOf('-'))); designationList.add(desgFuncryMap); } else if (desgFuncryName.equalsIgnoreCase("END")) map.put("wfitemstate", "END"); map.put("designationList", designationList); return map; } public Double getJVsGrassAmount(final Paymentheader paymentheader) { if (paymentheader != null) { if (!paymentheader .getVoucherheader() .getName() .equalsIgnoreCase( FinancialConstants.PAYMENTVOUCHER_NAME_DIRECTBANK)) { final Paymentheader ph = (Paymentheader) persistenceService .find("select ph from Paymentheader ph , Miscbilldetail misc ,CVoucherHeader vh,CGeneralLedger gl where misc.payVoucherHeader = ph.voucherheader and misc.billVoucherHeader = vh and gl.voucherHeaderId = vh and vh.status not in (" + FinancialConstants.CANCELLEDVOUCHERSTATUS + ") and gl.debitAmount > 0 and (gl.glcode like '210%' or gl.glcode like '460%') and ph = ? ", paymentheader); if (ph != null) return (double) 0; else { final Double grossAmount = (Double) persistenceService .find("select sum(gl.debitAmount) from Paymentheader ph , Miscbilldetail misc ,CVoucherHeader vh,CGeneralLedger gl where misc.payVoucherHeader = ph.voucherheader and misc.billVoucherHeader = vh and gl.voucherHeaderId = vh and vh.status not in (" + FinancialConstants.CANCELLEDVOUCHERSTATUS + ") and gl.debitAmount > 0 and ph = ?", paymentheader); return grossAmount != null ? grossAmount : (double) 0; } } else { final Paymentheader ph = (Paymentheader) persistenceService .find("select ph from Paymentheader ph ,CVoucherHeader vh,CGeneralLedger gl where ph.voucherheader = vh and gl.voucherHeaderId = vh and vh.status not in (" + FinancialConstants.CANCELLEDVOUCHERSTATUS + ") and gl.debitAmount > 0 and (gl.glcode like '210%' or gl.glcode like '460%') and ph = ? ", paymentheader); if (ph != null) return (double) 0; else { final Double grossAmount = (Double) persistenceService .find("select sum(gl.debitAmount) from Paymentheader ph ,CVoucherHeader vh,CGeneralLedger gl where ph.voucherheader = vh and gl.voucherHeaderId = vh and vh.status not in (" + FinancialConstants.CANCELLEDVOUCHERSTATUS + ") and gl.debitAmount > 0 and ph = ?", paymentheader); return grossAmount != null ? grossAmount : (double) 0; } } } else return (double) 0; } public void createVoucherfromPreApprovedVoucher(final CVoucherHeader vh) { final List<AppConfigValues> appList = appConfigValuesService .getConfigValuesByModuleAndKey(FinancialConstants.MODULE_NAME_APPCONFIG, "APPROVEDVOUCHERSTATUS"); final String approvedVoucherStatus = appList.get(0).getValue(); vh.setStatus(Integer.valueOf(approvedVoucherStatus)); } @SuppressWarnings("unchecked") public List<Map<String, Object>> getJournalVouchers( final CVoucherHeader voucherHeader, final Map<String, Object> searchFilterMap) throws ApplicationException, ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("VoucherService | getJournalVouchers | Start"); final List<CVoucherHeader> vouchers = voucherHibDAO.getVoucherList( voucherHeader, searchFilterMap); Map<String, Object> voucherMap = null; final List<Map<String, Object>> voucherList = new ArrayList<Map<String, Object>>(); if (LOGGER.isDebugEnabled()) LOGGER.debug("voucherList size = " + voucherList.size()); for (final CVoucherHeader voucherheader : vouchers) { voucherMap = new HashMap<String, Object>(); BigDecimal amt = BigDecimal.ZERO; voucherMap.put("id", voucherheader.getId()); voucherMap.put("vouchernumber", voucherheader.getVoucherNumber()); voucherMap.put("type", voucherheader.getType()); voucherMap.put("voucherdate", voucherheader.getVoucherDate()); voucherMap.put("fundname", voucherheader.getFundId().getName()); final Set<CGeneralLedger> vDetailSet = voucherheader .getGeneralledger(); for (final CGeneralLedger detail : vDetailSet) amt = amt.add(new BigDecimal(detail.getDebitAmount())); voucherMap.put("amount", amt); if (voucherheader.getStatus() != null) voucherMap .put("status", voucherheader.getStatus() == 0 ? voucherheader .getIsConfirmed() == 0 ? "UnConfirmed" : "Confirmed" : voucherheader.getStatus() == 1 ? "Reversed" : voucherheader.getStatus() == 2 ? "Reversal" : ""); voucherList.add(voucherMap); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Total number of vouchers = " + voucherList.size()); return voucherList; } public Map<String, Object> getVoucherInfo(final Long voucherId) { if (LOGGER.isDebugEnabled()) LOGGER.debug("VoucherService | getVoucherDetails | Start"); final Map<String, Object> voucherMap = new HashMap<String, Object>(); final CVoucherHeader voucherHeader = (CVoucherHeader) persistenceService .find("from CVoucherHeader where id=?", voucherId); voucherMap.put(Constants.VOUCHERHEADER, voucherHeader); final List<CGeneralLedger> glList = voucherHibDAO .getGLInfo(voucherHeader.getId()); if (LOGGER.isDebugEnabled()) LOGGER.debug("total number of general ledger entry " + glList.size()); final List<VoucherDetails> billDetailslist = new ArrayList<VoucherDetails>(); final List<VoucherDetails> subLedgerlist = new ArrayList<VoucherDetails>(); VoucherDetails voucherDetail; VoucherDetails subLedgerDetail; BigDecimal crAmount = BigDecimal.ZERO; BigDecimal drAmount = BigDecimal.ZERO; try { for (final CGeneralLedger generalLedger : glList) { voucherDetail = new VoucherDetails(); if (null != generalLedger.getFunctionId()) { voucherDetail.setFunctionIdDetail(Long .valueOf(generalLedger.getFunctionId().toString())); voucherDetail.setFunctionDetail(functionDAO .getFunctionById( Long.valueOf(generalLedger.getFunctionId() .toString())).getName()); } voucherDetail.setGlcodeIdDetail(generalLedger.getGlcodeId() .getId()); voucherDetail.setGlcodeDetail(generalLedger.getGlcodeId() .getGlcode()); // voucherDetail.setAccounthead(comm.getCChartOfAccountsById(generalLedger.getGlcodeId().getId()).getName()); voucherDetail.setAccounthead(((CChartOfAccounts) coaDAO .findById(generalLedger.getGlcodeId().getId(), false)) .getName()); drAmount = new BigDecimal(generalLedger.getDebitAmount()); crAmount = new BigDecimal(generalLedger.getCreditAmount()); voucherDetail.setDebitAmountDetail(drAmount.setScale(2, BigDecimal.ROUND_HALF_UP)); voucherDetail.setCreditAmountDetail(crAmount.setScale(2, BigDecimal.ROUND_HALF_UP)); billDetailslist.add(voucherDetail); final List<CGeneralLedgerDetail> gledgerDetailList = voucherHibDAO .getGeneralledgerdetail(generalLedger.getId()); for (final CGeneralLedgerDetail gledgerDetail : gledgerDetailList) { subLedgerDetail = new VoucherDetails(); subLedgerDetail.setAmount(gledgerDetail.getAmount() .setScale(2)); subLedgerDetail.setGlcode((CChartOfAccounts) coaDAO .findById(generalLedger.getGlcodeId().getId(), false)); subLedgerDetail.setSubledgerCode(generalLedger .getGlcodeId().getGlcode()); final Accountdetailtype accountdetailtype = voucherHibDAO .getAccountDetailById(gledgerDetail .getDetailTypeId().getId()); subLedgerDetail.setDetailType(accountdetailtype); subLedgerDetail.setDetailTypeName(accountdetailtype .getName()); final EntityType entity = voucherHibDAO.getEntityInfo( gledgerDetail.getDetailKeyId(), accountdetailtype.getId()); subLedgerDetail.setDetailCode(entity.getCode()); subLedgerDetail.setDetailKeyId(gledgerDetail .getDetailKeyId()); subLedgerDetail.setDetailKey(entity.getName()); subLedgerDetail.setFunctionDetail(generalLedger .getFunctionId() != null ? generalLedger .getFunctionId().toString() : "0"); subLedgerlist.add(subLedgerDetail); } } } catch (final HibernateException e) { LOGGER.error("Exception occured in VoucherSerive |getVoucherInfo " + e); } catch (final Exception e) { LOGGER.error("Exception occured in VoucherSerive |getVoucherInfo " + e); } voucherMap.put(Constants.GLDEATILLIST, billDetailslist); /** * create empty sub ledger row */ if (subLedgerlist.isEmpty()) subLedgerlist.add(new VoucherDetails()); voucherMap.put("subLedgerDetail", subLedgerlist); return voucherMap; } @SuppressWarnings("deprecation") public CVoucherHeader updateVoucherHeader(final CVoucherHeader voucherHeader) { final String voucherNumType = voucherHeader.getType(); return updateVoucherHeader(voucherHeader, voucherNumType); } @SuppressWarnings("deprecation") @Transactional public CVoucherHeader updateVoucherHeader( final CVoucherHeader voucherHeader, final VoucherTypeBean voucherTypeBean) { String voucherNumType = voucherTypeBean.getVoucherNumType(); if (voucherTypeBean.getVoucherNumType() == null) voucherNumType = voucherHeader.getType(); return updateVoucherHeader(voucherHeader, voucherNumType); } @Transactional public CVoucherHeader updateVoucherHeader( final CVoucherHeader voucherHeader, final String voucherNumType) { CVoucherHeader existingVH = null; try { if (voucherHeader.getId() != null && voucherHeader.getId() != -1) existingVH = find("from CVoucherHeader where id=?", voucherHeader.getId()); existingVH = getUpdatedVNumCGVN(existingVH, voucherHeader, voucherNumType); // existingVH.setModifiedDate(new Date()); // existingVH.setModifiedBy(userMngr.getUserById(Integer.valueOf(ApplicationThreadLocals.getUserId()))); existingVH.setFundId(voucherHeader.getFundId()); existingVH.getVouchermis().setDepartmentid( voucherHeader.getVouchermis().getDepartmentid()); existingVH.getVouchermis().setFunction( voucherHeader.getVouchermis().getFunction()); existingVH.getVouchermis().setSchemeid( voucherHeader.getVouchermis().getSchemeid()); existingVH.getVouchermis().setSubschemeid( voucherHeader.getVouchermis().getSubschemeid()); existingVH.getVouchermis().setFunctionary( voucherHeader.getVouchermis().getFunctionary()); existingVH.getVouchermis().setDivisionid( voucherHeader.getVouchermis().getDivisionid()); existingVH.getVouchermis().setFundsource( voucherHeader.getVouchermis().getFundsource()); existingVH.setVoucherDate(voucherHeader.getVoucherDate()); existingVH.setDescription(voucherHeader.getDescription()); applyAuditing(existingVH); update(existingVH); } catch (final HibernateException e) { LOGGER.error(e); throw new HibernateException( "Exception occured in voucher service while updating voucher header" + e); } catch (final ApplicationRuntimeException e) { LOGGER.error(e); throw new ApplicationRuntimeException( "Exception occured in voucher service while updating voucher header" + e); } return existingVH; } public CVoucherHeader getUpdatedVNumCGVN(final CVoucherHeader existingVH, final CVoucherHeader voucherHeader, String voucherNumType) { // CommonMethodsI cmImpl=new CommonMethodsImpl(); String autoVoucherType = null; if (voucherNumType.equalsIgnoreCase("Journal Voucher")) voucherNumType = "Journal"; // autoVoucherType = FinancialConstants.JOURNAL_VOUCHERNO_TYPE; // } autoVoucherType = existingVH .getVoucherNumber() .substring( Integer.parseInt(FinancialConstants.VOUCHERNO_TYPE_LENGTH) - Integer .parseInt(FinancialConstants.VOUCHERNO_TYPE_SUBLENGTH), Integer.parseInt(FinancialConstants.VOUCHERNO_TYPE_LENGTH)); if (LOGGER.isDebugEnabled()) LOGGER.debug("autoVoucherType FOR MODIFIED VOUCHER :" + autoVoucherType); final String vNumGenMode = voucherTypeForULB .readVoucherTypes(voucherNumType); if (LOGGER.isDebugEnabled()) LOGGER.debug("new fund id :" + voucherHeader.getFundId().getId()); if (LOGGER.isDebugEnabled()) LOGGER.debug("old fund id :" + existingVH.getFundId().getId()); if (LOGGER.isDebugEnabled()) LOGGER.debug("new voucher date :" + voucherHeader.getVoucherDate()); if (LOGGER.isDebugEnabled()) LOGGER.debug("old voucher date :" + existingVH.getVoucherDate()); // generating an new voucher number If fund or voucher date is modified. // change voucher number only if fund is changed // no need to change voucher number if onlydate is changed since // vouchernumber-sequence is for the year not for month try { final String fiscalPeriodIdStr = eGovernCommon.getFiscalPeriod(DateUtils.getFormattedDate( voucherHeader.getVoucherDate(), "dd-MMM-yyyy")); if (null == fiscalPeriodIdStr) throw new ApplicationRuntimeException( "Voucher Date not within an open period or Financial year not open for posting, fiscalPeriod := " + fiscalPeriodIdStr); voucherHeader .setFiscalPeriodId(Integer.parseInt(fiscalPeriodIdStr)); if (!voucherHeader.getFundId().equals(existingVH.getFundId())) { // String vDate = // FORMATDDMMYYYY.format(voucherHeader.getVoucherDate()); final String strVoucherNumber = voucherHelper .getGeneratedVoucherNumber(voucherHeader.getFundId() .getId(), autoVoucherType, voucherHeader .getVoucherDate(), vNumGenMode, voucherHeader .getVoucherNumber()); existingVH.setVoucherNumber(strVoucherNumber); final String vType = voucherHeader.getFundId().getIdentifier() .toString() + "/" + getCgnType(voucherHeader.getType()) + "/CGVN"; if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher type : " + vType); String eg_voucher = voucherHelper.getEg_Voucher(vType, existingVH.getFiscalPeriodId().toString()); for (int i = eg_voucher.length(); i < 10; i++) eg_voucher = "0" + eg_voucher; existingVH.setCgvn(vType + eg_voucher); } else if (!voucherHeader.getVoucherDate().equals( existingVH.getVoucherDate())) { // A financial Year can have multiple fiscalPeriod so comparing // previous and new financial year id final CFiscalPeriod fiscalPeriod = (CFiscalPeriod) persistenceService .find(" from CFiscalPeriod where id=?", Long.valueOf(fiscalPeriodIdStr)); final String financialYearId = financialYearDAO .getFinancialYearId(Constants.DDMMYYYYFORMAT2 .format(existingVH.getVoucherDate())); final CFinancialYear financialYear = financialYearDAO .getFinancialYearById(Long.valueOf(financialYearId)); if (existingVH.getFiscalPeriodId().equals( voucherHeader.getFiscalPeriodId()) && fiscalPeriod.getcFinancialYear().getId().longValue() == financialYear .getId().longValue()) { final String vDate = Constants.DDMMYYYYFORMAT2 .format(voucherHeader.getVoucherDate()); if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Number : " + existingVH.getVoucherNumber()); final String strTempVoucherNumber = existingVH .getVoucherNumber(); String strVoucherNumber = ""; final String newDate[] = vDate.split("/"); final String voucherArr[] = strTempVoucherNumber.split("/"); strVoucherNumber = voucherArr[0] + "/" + voucherArr[1] + "/" + voucherArr[2] + "/" + newDate[1] + "/" + voucherArr[4]; existingVH.setVoucherNumber(strVoucherNumber); } else { final String strVoucherNumber = voucherHelper .getGeneratedVoucherNumber(voucherHeader .getFundId().getId(), autoVoucherType, voucherHeader.getVoucherDate(), vNumGenMode, voucherHeader .getVoucherNumber()); existingVH.setVoucherNumber(strVoucherNumber); final String vType = voucherHeader.getFundId() .getIdentifier().toString() + "/" + getCgnType(voucherHeader.getType()) + "/CGVN"; if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher type : " + vType); String eg_voucher = voucherHelper.getEg_Voucher(vType, existingVH.getFiscalPeriodId().toString()); for (int i = eg_voucher.length(); i < 10; i++) eg_voucher = "0" + eg_voucher; existingVH.setCgvn(vType + eg_voucher); } } // If only the voucher number is modified then just appending the // manual voucher number else if ("Manual".equalsIgnoreCase(vNumGenMode) && !existingVH .getVoucherNumber() .substring( Integer.valueOf(FinancialConstants.VOUCHERNO_TYPE_LENGTH)) .equalsIgnoreCase(voucherHeader.getVoucherNumber())) { final String strVoucherNumber = voucherHelper .getGeneratedVoucherNumber(voucherHeader.getFundId() .getId(), autoVoucherType, voucherHeader .getVoucherDate(), vNumGenMode, voucherHeader .getVoucherNumber()); // existingVH.setVoucherNumber(existingVH.getVoucherNumber().substring(0, // Integer.valueOf(FinancialConstants.VOUCHERNO_TYPE_LENGTH))+voucherHeader.getVoucherNumber()); existingVH.setVoucherNumber(strVoucherNumber); } // conn.close(); } catch (final Exception e) { LOGGER.error(e); throw new ApplicationRuntimeException( "Exception occured while getting upadetd voucher number and cgvn number" + e); } return existingVH; } @Transactional public void deleteGLDetailByVHId(final Object voucherHeaderId) { voucherHibDAO.deleteGLDetailByVHId(voucherHeaderId); } /** * Post into Voucher detail and create transaction list for posting into GL. * * @param billDetailslist * @param subLedgerlist * @param voucherHeader * @return */ public List<Transaxtion> postInTransaction( final List<VoucherDetails> billDetailslist, final List<VoucherDetails> subLedgerlist, final CVoucherHeader voucherHeader) { final List<Transaxtion> transaxtionList = new ArrayList<Transaxtion>(); final String accDetailFunc = ""; String detailedFunc = ""; Integer voucherLineId = 1; final List<String> repeatedglCodes = VoucherHelper .getRepeatedGlcodes(billDetailslist); try { for (final VoucherDetails accountDetails : billDetailslist) { final String glcodeId = accountDetails.getGlcodeIdDetail() .toString(); /* * VoucherDetail voucherDetail = new VoucherDetail(); * voucherDetail.setLineId(lineId++); * voucherDetail.setVoucherHeaderId(voucherHeader); * voucherDetail.setGlCode(accountDetails.getGlcodeDetail()); * voucherDetail * .setAccountName(accountDetails.getAccounthead()); * voucherDetail * .setDebitAmount(accountDetails.getDebitAmountDetail()); * voucherDetail * .setCreditAmount(accountDetails.getCreditAmountDetail()); * voucherDetail.setNarration(voucherHeader.getDescription()); * voucherHibDAO.postInVoucherDetail(voucherDetail); */ final Transaxtion transaction = new Transaxtion(); transaction.setGlCode(accountDetails.getGlcodeDetail()); transaction.setGlName(accountDetails.getAccounthead()); transaction.setVoucherLineId(String.valueOf(voucherLineId++)); transaction .setVoucherHeaderId(voucherHeader.getId().toString()); transaction.setCrAmount(accountDetails.getCreditAmountDetail() .toString()); transaction.setDrAmount(accountDetails.getDebitAmountDetail() .toString()); if (null != accountDetails.getFunctionIdDetail()) transaction.setFunctionId(accountDetails .getFunctionIdDetail().toString()); /* * if(null!=voucherHeader.getIsRestrictedtoOneFunctionCenter() * && voucherHeader.getIsRestrictedtoOneFunctionCenter()){ * if(null != voucherHeader.getFunctionId()){ * transaction.setFunctionId * (voucherHeader.getFunctionId().toString()); } if(null != * voucherHeader.getVouchermis().getFunction()){ * transaction.setFunctionId * (voucherHeader.getVouchermis().getFunction * ().getId().toString()); } }else{ accDetailFunc = * accountDetails * .getFunctionIdDetail()!=null?accountDetails.getFunctionIdDetail * ().toString():"0"; } */ final ArrayList reqParams = new ArrayList(); for (final VoucherDetails subledgerDetails : subLedgerlist) { final String detailGlCode = subledgerDetails.getGlcode() .getId().toString(); if (null != voucherHeader .getIsRestrictedtoOneFunctionCenter() && voucherHeader .getIsRestrictedtoOneFunctionCenter()) detailedFunc = voucherHeader.getVouchermis() .getFunction().toString(); else detailedFunc = subledgerDetails.getFunctionDetail(); final String detailtypeid = subledgerDetails .getDetailType().getId().toString(); if (glcodeId.equals(detailGlCode) && (repeatedglCodes.contains(glcodeId) ? accDetailFunc .equals(detailedFunc) : true)) { final TransaxtionParameter reqData = new TransaxtionParameter(); final Accountdetailtype adt = (Accountdetailtype) accountdetailtypeHibernateDAO .findById(Integer.valueOf(detailtypeid), false); reqData.setDetailName(adt.getAttributename()); reqData.setGlcodeId(detailGlCode); reqData.setDetailAmt(subledgerDetails.getAmount() .toString()); reqData.setDetailKey(subledgerDetails.getDetailKeyId() .toString()); reqData.setDetailTypeId(detailtypeid); reqParams.add(reqData); } } if (reqParams != null && reqParams.size() > 0) transaction.setTransaxtionParam(reqParams); transaxtionList.add(transaction); } } catch (final Exception e) { LOGGER.error("Exception occured while posting data into voucher detail and transaction"); throw new ApplicationRuntimeException( "Exception occured while posting data into voucher detail and transaction" + e.getMessage()); } return transaxtionList; } public void setVoucherHeaderDetails(final CVoucherHeader voucherHeader, final VoucherTypeBean voucherTypeBean) throws Exception { voucherHeader.setName(voucherTypeBean.getVoucherName()); voucherHeader.setType(voucherTypeBean.getVoucherType()); String vNumGenMode = null; if (null != voucherHeader.getType() && FinancialConstants.STANDARD_VOUCHER_TYPE_JOURNAL .equalsIgnoreCase(voucherHeader.getType())) vNumGenMode = voucherTypeForULB.readVoucherTypes("Journal"); else vNumGenMode = voucherTypeForULB.readVoucherTypes(voucherTypeBean .getVoucherNumType()); final String autoVoucherType = EGovConfig.getProperty( FinancialConstants.APPLCONFIGNAME, voucherTypeBean .getVoucherNumType().toLowerCase(), "", FinancialConstants.CATEGORYFORVNO); final String vocuherNumber = voucherHelper.getGeneratedVoucherNumber( voucherHeader.getFundId().getId(), autoVoucherType, voucherHeader.getVoucherDate(), vNumGenMode, voucherHeader.getVoucherNumber()); voucherHeader.setVoucherNumber(vocuherNumber); } public CVoucherHeader postIntoVoucherHeader( final CVoucherHeader voucherHeader, final VoucherTypeBean voucherTypeBean) throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("start | insertIntoVoucherHeader"); voucherHeader.setName(voucherTypeBean.getVoucherName()); voucherHeader.setType(voucherTypeBean.getVoucherType()); String vNumGenMode = null; if (null != voucherHeader.getType() && FinancialConstants.STANDARD_VOUCHER_TYPE_JOURNAL .equalsIgnoreCase(voucherHeader.getType())) vNumGenMode = voucherTypeForULB.readVoucherTypes("Journal"); else vNumGenMode = voucherTypeForULB.readVoucherTypes(voucherTypeBean .getVoucherNumType()); final String autoVoucherType = EGovConfig.getProperty( FinancialConstants.APPLCONFIGNAME, voucherTypeBean .getVoucherNumType().toLowerCase(), "", FinancialConstants.CATEGORYFORVNO); final String vocuherNumber = voucherHelper.getGeneratedVoucherNumber( voucherHeader.getFundId().getId(), autoVoucherType, voucherHeader.getVoucherDate(), vNumGenMode, voucherHeader.getVoucherNumber()); voucherHeader.setVoucherNumber(vocuherNumber); /* * if("Auto".equalsIgnoreCase(vNumGenMode)){ if(LOGGER.isDebugEnabled()) * LOGGER.debug("Generating auto voucher number"); String vDate = * Constants.DDMMYYYYFORMAT2.format(voucherHeader.getVoucherDate()); * //String vn1 = * getGeneratedVoucherNumber(voucherHeader.getFundId().getId(), * autoVoucherType, voucherHeader.getVoucherDate()); voucherHeader * .setVoucherNumber * (cmImpl.getTxnNumber(voucherHeader.getFundId().getId( * ).toString(),autoVoucherType,vDate,conn)); } else { Query * query=getSession * ().createQuery("select f.identifier from Fund f where id=:fundId"); * query.setInteger("fundId", voucherHeader.getFundId().getId()); String * fundIdentifier = query.uniqueResult().toString(); //String vn2 = * getFormattedManualVoucherNumber(fundIdentifier, autoVoucherType, * voucherHeader.getVoucherNumber()); voucherHeader.setVoucherNumber(new * StringBuffer().append(fundIdentifier).append(autoVoucherType). * append(voucherHeader.getVoucherNumber()).toString()); } */ try { final String vdt = Constants.DDMMYYYYFORMAT1.format(voucherHeader .getVoucherDate()); String fiscalPeriod = null; fiscalPeriod = eGovernCommon.getFiscalPeriod(vdt); if (null == fiscalPeriod) throw new ApplicationRuntimeException( "Voucher Date not within an open period or Financial year not open for posting, fiscalPeriod := " + fiscalPeriod); voucherHeader.setFiscalPeriodId(Integer.valueOf(fiscalPeriod)); // String // vType=voucherHeader.getVoucherNumber().substring(0,Integer.parseInt(FinancialConstants.VOUCHERNO_TYPE_LENGTH)); final String vType = voucherHeader.getFundId().getIdentifier() + "/" + getCgnType(voucherHeader.getType()) + "/CGVN"; String eg_voucher = eGovernCommon .getEg_Voucher(vType, fiscalPeriod); for (int i = eg_voucher.length(); i < 10; i++) eg_voucher = "0" + eg_voucher; final String cgNum = vType + eg_voucher; voucherHeader.setCgvn(cgNum); voucherHeader.setEffectiveDate(new Date()); if (!eGovernCommon .isUniqueVN(voucherHeader.getVoucherNumber(), vdt)) throw new ApplicationRuntimeException( "Duplicate Voucher Number"); // vh.setCreatedBy(userMngr.getUserById(Integer.valueOf(ApplicationThreadLocals.getUserId()))); voucherHeader.getVouchermis().setVoucherheaderid(voucherHeader); voucherHeader .setStatus(FinancialConstants.PREAPPROVEDVOUCHERSTATUS); final List<AppConfigValues> appConfig =appConfigValuesService.getConfigValuesByModuleAndKey(FinancialConstants.MODULE_NAME_APPCONFIG, "JournalVoucher_ConfirmonCreate"); if (null != appConfig &&!appConfig.isEmpty()) for (final AppConfigValues appConfigVal : appConfig) voucherHeader.setIsConfirmed(Integer.valueOf(appConfigVal .getValue())); persist(voucherHeader); if (!voucherHeader.getType().equalsIgnoreCase( FinancialConstants.STANDARD_VOUCHER_TYPE_JOURNAL)) { final StringBuffer sourcePath = new StringBuffer(); sourcePath .append(voucherHeader.getVouchermis().getSourcePath()) .append(voucherHeader.getId().toString()); voucherHeader.getVouchermis().setSourcePath( sourcePath.toString()); update(voucherHeader); } } catch (final ApplicationRuntimeException e) { LOGGER.error(e); throw new ApplicationRuntimeException(e.getMessage()); } catch (final Exception e) { LOGGER.error(e); throw new ApplicationRuntimeException(e.getMessage()); } if (LOGGER.isDebugEnabled()) LOGGER.debug("End | insertIntoVoucherHeader"); return voucherHeader; } enum voucherTypeEnum { JOURNALVOUCHER, CONTRA, RECEIPT, PAYMENT; } protected String getCgnType(String vType) { vType = vType.toUpperCase().replaceAll(" ", ""); String cgnType = null; String typetoCheck = vType; if (vType.equalsIgnoreCase("JOURNAL VOUCHER")) typetoCheck = "JOURNALVOUCHER"; switch (voucherTypeEnum.valueOf(typetoCheck.toUpperCase())) { case JOURNALVOUCHER: cgnType = "JVG"; break; case CONTRA: cgnType = "CSL"; break; case RECEIPT: cgnType = "MSR"; break; case PAYMENT: cgnType = "DBP"; break; } return cgnType; } public void insertIntoRecordStatus(final CVoucherHeader voucherHeader) throws Exception { try { final EgfRecordStatus recordStatus = new EgfRecordStatus(); final String code = EGovConfig.getProperty("egf_config.xml", "confirmoncreate", "", voucherHeader.getType()); if ("N".equalsIgnoreCase(code)) recordStatus.setStatus(Integer.valueOf(1)); else recordStatus.setStatus(Integer.valueOf(0)); recordStatus.setUpdatedtime(new Date()); recordStatus.setVoucherheader(voucherHeader); recordStatus.setRecordType(voucherHeader.getType()); recordStatus.setUserid(ApplicationThreadLocals.getUserId() .intValue()); recordStatusPersistenceService.persist(recordStatus); } catch (final HibernateException he) { LOGGER.error(he.getMessage()); throw new HibernateException(he); } catch (final Exception e) { LOGGER.error(e.getMessage()); throw new HibernateException(e); } } @SuppressWarnings({ "unchecked", "deprecation" }) public Map<String, Object> getDesgByDeptAndType(final String type, final String scriptName) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | getDesgUserByDeptAndDesgName | Start"); final Map<String, Object> map = new HashMap<String, Object>(); final List<Map<String, Object>> designationList = new ArrayList<Map<String, Object>>(); /* * for (String desgFuncryName : list) { * if(desgFuncryName.trim().length()!=0 && * !desgFuncryName.equalsIgnoreCase("END")){ desgFuncryMap = new * HashMap<String, Object>(); if(LOGGER.isDebugEnabled()) * LOGGER.debug("Designation and Functionary Name = "+ * desgFuncryName); try { designation =new * DesignationMasterDAO().getDesignationByDesignationName * (desgFuncryName.substring(desgFuncryName.indexOf('-')+1)); * desgFuncryMap.put("designationName", designation.getName()); * desgFuncryMap * .put("designationId",designation.getId()+"-"+desgFuncryName * .substring(0,desgFuncryName.indexOf('-'))); * designationList.add(desgFuncryMap); } catch (NoSuchObjectException e) * { LOGGER.error(e); } }else if * (desgFuncryName.equalsIgnoreCase("END")) { map.put("wfitemstate", * "END"); } } */ map.put("wfitemstate", "END"); map.put("designationList", designationList); return map; } @SuppressWarnings({ "unchecked", "deprecation" }) public Map<String, Object> getDesgByDeptAndTypeAndvouDate( final String type, final String scriptName, final Date vouDate) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | getDesgUserByDeptAndDesgName | Start"); final Map<String, Object> map = new HashMap<String, Object>(); Designation designation = null; persistenceService.findAllByNamedQuery(Script.BY_NAME, scriptName).get( 0); final List<String> list = null;/* * (List<String>) * validScript.eval(Script * .createContext( * "eisCommonServiceBean", * eisCommonService,"userId", * Integer.valueOf * (ApplicationThreadLocals * .getUserId().trim()),"DATE",new * Date() * ,"type",type,"vouDate",vouDate.getTime * ())); */ Map<String, Object> desgFuncryMap; final List<Map<String, Object>> designationList = new ArrayList<Map<String, Object>>(); for (final String desgFuncryName : list) if (desgFuncryName.trim().length() != 0 && !desgFuncryName.equalsIgnoreCase("END")) { desgFuncryMap = new HashMap<String, Object>(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Designation and Functionary Name = " + desgFuncryName); designation = designationService .getDesignationByName(desgFuncryName .substring(desgFuncryName.indexOf('-') + 1)); desgFuncryMap.put("designationName", designation.getName()); desgFuncryMap.put( "designationId", designation.getId() + "-" + desgFuncryName.substring(0, desgFuncryName.indexOf('-'))); designationList.add(desgFuncryMap); } else if (desgFuncryName.equalsIgnoreCase("END")) map.put("wfitemstate", "END"); map.put("designationList", designationList); return map; } @SuppressWarnings({ "unchecked", "deprecation" }) public Map<String, Object> getDesgByDeptAndTypeAndVoudate( final String type, final String scriptName, final Date vouDate) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | getDesgUserByDeptAndDesgName | Start"); final Map<String, Object> map = new HashMap<String, Object>(); Designation designation = null; persistenceService.findAllByNamedQuery(Script.BY_NAME, scriptName).get( 0); final List<String> list = null;/* * (List<String>) * validScript.eval(Script * .createContext( * "eisCommonServiceBean", * eisCommonService,"userId", * Integer.valueOf * (ApplicationThreadLocals * .getUserId().trim()),"DATE",new * Date() * ,"type",type,"vouDate",vouDate.getTime * ())); */ Map<String, Object> desgFuncryMap; final List<Map<String, Object>> designationList = new ArrayList<Map<String, Object>>(); for (final String desgFuncryName : list) if (desgFuncryName.trim().length() != 0 && !desgFuncryName.equalsIgnoreCase("END")) { desgFuncryMap = new HashMap<String, Object>(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Designation and Functionary Name = " + desgFuncryName); designation = designationService .getDesignationByName(desgFuncryName .substring(desgFuncryName.indexOf('-') + 1)); desgFuncryMap.put("designationName", designation.getName()); desgFuncryMap.put( "designationId", designation.getId() + "-" + desgFuncryName.substring(0, desgFuncryName.indexOf('-'))); designationList.add(desgFuncryMap); } else if (desgFuncryName.equalsIgnoreCase("END")) map.put("wfitemstate", "END"); map.put("designationList", designationList); return map; } @SuppressWarnings({ "unchecked", "deprecation" }) public Map<String, Object> getDesgBYPassingWfItem(final String scriptName, final Object wfitem, final Integer deptId) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | getDesgUserByDeptAndDesgName | Start"); final Map<String, Object> map = new HashMap<String, Object>(); Designation designation = null; final Script validScript = (Script) persistenceService .findAllByNamedQuery(Script.BY_NAME, scriptName).get(0); final List<String> list = (List<String>) scriptService.executeScript( validScript, ScriptService.createContext( "eisCommonServiceBean", eisCommonService, "userId", ApplicationThreadLocals.getUserId().intValue(), "DATE", new Date(), "wfitem", wfitem, "deptId", deptId, "persistenceService", persistenceService)); Map<String, Object> desgFuncryMap; List<Map<String, Object>> designationList = new ArrayList<Map<String, Object>>(); for (final String desgFuncryName : list) if (desgFuncryName.trim().length() != 0 && !desgFuncryName.equalsIgnoreCase("END") && !desgFuncryName .equalsIgnoreCase("ANYFUNCTIONARY-ANYDESG")) { desgFuncryMap = new HashMap<String, Object>(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Designation and Functionary Name = " + desgFuncryName); designation = designationService .getDesignationByName(desgFuncryName .substring(desgFuncryName.indexOf('-') + 1)); desgFuncryMap.put("designationName", designation.getName()); desgFuncryMap.put( "designationId", designation.getId() + "-" + desgFuncryName.substring(0, desgFuncryName.indexOf('-'))); designationList.add(desgFuncryMap); map.put("wfitemstate", desgFuncryName); } else if (desgFuncryName .equalsIgnoreCase("ANYFUNCTIONARY-ANYDESG")) { designationList = getAllDesgByAndDept(deptId, desgFuncryName); map.put("wfitemstate", desgFuncryName); } else if (desgFuncryName.equalsIgnoreCase("END")) map.put("wfitemstate", desgFuncryName); map.put("designationList", designationList); return map; } @SuppressWarnings("unchecked") public List<Map<String, Object>> getAllDesgByAndDept(final Integer deptId, final String desgfuncry) { Map<String, Object> desgMap; final List<Map<String, Object>> desgList = new ArrayList<Map<String, Object>>(); if (LOGGER.isDebugEnabled()) LOGGER.debug("VoucherService | getAllDesgByFuncryAndDept | Start"); if (LOGGER.isDebugEnabled()) LOGGER.debug("department id = " + deptId); final StringBuffer query = new StringBuffer(200); query.append( "select DISTINCT desg.name,desg.id from Designation desg , EmployeeView ev where ") .append(" desg.id=ev.desigId.id and ev.deptId.id = ? and ev.userMaster is not null"); if (LOGGER.isDebugEnabled()) LOGGER.debug("getAllDesgByFuncryAndDept Query : = " + query.toString()); final List<Object[]> list = persistenceService.findAllBy( query.toString(), deptId); for (final Object[] objects : list) { desgMap = new HashMap<String, Object>(); desgMap.put("designationName", objects[0]); desgMap.put( "designationId", objects[1] + "-" + desgfuncry.substring(0, desgfuncry.indexOf('-'))); desgList.add(desgMap); } return desgList; } public List<EmployeeView> getUserByDeptAndDesgName( final String departmentId, final String designationId, final String functionaryId) { final HashMap<String, String> paramMap = new HashMap<String, String>(); paramMap.put("departmentId", departmentId); paramMap.put("designationId", designationId); paramMap.put("functionaryId", functionaryId); final List<EmployeeView> empInfoList = (List<EmployeeView>) eisService .getEmployeeInfoList(paramMap); return empInfoList; } /** * * @description - creates the bill register object for the vouchers except * expense JV.eisService * @param billDetailslist * -having account details info. * @param subLedgerlist * - having sub ledger details info. * @param voucherHeader * - header and misc details info. * @param voucherTypeBean * - voucher type info. * @param totalBillAmount * - total bill amount. * @return - returns the created egbillregister object. * @throws Exception */ @Transactional public EgBillregister createBillForVoucherSubType( final List<VoucherDetails> billDetailslist, final List<VoucherDetails> subLedgerlist, final CVoucherHeader voucherHeader, final VoucherTypeBean voucherTypeBean, final BigDecimal totalBillAmount) throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("VoucherService | createBillForVoucherSubType | Start"); final EgBillregister egBillregister = new EgBillregister(); // Fix it for basic financial type also try { egBillregister.setBillstatus("APPROVED"); EgwStatus egwstatus = null; if ("Contractor Journal".equalsIgnoreCase(voucherTypeBean .getVoucherName())) { egwstatus = (EgwStatus) persistenceService .find("from EgwStatus where upper(moduletype)=? and upper(description)=?", "CONTRACTORBILL", "APPROVED"); egBillregister.setExpendituretype("Works"); } else if ("Supplier Journal".equalsIgnoreCase(voucherTypeBean .getVoucherName())) { egwstatus = (EgwStatus) persistenceService .find("from EgwStatus where upper(moduletype)=? and upper(description)=?", "SBILL", "APPROVED"); egBillregister.setExpendituretype("Purchase"); } else if ("Salary Journal".equalsIgnoreCase(voucherTypeBean .getVoucherName())) { egwstatus = (EgwStatus) persistenceService .find("from EgwStatus where upper(moduletype)=? and upper(description)=?", "SALBILL", "APPROVED"); egBillregister.setExpendituretype("Salary"); } else if ("Expense Journal".equalsIgnoreCase(voucherTypeBean .getVoucherName())) { egwstatus = (EgwStatus) persistenceService .find("from EgwStatus where upper(moduletype)=? and upper(description)=?", "EXPENSEBILL", "APPROVED"); egBillregister.setExpendituretype("Expense"); } else if ("Pension Journal".equalsIgnoreCase(voucherTypeBean .getVoucherName())) { egwstatus = (EgwStatus) persistenceService .find("from EgwStatus where upper(moduletype)=? and upper(description)=?", "PENSIONBILL", "APPROVED"); egBillregister.setExpendituretype("Pension"); } egBillregister.setStatus(egwstatus); if (null != voucherTypeBean.getBillDate()) egBillregister.setBilldate(voucherTypeBean.getBillDate()); else egBillregister.setBilldate(voucherHeader.getVoucherDate()); if (null != voucherHeader.getVouchermis().getDivisionid()) egBillregister.setFieldid(new BigDecimal(voucherHeader .getVouchermis().getDivisionid().getId().toString())); egBillregister.setNarration(voucherHeader.getDescription()); egBillregister.setIsactive(true); egBillregister.setBilltype("Final Bill"); egBillregister.setPassedamount(totalBillAmount); egBillregister.setBillamount(totalBillAmount); final EgBillregistermis egBillregistermis = new EgBillregistermis(); egBillregistermis.setFund(voucherHeader.getFundId()); egBillregistermis.setEgDepartment(voucherHeader.getVouchermis() .getDepartmentid()); egBillregistermis.setFunctionaryid(voucherHeader.getVouchermis() .getFunctionary()); egBillregistermis.setFunction(voucherHeader.getVouchermis() .getFunction()); egBillregistermis.setFundsource(voucherHeader.getVouchermis() .getFundsource()); egBillregistermis.setScheme(voucherHeader.getVouchermis() .getSchemeid()); egBillregistermis.setSubScheme(voucherHeader.getVouchermis() .getSubschemeid()); egBillregistermis.setNarration(voucherHeader.getDescription()); egBillregistermis.setPartyBillDate(voucherTypeBean .getPartyBillDate()); egBillregistermis.setPayto(voucherTypeBean.getPartyName()); egBillregistermis.setPartyBillNumber(voucherTypeBean .getPartyBillNum()); egBillregistermis.setFieldid(voucherHeader.getVouchermis() .getDivisionid()); if (voucherTypeBean.getVoucherNumType().equalsIgnoreCase( "fixedassetjv")) { final EgBillSubType egBillSubType = (EgBillSubType) persistenceService .find("from EgBillSubType where name=? and expenditureType=?", "Fixed Asset", "Purchase"); egBillregistermis.setEgBillSubType(egBillSubType); } egBillregistermis.setLastupdatedtime(new Date()); egBillregistermis.setVoucherHeader(voucherHeader); egBillregister.setEgBillregistermis(egBillregistermis); if (null != voucherTypeBean.getBillNum() && StringUtils.isNotEmpty(voucherTypeBean.getBillNum())) egBillregister.setBillnumber(voucherTypeBean.getBillNum()); else { JVBillNumberGenerator b = beanResolver .getAutoNumberServiceFor(JVBillNumberGenerator.class); final String billNumber = b.getNextNumber(egBillregister); egBillregister.setBillnumber(billNumber); if (LOGGER.isDebugEnabled()) LOGGER.debug("VoucherService | createBillForVoucherSubType | Bill number generated :=" + billNumber); } if (!isBillNumUnique(egBillregister.getBillnumber())) throw new ValidationException( Arrays.asList(new ValidationError("bill number", "Duplicate Bill Number : " + egBillregister.getBillnumber()))); egBillregistermis.setEgBillregister(egBillregister); Set<EgBilldetails> egBilldetailes = new HashSet<EgBilldetails>(0); egBilldetailes = prepareBillDetails(egBillregister, billDetailslist, subLedgerlist, voucherHeader, egBilldetailes); egBillregister.setEgBilldetailes(egBilldetailes); egBillRegisterService.applyAuditing(egBillregister); egBillRegisterService.persist(egBillregister); voucherHeader.getVouchermis().setSourcePath( "/EGF/voucher/journalVoucherModify-beforeModify.action?voucherHeader.id=" + voucherHeader.getId()); update(voucherHeader); persistenceService.getSession().flush(); } catch (final ValidationException e) { final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exp", e.getErrors().get(0) .getMessage())); throw new ValidationException(errors); } catch (final Exception e) { final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exp", e.getMessage())); throw new ValidationException(errors); } if (LOGGER.isDebugEnabled()) LOGGER.debug("VoucherService | createBillForVoucherSubType | End | bill number : = " + egBillregister.getBillnumber()); return egBillregister; } /** * @description - update the bill register objects in the JV modify screen * for voucher sub types. * @param billDetailslist * - account detail info. * @param subLedgerlist * - Bill Payee details info. * @param voucherHeader * - bill register and mis info. * @param voucherTypeBean * - different voucher sub type and bill type info. * @param totalBillAmount * - total debit amount. * @return egBillregister - the updated bill register object. * @throws ValidationException */ @Transactional public EgBillregister updateBillForVSubType( final List<VoucherDetails> billDetailslist, final List<VoucherDetails> subLedgerlist, final CVoucherHeader voucherHeader, final VoucherTypeBean voucherTypeBean, final BigDecimal totalBillAmount) throws ValidationException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | updateBillForVSubType | Start"); EgBillregister egBillregister = null; try { egBillregister = (EgBillregister) persistenceService .find("from EgBillregister br where br.egBillregistermis.voucherHeader.id=" + voucherHeader.getId()); final EgBillregistermis egBillregistermis = egBillregister .getEgBillregistermis(); if (null != voucherTypeBean.getBillDate()) egBillregister.setBilldate(voucherTypeBean.getBillDate()); else egBillregister.setBilldate(voucherHeader.getVoucherDate()); if (null != voucherTypeBean.getBillNum() && StringUtils.isNotEmpty(voucherTypeBean.getBillNum())) if (!voucherTypeBean.getBillNum().equalsIgnoreCase( egBillregister.getBillnumber())) { if (!isBillNumUnique(voucherTypeBean.getBillNum())) throw new ValidationException( Arrays.asList(new ValidationError( "bill number", "Duplicate Bill Number : " + voucherTypeBean.getBillNum()))); egBillregister.setBillnumber(voucherTypeBean.getBillNum()); } if (null != voucherHeader.getVouchermis().getDivisionid()) egBillregister.setFieldid(new BigDecimal(voucherHeader .getVouchermis().getDivisionid().getId().toString())); egBillregister.setNarration(voucherHeader.getDescription()); egBillregister.setPassedamount(totalBillAmount); egBillregister.setBillamount(totalBillAmount); egBillregistermis.setFund(voucherHeader.getFundId()); egBillregistermis.setEgDepartment(voucherHeader.getVouchermis() .getDepartmentid()); egBillregistermis.setFunction(voucherHeader.getVouchermis() .getFunction()); egBillregistermis.setFunctionaryid(voucherHeader.getVouchermis() .getFunctionary()); egBillregistermis.setFundsource(voucherHeader.getVouchermis() .getFundsource()); egBillregistermis.setScheme(voucherHeader.getVouchermis() .getSchemeid()); egBillregistermis.setSubScheme(voucherHeader.getVouchermis() .getSubschemeid()); egBillregistermis.setNarration(voucherHeader.getDescription()); egBillregistermis.setPartyBillDate(voucherTypeBean .getPartyBillDate()); egBillregistermis.setPayto(voucherTypeBean.getPartyName()); egBillregistermis.setPartyBillNumber(voucherTypeBean .getPartyBillNum()); final Set<EgBilldetails> egBilldetailes = egBillregister .getEgBilldetailes(); egBilldetailes.clear(); prepareBillDetails(egBillregister, billDetailslist, subLedgerlist, voucherHeader, egBilldetailes); egBillRegisterService.update(egBillregister); } catch (final ValidationException e) { final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exp", e.getErrors().get(0) .getMessage())); throw new ValidationException(errors); } catch (final Exception e) { final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exp", e.getMessage())); throw new ValidationException(errors); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | updateBillForVSubType | End"); return egBillregister; } /** * * @param egBillregister * @param billDetailslist * @param subLedgerlist * @param voucherHeader * @return */ @Transactional private Set<EgBilldetails> prepareBillDetails( final EgBillregister egBillregister, final List<VoucherDetails> billDetailslist, final List<VoucherDetails> subLedgerlist, final CVoucherHeader voucherHeader, final Set<EgBilldetails> egBilldetailes) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | prepareBillDetails | Start"); for (final VoucherDetails accountDetail : billDetailslist) { final EgBilldetails egBilldetail = new EgBilldetails(); egBilldetail.setEgBillregister(egBillregister); egBilldetail.setGlcodeid(new BigDecimal(accountDetail .getGlcodeIdDetail().toString())); egBilldetail.setDebitamount(accountDetail.getDebitAmountDetail()); egBilldetail.setCreditamount(accountDetail.getCreditAmountDetail()); if (null != accountDetail.getFunctionIdDetail()) egBilldetail.setFunctionid(new BigDecimal(accountDetail .getFunctionIdDetail())); if (voucherHeader.getVouchermis().getFunction() != null && !voucherHeader.getVouchermis().getFunction().equals("0")) egBilldetail.setFunctionid(new BigDecimal(voucherHeader .getVouchermis().getFunction().getId())); egBilldetail.setNarration(voucherHeader.getDescription()); Set<EgBillPayeedetails> egBillPaydetailes = null; for (final VoucherDetails subledgerDetail : subLedgerlist) if (accountDetail.getGlcodeIdDetail().equals( subledgerDetail.getGlcode().getId())) { if (null == egBillPaydetailes) egBillPaydetailes = new HashSet<EgBillPayeedetails>(0); final EgBillPayeedetails egBillPaydetail = new EgBillPayeedetails(); egBillPaydetail.setEgBilldetailsId(egBilldetail); egBillPaydetail.setAccountDetailTypeId(subledgerDetail .getDetailType().getId()); egBillPaydetail.setAccountDetailKeyId(subledgerDetail .getDetailKeyId()); if (egBilldetail.getDebitamount() .compareTo(BigDecimal.ZERO) == 1) egBillPaydetail.setDebitAmount(subledgerDetail .getAmount()); else egBillPaydetail.setCreditAmount(subledgerDetail .getAmount()); egBillPaydetail .setNarration(voucherHeader.getDescription()); egBillPaydetail.setLastUpdatedTime(new Date()); egBillPaydetailes.add(egBillPaydetail); } egBilldetail.setEgBillPaydetailes(egBillPaydetailes); egBilldetail.setLastupdatedtime(new Date()); egBilldetailes.add(egBilldetail); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Voucher Service | prepareBillDetails | End"); return egBilldetailes; } private boolean isBillNumUnique(final String billNumber) { final String billNum = (String) persistenceService .find("select billnumber from EgBillregister where upper(billnumber)='" + billNumber.toUpperCase() + "'"); if (null == billNum) return true; else return false; } public void setEisCommonService(final EisCommonService eisCommonService) { this.eisCommonService = eisCommonService; } public void setBudgetDetailsDAO( final BudgetDetailsHibernateDAO detailsHibernateDAO) { budgetDetailsDAO = detailsHibernateDAO; } public VoucherHibernateDAO getVoucherHibDAO() { return voucherHibDAO; } public void setVoucherHibDAO(final VoucherHibernateDAO voucherHibDAO) { this.voucherHibDAO = voucherHibDAO; } public void cancelVoucher(final CVoucherHeader voucher) { voucher.setStatus(4); update(voucher); } public void setPersistenceService( final PersistenceService persistenceService) { this.persistenceService = persistenceService; } public Position getPositionForEmployee(final Employee emp) throws ApplicationRuntimeException { return eisCommonService.getPrimaryAssignmentPositionForEmp(emp.getId()); } public void setScriptService(final ScriptService scriptService) { this.scriptService = scriptService; } public Integer getDefaultDepartment() { persistenceService.findAllByNamedQuery(Script.BY_NAME, "BudgetDetail.get.default.department").get(0); final String defaultDepartmentName = null;/* * (String) * script.eval(Script.createContext * ("eisCommonServiceBean", * eisCommonService, * "userId",Integer * .valueOf(ApplicationThreadLocals * .getUserId().trim()))); */ if (!"".equalsIgnoreCase(defaultDepartmentName)) { final Department dept = (Department) persistenceService.find( "from Department where name=?", defaultDepartmentName); if (dept != null) return dept.getId().intValue(); } return 0; } public FinancialYearHibernateDAO getFinancialYearDAO() { return financialYearDAO; } public void setFinancialYearDAO( final FinancialYearHibernateDAO financialYearDAO) { this.financialYearDAO = financialYearDAO; } public void setEmployeeService(final EmployeeServiceOld employeeService) { this.employeeService = employeeService; } public void setEisService(final EISServeable eisService) { this.eisService = eisService; } public VoucherHelper getVoucherHelper() { return voucherHelper; } public void setVoucherHelper(final VoucherHelper voucherHelper) { this.voucherHelper = voucherHelper; } }