/* * 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.egf.web.actions.payment; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.interceptor.validation.SkipValidation; import org.egov.commons.Bankaccount; import org.egov.commons.Bankbranch; import org.egov.commons.CFunction; import org.egov.commons.CVoucherHeader; import org.egov.commons.EgwStatus; import org.egov.commons.Fund; import org.egov.commons.dao.EgwStatusHibernateDAO; import org.egov.commons.dao.FinancialYearHibernateDAO; import org.egov.commons.service.FunctionService; import org.egov.commons.utils.BankAccountType; import org.egov.infra.admin.master.entity.AppConfigValues; import org.egov.infra.admin.master.entity.Department; import org.egov.infra.admin.master.service.DepartmentService; 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.validation.exception.ValidationError; import org.egov.infra.validation.exception.ValidationException; import org.egov.infra.web.struts.annotation.ValidationErrorPage; import org.egov.infra.workflow.entity.State; import org.egov.infra.workflow.entity.StateAware; import org.egov.infra.workflow.matrix.entity.WorkFlowMatrix; import org.egov.model.advance.EgAdvanceRequisition; import org.egov.model.bills.EgBillregister; import org.egov.model.bills.Miscbilldetail; import org.egov.model.instrument.InstrumentHeader; import org.egov.model.payment.PaymentBean; import org.egov.model.payment.Paymentheader; import org.egov.model.voucher.WorkflowBean; import org.egov.payment.services.PaymentActionHelper; import org.egov.services.payment.PaymentService; import org.egov.services.voucher.VoucherService; import org.egov.utils.Constants; import org.egov.utils.FinancialConstants; import org.egov.utils.VoucherHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import com.exilant.eGov.src.transactions.VoucherTypeForULB; import com.opensymphony.xwork2.validator.annotations.Validation; @ParentPackage("egov") @Validation @Results({ @Result(name = "search", location = "payment-search.jsp"), @Result(name = "searchbills", location = "payment-searchbills.jsp"), @Result(name = "tnebSearch", location = "payment-tnebSearch.jsp"), @Result(name = "balance", location = "payment-balance.jsp"), @Result(name = "modify", location = "payment-modify.jsp"), @Result(name = "form", location = "payment-form.jsp"), @Result(name = "view", location = "payment-view.jsp"), @Result(name = "list", location = "payment-list.jsp") }) public class PaymentAction extends BasePaymentAction { private final static String FORWARD = "Forward"; private static final long serialVersionUID = 1L; private String expType, fromDate, toDate, mode, voucherdate, paymentMode, contractorIds = "", supplierIds = "", vouchernumber, voucherNumberPrefix = "", voucherNumberSuffix = ""; private Long functionSel; private String contingentIds = ""; private String salaryIds = ""; private String pensionIds = ""; private int miscount = 0; private boolean isDepartmentDefault; private BigDecimal balance; @Autowired private EgwStatusHibernateDAO egwStatusHibernateDAO; private Paymentheader paymentheader = new Paymentheader(); @Qualifier("paymentService") private @Autowired PaymentService paymentService; @Autowired private VoucherTypeForULB voucherTypeForULB; @Autowired @Qualifier("voucherService") private VoucherService voucherService; @Autowired private DepartmentService departmentService; @Autowired private FunctionService functionService; private Integer bankaccount, bankbranch; private Integer departmentId; private Integer defaultDept; private final SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Constants.LOCALE); private final SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Constants.LOCALE); private static final Logger LOGGER = Logger.getLogger(PaymentAction.class); private static final String PAYMENTID = "paymentid"; private static final String VIEW = "view"; private static final String LIST = "list"; private static final String MODIFY = "modify"; private String wfitemstate; private String type; private String billNumber; private String typeOfAccount; private List<EgBillregister> contractorBillList = null; private List<EgBillregister> supplierBillList = null; private List<EgBillregister> contingentBillList = null; private List<EgBillregister> salaryBillList = new ArrayList<EgBillregister>(); private List<EgBillregister> pensionBillList = new ArrayList<EgBillregister>(); private List<EgBillregister> totalBillList = new ArrayList<EgBillregister>(); private List<Bankaccount> bankaccountList = null; private List<Miscbilldetail> miscBillList = null; private List<PaymentBean> billList; private List<PaymentBean> contractorList = null; private List<PaymentBean> supplierList = null; private List<PaymentBean> contingentList = null; private List<PaymentBean> salaryList = new ArrayList<PaymentBean>(); private List<PaymentBean> pensionList = new ArrayList<PaymentBean>(); private List<InstrumentHeader> instrumentHeaderList; private List<Paymentheader> paymentheaderList; private EgBillregister billregister; private boolean disableExpenditureType = false; private boolean enablePensionType = false; private boolean changePartyName; private String newPartyname; private String chk = ""; private String fundNameStr = ""; private String functionNameStr = ""; private String deptNameStr = ""; private String fundSourceNameStr = ""; private String schemeStr = ""; private String subSchemeStr = ""; private Map<String, String> payeeMap = new HashMap<String, String>(); private Map<Long, BigDecimal> deductionAmtMap = new HashMap<Long, BigDecimal>(); private Map<Long, BigDecimal> paidAmtMap = new HashMap<Long, BigDecimal>(); private List<EgAdvanceRequisition> advanceRequisitionList = new ArrayList<EgAdvanceRequisition>(); private VoucherHelper voucherHelper; private CFunction cFunctionobj; private String rtgsDefaultMode; private Date rtgsModeRestrictionDateForCJV; // private String paymentRestrictionDateForCJV; private String billSubType; private String region; private String month; private String year; private String bank_branch; private String bank_account; private ScriptService scriptService; private Map<Integer, String> monthMap = new LinkedHashMap<Integer, String>(); private String attributes = ""; private FinancialYearHibernateDAO financialYearDAO; @Autowired private PaymentActionHelper paymentActionHelper; private String cutOffDate; DateFormat df = new SimpleDateFormat("dd-MMM-yyyy"); DateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd"); Date date; public PaymentAction() { if (LOGGER.isDebugEnabled()) LOGGER.debug("creating PaymentAction..."); addRelatedEntity("paymentheader", Paymentheader.class); if (LOGGER.isDebugEnabled()) LOGGER.debug("creating PaymentAction completed."); } @Override public void prepare() { super.prepare(); if (fromDate == null) fromDate = ""; if (toDate == null) toDate = ""; if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting prepare..."); // mandatoryFields = new ArrayList<String>(); if (parameters.containsKey("salaryType")) setDisableExpenditureType(true); if (parameters.containsKey("pensionType")) { setEnablePensionType(true); setDisableExpenditureType(true); } if (parameters.get("fundId") != null && !parameters.get("fundId")[0].equals("-1")) { final Fund fund = (Fund) persistenceService.find("from Fund where id=?", Integer.parseInt(parameters.get("fundId")[0])); addDropdownData( "bankbranchList", persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? and type in ('RECEIPTS_PAYMENTS','PAYMENTS') ) and br.isactive=true order by br.bank.name asc", fund)); } else addDropdownData("bankbranchList", Collections.EMPTY_LIST); if (parameters.get("functionSel") != null && !parameters.get("functionSel")[0].equals("-1") && !parameters.get("functionSel")[0].equals("")) cFunctionobj = (CFunction) persistenceService.find("from CFunction where id=?", Long.valueOf(parameters.get("functionSel")[0])); if (getBankbranch() != null) addDropdownData("bankaccountList", persistenceService.findAllBy(" from Bankaccount where bankbranch.id=? and isactive=true ", getBankbranch())); else if (parameters.get("paymentheader.bankaccount.bankbranch.id") != null && !parameters.get("paymentheader.bankaccount.bankbranch.id")[0].equals("-1")) addDropdownData( "bankaccountList", persistenceService.findAllBy(" from Bankaccount where bankbranch.id=? and isactive=true ", Integer.valueOf(parameters.get("paymentheader.bankaccount.bankbranch.id")[0]))); else addDropdownData("bankaccountList", Collections.EMPTY_LIST); if (getBillregister() != null && getBillregister().getId() != null) { billregister = (EgBillregister) persistenceService.find(" from EgBillregister where id=?", getBillregister().getId()); addDropdownData( "bankbranchList", persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? ) and br.isactive=true order by br.bank.name asc", billregister.getEgBillregistermis().getFund())); } addDropdownData("designationList", Collections.EMPTY_LIST); addDropdownData("userList", Collections.EMPTY_LIST); addDropdownData("regionsList", VoucherHelper.TNEB_REGIONS); addDropdownData("financialYearsList", financialYearDAO.getAllActiveFinancialYearList()); monthMap = DateUtils.getAllMonthsWithFullNames(); typeOfAccount = FinancialConstants.TYPEOFACCOUNT_PAYMENTS + "," + FinancialConstants.TYPEOFACCOUNT_RECEIPTS_PAYMENTS; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed prepare."); } private void loadbankBranch(final Fund fund) { if (typeOfAccount != null && !typeOfAccount.equals("")) { if (typeOfAccount.indexOf(",") != -1) { final String[] strArray = typeOfAccount.split(","); addDropdownData( "bankbranchList", persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? and isactive = true and type in (?,?) ) and br.isactive=true and br.bank.isactive = true order by br.bank.name asc", fund, BankAccountType.valueOf(strArray[0]), BankAccountType.valueOf(strArray[1]))); } else addDropdownData( "bankbranchList", persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? and isactive = true and type in (?) ) and br.isactive=true and br.bank.isactive = true order by br.bank.name asc", fund, typeOfAccount)); } else addDropdownData( "bankbranchList", persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? and isactive = true) and br.isactive=true and br.bank.isactive = true order by br.bank.name asc", fund)); String bankCode = null; if (billSubType != null && !billSubType.equalsIgnoreCase("")) { try { final List<AppConfigValues> configValues = appConfigValuesService. getConfigValuesByModuleAndKey(FinancialConstants.MODULE_NAME_APPCONFIG, FinancialConstants.EB_VOUCHER_PROPERTY_BANK); for (final AppConfigValues appConfigVal : configValues) bankCode = appConfigVal.getValue(); } catch (final Exception e) { throw new ApplicationRuntimeException("Appconfig value for EB Voucher propartys is not defined in the system"); } addDropdownData( "bankbranchList", persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? and type in ('RECEIPTS_PAYMENTS','PAYMENTS') ) and br.isactive=true and br.bank.code = ? order by br.bank.name asc", fund, bankCode)); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed loadbankBranch."); } @Override public StateAware getModel() { voucherHeader = (CVoucherHeader) super.getModel(); voucherHeader.setType("Payment"); return voucherHeader; } @SkipValidation @Action(value = "/payment/payment-beforeSearch") public String beforeSearch() throws Exception { return "search"; } @SkipValidation @Action(value = "/payment/payment-beforeTNEBSearch") public String beforeTNEBSearch() throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting beforeTNEBSearch..."); setTNEBMandatoryFields(); // if(validateUser("deptcheck")) voucherHeader.getVouchermis().setDepartmentid(paymentService.getAssignment().getDepartment()); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed beforeSearch."); return "tnebSearch"; } private void setTNEBMandatoryFields() { final List<String> propartyAppConfigKeysList = new ArrayList<String>(); final Map<String, String> propartyAppConfigResultList = new LinkedHashMap<String, String>(); propartyAppConfigKeysList.add(FinancialConstants.EB_VOUCHER_PROPERTY_FUND); propartyAppConfigKeysList.add(FinancialConstants.EB_VOUCHER_PROPERTY_FUNCTION); propartyAppConfigKeysList.add(FinancialConstants.EB_VOUCHER_PROPERTY_DEPARTMENT); propartyAppConfigKeysList.add(FinancialConstants.EB_VOUCHER_PROPERTY_BANKBRANCH); propartyAppConfigKeysList.add(FinancialConstants.EB_VOUCHER_PROPERTY_BANKACCOUNT); for (final String key : propartyAppConfigKeysList) { String value = null; try { final List<AppConfigValues> configValues = appConfigValuesService. getConfigValuesByModuleAndKey(FinancialConstants.MODULE_NAME_APPCONFIG, key); for (final AppConfigValues appConfigVal : configValues) { value = appConfigVal.getValue(); propartyAppConfigResultList.put(key, value); } } catch (final Exception e) { throw new ApplicationRuntimeException("Appconfig value for EB Voucher propartys is not defined in the system"); } } for (final String key : propartyAppConfigResultList.keySet()) { if (key.equals("EB Voucher Property-Fund")) voucherHeader.setFundId((Fund) persistenceService.find("from Fund where code = ?", propartyAppConfigResultList.get(key))); if (key.equals("EB Voucher Property-Function")) voucherHeader.getVouchermis() .setFunction( (CFunction) persistenceService.find("from CFunction where code = ?", propartyAppConfigResultList.get(key))); if (key.equals("EB Voucher Property-Department")) voucherHeader.getVouchermis().setDepartmentid( (Department) persistenceService.find("from Department where deptCode = ?", propartyAppConfigResultList.get(key))); if (key.equals("EB Voucher Property-BankBranch")) bank_branch = propartyAppConfigResultList.get(key); if (key.equals("EB Voucher Property-BankAccount")) { bank_account = propartyAppConfigResultList.get(key); final Bankaccount ba = (Bankaccount) persistenceService.find(" from Bankaccount where accountnumber=?", bank_account); if (ba.getId() != null) bankaccount = ba.getId().intValue(); } } } @SkipValidation @ValidationErrorPage(value = "search") @Action(value = "/payment/payment-search") public String search() throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting search..."); // Get App config value final StringBuffer sql = new StringBuffer(); if (!"".equals(billNumber)) sql.append(" and bill.billnumber = '" + billNumber + "' "); if (!"".equals(fromDate)) sql.append(" and bill.billdate>='" + sdf.format(formatter.parse(fromDate)) + "' "); if (!"".equals(toDate)) sql.append(" and bill.billdate<='" + sdf.format(formatter.parse(toDate)) + "'"); if (voucherHeader.getFundId() != null) sql.append(" and bill.egBillregistermis.fund.id=" + voucherHeader.getFundId().getId()); if (voucherHeader.getVouchermis().getFundsource() != null) sql.append(" and bill.egBillregistermis.fundsource.id=" + voucherHeader.getVouchermis().getFundsource().getId()); if (voucherHeader.getVouchermis().getDepartmentid() != null) sql.append(" and bill.egBillregistermis.egDepartment.id=" + voucherHeader.getVouchermis().getDepartmentid().getId()); if (voucherHeader.getVouchermis().getSchemeid() != null) sql.append(" and bill.egBillregistermis.scheme.id=" + voucherHeader.getVouchermis().getSchemeid().getId()); if (voucherHeader.getVouchermis().getSubschemeid() != null) sql.append(" and bill.egBillregistermis.subScheme.id=" + voucherHeader.getVouchermis().getSubschemeid().getId()); if (voucherHeader.getVouchermis().getFunctionary() != null) sql.append(" and bill.egBillregistermis.functionaryid.id=" + voucherHeader.getVouchermis().getFunctionary().getId()); if (voucherHeader.getVouchermis().getDivisionid() != null) sql.append(" and bill.egBillregistermis.fieldid=" + voucherHeader.getVouchermis().getDivisionid().getId()); // function field is intruduced later as mandatory , so we getting for the vocuhermis table if (voucherHeader.getVouchermis().getFunction() != null) sql.append(" and bill.egBillregistermis.function=" + voucherHeader.getVouchermis().getFunction().getId()); EgwStatus egwStatus = null; /* * String mainquery = * "from EgBillregister bill where bill.egBillregistermis.voucherHeader is not null and bill.egBillregistermis.voucherHeader.status=0 " * + * " and bill.expendituretype=? and ( ( bill.passedamount >(select sum(paidamount) from Miscbilldetail where billVoucherHeader in " * + " (select voucherHeader from EgBillregistermis where egBillregister.id = bill.id ) and (payVoucherHeader is null or " * + " payVoucherHeader.status not in (1,2,4) ) group by billVoucherHeader)) " + * " or(select count(*) from Miscbilldetail where payVoucherHeader.status!=4 and billVoucherHeader in " + * " (select voucherHeader from EgBillregistermis where egBillregister.id = bill.id ) )=0 ) "; */ final String mainquery = "from EgBillregister bill where bill.expendituretype=? and bill.egBillregistermis.voucherHeader.status=0 " + " and bill.passedamount > (select SUM(misc.paidamount) from Miscbilldetail misc where misc.billVoucherHeader = bill.egBillregistermis.voucherHeader " + " and misc.payVoucherHeader.status in (0,5))"; final String mainquery1 = "from EgBillregister bill where bill.expendituretype=? and bill.egBillregistermis.voucherHeader.status=0 " + " and bill.egBillregistermis.voucherHeader NOT IN (select misc.billVoucherHeader from Miscbilldetail misc where misc.billVoucherHeader is not null and misc.payVoucherHeader.status <> 4)"; if (disableExpenditureType == true && enablePensionType == false || expType != null && !expType.equals("-1") && expType.equals("Salary")) return salaryBills(sql, mainquery, mainquery1); if (disableExpenditureType == true && enablePensionType == true || expType != null && !expType.equals("-1") && expType.equals("Pension")) return pensionBills(sql, mainquery, mainquery1); if (LOGGER.isDebugEnabled()) LOGGER.debug("start purchase bill"); if (expType == null || expType.equals("-1") || expType.equals("Purchase")) { egwStatus = egwStatusHibernateDAO.getStatusByModuleAndCode("SBILL", "Approved"); final EgwStatus egwStatus1 = egwStatusHibernateDAO.getStatusByModuleAndCode("PURCHBILL", "Passed"); String statusCheck = ""; if (egwStatus == null) { statusCheck = " and bill.status in (" + egwStatus1.getId() + ") "; } else statusCheck = " and bill.status in (" + egwStatus.getId() + "," + egwStatus1.getId() + ") "; final String supplierBillSql = mainquery + statusCheck + sql.toString() + " order by bill.billdate desc"; final String supplierBillSql1 = mainquery1 + statusCheck + sql.toString() + " order by bill.billdate desc"; supplierBillList = getPersistenceService().findPageBy(supplierBillSql, 1, 500, "Purchase").getList(); if (supplierBillList != null) supplierBillList.addAll(getPersistenceService().findPageBy(supplierBillSql1, 1, 500, "Purchase").getList()); else supplierBillList = getPersistenceService() .findPageBy(supplierBillSql1, 1, 500, "Purchase", egwStatus, egwStatus1).getList(); final Set<EgBillregister> tempBillList = new LinkedHashSet<EgBillregister>(supplierBillList); supplierBillList.clear(); supplierBillList.addAll(tempBillList); if (LOGGER.isDebugEnabled()) LOGGER.debug("supplierBillSql ===> " + supplierBillSql); } if (LOGGER.isDebugEnabled()) LOGGER.debug("end purchase bill"); if (LOGGER.isDebugEnabled()) LOGGER.debug("start works bill"); if (expType == null || expType.equals("-1") || expType.equals("Works")) { // right not we dont know, the EGW-Status for works bill, passed from external system egwStatus = egwStatusHibernateDAO.getStatusByModuleAndCode("WORKSBILL", "Passed"); EgwStatus egwStatus1 = egwStatusHibernateDAO.getStatusByModuleAndCode("CONTRACTORBILL", "APPROVED"); // for // external // systems String statusCheck = ""; if (egwStatus1 == null) { statusCheck = " and bill.status in (" + egwStatus.getId() + ") "; } else statusCheck = " and bill.status in (" + egwStatus.getId() + "," + egwStatus1.getId() + ") "; final String contractorBillSql = mainquery + statusCheck + sql.toString() + " order by bill.billdate desc"; final String contractorBillSql1 = mainquery1 + statusCheck + sql.toString() + " order by bill.billdate desc"; contractorBillList = getPersistenceService().findPageBy(contractorBillSql, 1, 500, "Works") .getList(); if (contractorBillList != null) contractorBillList.addAll(getPersistenceService().findPageBy(contractorBillSql1, 1, 500, "Works").getList()); else contractorBillList = getPersistenceService().findPageBy(contractorBillSql1, 1, 500, "Works").getList(); final Set<EgBillregister> tempBillList = new LinkedHashSet<EgBillregister>(contractorBillList); contractorBillList.clear(); contractorBillList.addAll(tempBillList); if (LOGGER.isInfoEnabled()) LOGGER.info("contractorBillSql ===> " + contractorBillSql); } if (LOGGER.isDebugEnabled()) LOGGER.debug("end works bill"); if (LOGGER.isDebugEnabled()) LOGGER.debug("start contingent bill"); if (expType == null || expType.equals("-1") || expType.equals(FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT)) { final String cBillmainquery = "from EgBillregister bill left join fetch bill.egBillregistermis.egBillSubType egBillSubType where (egBillSubType is null or egBillSubType.name not in ('" + FinancialConstants.BILLSUBTYPE_TNEBBILL + "')) and bill.expendituretype=? and bill.egBillregistermis.voucherHeader.status=0 " + " and bill.passedamount > (select SUM(misc.paidamount) from Miscbilldetail misc where misc.billVoucherHeader = bill.egBillregistermis.voucherHeader " + " and misc.payVoucherHeader.status in (0,5))"; final String cBillmainquery1 = "from EgBillregister bill left join fetch bill.egBillregistermis.egBillSubType egBillSubType where (egBillSubType is null or egBillSubType.name not in ('" + FinancialConstants.BILLSUBTYPE_TNEBBILL + "')) and bill.expendituretype=? and bill.egBillregistermis.voucherHeader.status=0 " + " and bill.egBillregistermis.voucherHeader NOT IN (select misc.billVoucherHeader from Miscbilldetail misc where misc.billVoucherHeader is not null and misc.payVoucherHeader.status <> 4)"; egwStatus = egwStatusHibernateDAO.getStatusByModuleAndCode("EXPENSEBILL", "Approved"); // for financial expense bills final String cBillSql = cBillmainquery + " and bill.status in (?) " + sql.toString() + " order by bill.billdate desc"; final String cBillSql1 = cBillmainquery1 + " and bill.status in (?) " + sql.toString() + " order by bill.billdate desc"; contingentBillList = getPersistenceService().findPageBy(cBillSql, 1, 500, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT, egwStatus).getList(); if (contingentBillList != null) contingentBillList.addAll(getPersistenceService().findPageBy(cBillSql1, 1, 500, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT, egwStatus).getList()); else contingentBillList = getPersistenceService().findPageBy(cBillSql1, 1, 500, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT, egwStatus).getList(); final Set<EgBillregister> tempBillList = new LinkedHashSet<EgBillregister>(contingentBillList); contingentBillList.clear(); contingentBillList.addAll(tempBillList); if (LOGGER.isInfoEnabled()) LOGGER.info("cBillSql ===> " + cBillSql); } if (LOGGER.isDebugEnabled()) LOGGER.debug("end contingent bill"); if (LOGGER.isDebugEnabled()) LOGGER.debug("getting glcodeids"); paymentService.getGlcodeIds(); if (LOGGER.isDebugEnabled()) LOGGER.debug("done glcodeids"); if (LOGGER.isDebugEnabled()) LOGGER.debug("deduction works start"); deductionAmtMap = paymentService.getDeductionAmt(contractorBillList, "Works"); if (LOGGER.isDebugEnabled()) LOGGER.debug("deduction works end"); if (LOGGER.isDebugEnabled()) LOGGER.debug("deduction supplier start"); deductionAmtMap.putAll(paymentService.getDeductionAmt(supplierBillList, "Purchase")); if (LOGGER.isDebugEnabled()) LOGGER.debug("deduction supplier end"); if (LOGGER.isDebugEnabled()) LOGGER.debug("deduction contingent start"); deductionAmtMap.putAll(paymentService.getDeductionAmt(contingentBillList, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT)); if (LOGGER.isDebugEnabled()) LOGGER.debug("deduction contingent end"); if (LOGGER.isDebugEnabled()) LOGGER.debug("paidamt works start"); paidAmtMap = paymentService.getEarlierPaymentAmt(contractorBillList, "Works"); if (LOGGER.isDebugEnabled()) LOGGER.debug("paidamt works end"); if (LOGGER.isDebugEnabled()) LOGGER.debug("paidamt purchase start"); paidAmtMap.putAll(paymentService.getEarlierPaymentAmt(supplierBillList, "Purchase")); if (LOGGER.isDebugEnabled()) LOGGER.debug("paidamt purchase end"); if (LOGGER.isDebugEnabled()) LOGGER.debug("paidamt contingent start"); paidAmtMap.putAll(paymentService.getEarlierPaymentAmt(contingentBillList, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT)); if (LOGGER.isDebugEnabled()) LOGGER.debug("paidamt contingent end"); if (LOGGER.isDebugEnabled()) LOGGER.debug("getCSList all 3 start"); contractorList = paymentService.getCSList(contractorBillList, deductionAmtMap, paidAmtMap); supplierList = paymentService.getCSList(supplierBillList, deductionAmtMap, paidAmtMap); contingentList = paymentService.getCSList(contingentBillList, deductionAmtMap, paidAmtMap); if (LOGGER.isDebugEnabled()) LOGGER.debug("getCSList all 3 end"); if (LOGGER.isInfoEnabled()) LOGGER.info("contingentList size ===" + contingentList.size()); setMode("search"); paymentMode = FinancialConstants.MODEOFCOLLECTION_CHEQUE; loadSchemeSubscheme(); loadFundSource(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed search."); return "searchbills"; } private String salaryBills(final StringBuffer sql, final String mainquery, final String mainquery1) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting salaryBills..."); final EgwStatus egwStatus = egwStatusHibernateDAO.getStatusByModuleAndCode("SALBILL", "Approved"); // for financial salary // bills final EgwStatus egwStatus1 = egwStatusHibernateDAO.getStatusByModuleAndCode("SBILL", "Approved"); // for external systems final String sBillSql = mainquery + " and bill.status in (?,?) " + sql.toString() + " order by bill.billdate desc"; final String sBillSql1 = mainquery1 + " and bill.status in (?,?) " + sql.toString() + " order by bill.billdate desc"; salaryBillList = getPersistenceService().findAllBy(sBillSql, FinancialConstants.STANDARD_EXPENDITURETYPE_SALARY, egwStatus, egwStatus1); if (salaryBillList != null) salaryBillList.addAll(getPersistenceService().findAllBy(sBillSql1, FinancialConstants.STANDARD_EXPENDITURETYPE_SALARY, egwStatus, egwStatus1)); else salaryBillList = getPersistenceService().findAllBy(sBillSql1, FinancialConstants.STANDARD_EXPENDITURETYPE_SALARY, egwStatus, egwStatus1); final Set<EgBillregister> tempBillList = new LinkedHashSet<EgBillregister>(salaryBillList); salaryBillList.clear(); salaryBillList.addAll(tempBillList); if (LOGGER.isDebugEnabled()) LOGGER.debug("sBillSql ===> " + sBillSql); paymentService.getGlcodeIds(); deductionAmtMap = paymentService.getDeductionAmt(salaryBillList, "Salary"); paidAmtMap = paymentService.getEarlierPaymentAmt(salaryBillList, "Salary"); salaryList = paymentService.getCSList(salaryBillList, deductionAmtMap, paidAmtMap); setMode("search"); paymentMode = FinancialConstants.MODEOFPAYMENT_CASH; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed salaryBills."); return "salaryBills"; } private String pensionBills(final StringBuffer sql, final String mainquery, final String mainquery1) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting pensionBills..."); final EgwStatus egwStatus = egwStatusHibernateDAO.getStatusByModuleAndCode("PENSIONBILL", "Approved"); final String pBillSql = mainquery + " and bill.status in (?) " + sql.toString() + " order by bill.billdate desc"; final String pBillSql1 = mainquery1 + " and bill.status in (?) " + sql.toString() + " order by bill.billdate desc"; pensionBillList = getPersistenceService().findAllBy(pBillSql, FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION, egwStatus); if (pensionBillList != null) pensionBillList.addAll(getPersistenceService().findAllBy(pBillSql1, FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION, egwStatus)); else pensionBillList = getPersistenceService().findAllBy(pBillSql1, FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION, egwStatus); final Set<EgBillregister> tempBillList = new LinkedHashSet<EgBillregister>(pensionBillList); pensionBillList.clear(); pensionBillList.addAll(tempBillList); if (LOGGER.isDebugEnabled()) LOGGER.debug("pBillSql ===> " + pBillSql); paymentService.getGlcodeIds(); deductionAmtMap = paymentService.getDeductionAmt(pensionBillList, FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION); paidAmtMap = paymentService.getEarlierPaymentAmt(pensionBillList, FinancialConstants.STANDARD_EXPENDITURETYPE_PENSION); pensionList = paymentService.getCSList(pensionBillList, deductionAmtMap, paidAmtMap); setMode("search"); paymentMode = FinancialConstants.MODEOFPAYMENT_CASH; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed pensionBills."); return "pensionBills"; } @ValidationErrorPage(value = "tnebSearch") public String tnebBills() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting tnebBills..."); final StringBuffer sql = new StringBuffer(); if (!"".equals(billNumber)) sql.append(" and bill.billnumber = '" + billNumber + "' "); if (voucherHeader.getFundId() != null) sql.append(" and bill.egBillregistermis.fund.id=" + voucherHeader.getFundId().getId()); if (voucherHeader.getVouchermis().getDepartmentid() != null) sql.append(" and bill.egBillregistermis.egDepartment.id=" + voucherHeader.getVouchermis().getDepartmentid().getId()); if (voucherHeader.getVouchermis().getFunction() != null) sql.append(" and bill.egBillregistermis.function=" + voucherHeader.getVouchermis().getFunction().getId()); final String tnebSqlMainquery = "select bill from EgBillregister bill , EBDetails ebd where bill.id = ebd.egBillregister.id and bill.expendituretype=? and bill.egBillregistermis.voucherHeader.status=0 " + " and bill.passedamount > (select SUM(misc.paidamount) from Miscbilldetail misc where misc.billVoucherHeader = bill.egBillregistermis.voucherHeader " + " and misc.payVoucherHeader.status in (0,5))"; final String tnebSqlMainquery1 = "select bill from EgBillregister bill , EBDetails ebd where bill.id = ebd.egBillregister.id and bill.expendituretype=? and bill.egBillregistermis.voucherHeader.status=0 " + " and bill.egBillregistermis.voucherHeader NOT IN (select misc.billVoucherHeader from Miscbilldetail misc where misc.billVoucherHeader is not null and misc.payVoucherHeader.status <> 4)"; if (billSubType != null && !billSubType.equalsIgnoreCase("")) sql.append(" and bill.egBillregistermis.egBillSubType.name='" + billSubType + "'"); if (region != null && !region.equalsIgnoreCase("")) sql.append(" and ebd.region='" + region + "'"); if (month != null && !month.equalsIgnoreCase("")) sql.append(" and ebd.month=" + month + ""); if (year != null && !year.equalsIgnoreCase("")) sql.append(" and ebd.financialyear.id=" + year + ""); final EgwStatus egwStatus = egwStatusHibernateDAO.getStatusByModuleAndCode("EXPENSEBILL", "Approved"); // for financial // expense // bills final EgwStatus egwStatus1 = egwStatusHibernateDAO.getStatusByModuleAndCode("CBILL", "APPROVED"); // for external systems final String tnebBillSql = tnebSqlMainquery + " and bill.status in (?,?) " + sql.toString() + " order by bill.billdate desc"; final String tnebBillSql1 = tnebSqlMainquery1 + " and bill.status in (?,?) " + sql.toString() + " order by bill.billdate desc"; contingentBillList = getPersistenceService().findPageBy(tnebBillSql, 1, 500, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT, egwStatus, egwStatus1).getList(); if (contingentBillList != null) contingentBillList.addAll(getPersistenceService().findPageBy(tnebBillSql1, 1, 500, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT, egwStatus, egwStatus1).getList()); else contingentBillList = getPersistenceService().findPageBy(tnebBillSql1, 1, 500, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT, egwStatus, egwStatus1).getList(); final Set<EgBillregister> tempBillList = new LinkedHashSet<EgBillregister>(contingentBillList); contingentBillList.clear(); contingentBillList.addAll(tempBillList); if (LOGGER.isInfoEnabled()) LOGGER.info("tnebBillSql ===> " + tnebBillSql); paymentService.getGlcodeIds(); deductionAmtMap = paymentService.getDeductionAmt(contingentBillList, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT); paidAmtMap = paymentService.getEarlierPaymentAmt(contingentBillList, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT); contingentList = paymentService.getCSList(contingentBillList, deductionAmtMap, paidAmtMap); setMode("search"); paymentMode = FinancialConstants.MODEOFPAYMENT_RTGS; setTNEBMandatoryFields(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed tnebBills."); return "tnebBills"; } /** * * @return * @throws ValidationException this api is called from searchbills method is changed to save to enable csrf fix actaul method * name was generate payment. I doesnot save data but forwards to screen where for selected bill we can make payment */ @SkipValidation @ValidationErrorPage("searchbills") @Action(value = "/payment/payment-save") public String save() throws ValidationException { final List<PaymentBean> paymentList = new ArrayList<PaymentBean>(); List<AppConfigValues> cutOffDateconfigValue = appConfigValuesService.getConfigValuesByModuleAndKey("EGF", "DataEntryCutOffDate"); if (cutOffDateconfigValue != null && !cutOffDateconfigValue.isEmpty()) { try { date = df.parse(cutOffDateconfigValue.get(0).getValue()); cutOffDate = formatter.format(date); } catch (ParseException e) { } } try { final String paymentMd = parameters.get("paymentMode")[0]; if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting generatePayment..."); if (LOGGER.isInfoEnabled()) LOGGER.info("Expenditure type is--------------------------------- " + expType); if (null != contractorList && !contractorList.isEmpty()) paymentList.addAll(contractorList); if (null != supplierList && !supplierList.isEmpty()) paymentList.addAll(supplierList); if (null != contingentList && !contingentList.isEmpty()) paymentList.addAll(contingentList); if (null != salaryList && !salaryList.isEmpty()) paymentList.addAll(salaryList); if (null != pensionList && !pensionList.isEmpty()) paymentList.addAll(pensionList); if (rtgsDefaultMode != null && rtgsDefaultMode.equalsIgnoreCase("Y") && !paymentMd.equalsIgnoreCase("rtgs")) if (paymentService.CheckForContractorSubledgerCodes(paymentList, rtgsModeRestrictionDateForCJV)) throw new ValidationException( Arrays.asList(new ValidationError( "Payment Mode of any bill having Contractor/Supplier subledger should RTGS For Bill Date Greater than 01-Oct-2013", "Payment Mode of any bill having Contractor/Supplier subledger should RTGS For Bill Date Greater than 01-Oct-2013"))); billList = new ArrayList<PaymentBean>(); contractorIds = contractorIds + populateBillListFor(contractorList, contractorIds); supplierIds = supplierIds + populateBillListFor(supplierList, supplierIds); contingentIds = contingentIds + populateBillListFor(contingentList, contingentIds); salaryIds = salaryIds + populateBillListFor(salaryList, salaryIds); pensionIds = pensionIds + populateBillListFor(pensionList, pensionIds); // functionSel= if (salaryIds != null && salaryIds.length() > 0) disableExpenditureType = true; if (pensionIds != null && pensionIds.length() > 0) { disableExpenditureType = true; enablePensionType = true; } billregister = (EgBillregister) persistenceService.find(" from EgBillregister where id=?", billList.get(0).getBillId()); if (billregister.getEgBillregistermis().getFunction() != null) setFunctionSel(billregister.getEgBillregistermis().getFunction().getId()); loadbankBranch(billregister.getEgBillregistermis().getFund()); miscount = billList.size(); if (parameters.get("paymentMode")[0].equalsIgnoreCase("RTGS")) { paymentService.validateForRTGSPayment(contractorList, "Contractor"); paymentService.validateForRTGSPayment(supplierList, "Supplier"); if (billSubType == null || billSubType.equalsIgnoreCase("")) paymentService.validateForRTGSPayment(contingentList, FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT); } if (!"Auto".equalsIgnoreCase(voucherTypeForULB.readVoucherTypes("Payment"))) { headerFields.add("vouchernumber"); mandatoryFields.add("vouchernumber"); } if (LOGGER.isInfoEnabled()) LOGGER.info("Expenditure type is--------------------------------- " + expType); voucherdate = formatter.format(new Date()); } catch (final ValidationException e) { try { search(); } catch (Exception e1) { LOGGER.error(e.getMessage(), e1); final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e1.getMessage())); throw new ValidationException(errors); } LOGGER.error(e.getErrors(), e); throw new ValidationException(e.getErrors()); } catch (final ApplicationException e) { try { search(); } catch (Exception e1) { LOGGER.error(e.getMessage(), e1); final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e1.getMessage())); throw new ValidationException(errors); } LOGGER.error(e.getMessage(), e); final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e.getMessage())); throw new ValidationException(errors); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed generatePayment."); return "form"; } private String populateBillListFor(final List<PaymentBean> list, String ids) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting populateBillListFor..."); String tempAttributes = ""; if (list != null) { for (final PaymentBean bean : list) { if (bean == null) continue; // if (bean.getIsSelected()) { if (chk.equals("")) { chk = "checked"; fundNameStr = bean.getFundName() == null ? "" : bean.getFundName(); functionNameStr = bean.getFunctionName() == null ? "" : bean.getFunctionName(); deptNameStr = bean.getDeptName() == null ? "" : bean.getDeptName(); fundSourceNameStr = bean.getFundsourceName() == null ? "" : bean.getFundsourceName(); schemeStr = bean.getSchemeName() == null ? "" : bean.getSchemeName(); subSchemeStr = bean.getSubschemeName() == null ? "" : bean.getSubschemeName(); region = bean.getRegion() == null ? "" : bean.getRegion(); /* * attributes = fundNameStr + "-" + functionNameStr + "-" + deptNameStr + "-" + fundSourceNameStr + "-" + * schemeStr + "-" + subSchemeStr; */ attributes = fundNameStr + "-" + fundSourceNameStr + "-" + schemeStr + "-" + subSchemeStr; } /* * tempAttributes = (bean.getFundName() == null ? "" : bean.getFundName()) + "-" + (bean.getFunctionName() == null * ? "" : bean.getFunctionName()) + "-" + (bean.getDeptName() == null ? "" : bean.getDeptName()) + "-" + * (bean.getFundsourceName() == null ? "" : bean.getFundsourceName()) + "-" + (bean.getSchemeName() == null ? "" : * bean.getSchemeName()) + "-" + (bean.getSubschemeName() == null ? "" : bean.getSubschemeName()); */ tempAttributes = (bean.getFundName() == null ? "" : bean.getFundName()) + "-" + (bean.getFundsourceName() == null ? "" : bean.getFundsourceName()) + "-" + (bean.getSchemeName() == null ? "" : bean.getSchemeName()) + "-" + (bean.getSubschemeName() == null ? "" : bean.getSubschemeName()); if (attributes.equalsIgnoreCase(tempAttributes)) { billList.add(bean); ids = ids + bean.getBillId() + ","; } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("Validation Error mismatch in attributes "); throw new ValidationException(Arrays.asList(new ValidationError("Mismatch in attributes", "Mismatch in attributes!!"))); } } // else // continue; if (ids.length() > 0) ids = ids.substring(0, ids.length() - 1); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed populateBillListFor."); return ids; } @ValidationErrorPage(value = "form") @SkipValidation @Action(value = "/payment/payment-create") public String create() { try { String vdate = parameters.get("voucherdate")[0]; Date date1 = sdf1.parse(vdate); String voucherDate = formatter1.format(date1); String cutOffDate1 = null; // billregister.getEgBillregistermis().setFunction(functionSel); paymentActionHelper.setbillRegisterFunction(billregister, cFunctionobj); if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting createPayment..."); populateWorkflowBean(); if (parameters.get("department") != null) billregister.getEgBillregistermis().setEgDepartment( departmentService.getDepartmentById(Long.valueOf(parameters.get("department")[0].toString()))); if (parameters.get("function") != null) billregister.getEgBillregistermis().setFunction( functionService.findOne(Long.valueOf(parameters.get("function")[0].toString()))); paymentheader = paymentService.createPayment(parameters, billList, billregister, workflowBean); miscBillList = paymentActionHelper.getPaymentBills(paymentheader); // sendForApproval();// this should not be called here as it is public method which is called from jsp submit if (!cutOffDate.isEmpty() && cutOffDate != null) { try { date = sdf1.parse(cutOffDate); cutOffDate1 = formatter1.format(date); } catch (ParseException e) { // } } if (cutOffDate1 != null && voucherDate.compareTo(cutOffDate1) <= 0 && FinancialConstants.CREATEANDAPPROVE.equalsIgnoreCase(workflowBean.getWorkFlowAction())) { addActionMessage(getMessage("payment.transaction.success", new String[] { paymentheader.getVoucherheader() .getVoucherNumber() })); } else { addActionMessage(getMessage("payment.transaction.success", new String[] { paymentheader.getVoucherheader() .getVoucherNumber() })); if (FinancialConstants.BUTTONFORWARD.equalsIgnoreCase(workflowBean.getWorkFlowAction())) addActionMessage(getMessage("payment.voucher.approved", new String[] { paymentService.getEmployeeNameForPositionId(paymentheader.getState() .getOwnerPosition()) })); } } catch (final ValidationException e) { final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e.getErrors().get(0).getMessage())); loadbankBranch(billregister.getEgBillregistermis().getFund()); throw new ValidationException(errors); } catch (final ApplicationRuntimeException e) { LOGGER.error(e.getMessage()); loadbankBranch(billregister.getEgBillregistermis().getFund()); final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e.getMessage())); throw new ValidationException(errors); } catch (final Exception e) { final List<ValidationError> errors = new ArrayList<ValidationError>(); loadbankBranch(billregister.getEgBillregistermis().getFund()); errors.add(new ValidationError("exception", e.getMessage())); throw new ValidationException(errors); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed createPayment."); setMode("view"); return VIEW; } @ValidationErrorPage(value = VIEW) @SkipValidation @Action(value = "/payment/payment-sendForApproval") public String sendForApproval() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting sendForApproval..."); if (paymentheader.getId() == null) paymentheader = getPayment(); // this is to check if is not the create mode populateWorkflowBean(); paymentheader = paymentActionHelper.sendForApproval(paymentheader, workflowBean); paymentActionHelper.getPaymentBills(paymentheader); if (FinancialConstants.BUTTONREJECT.equalsIgnoreCase(workflowBean.getWorkFlowAction())) addActionMessage(getText("payment.voucher.rejected", new String[] { paymentService.getEmployeeNameForPositionId(paymentheader.getState().getOwnerPosition()) })); if (FinancialConstants.BUTTONFORWARD.equalsIgnoreCase(workflowBean.getWorkFlowAction())) addActionMessage(getMessage("payment.voucher.approved", new String[] { paymentService.getEmployeeNameForPositionId(paymentheader.getState().getOwnerPosition()) })); if (FinancialConstants.BUTTONCANCEL.equalsIgnoreCase(workflowBean.getWorkFlowAction())) addActionMessage(getText("payment.voucher.cancelled")); else if (FinancialConstants.BUTTONAPPROVE.equalsIgnoreCase(workflowBean.getWorkFlowAction())) { if ("Closed".equals(paymentheader.getState().getValue())) addActionMessage(getMessage("payment.voucher.final.approval")); else addActionMessage(getMessage("payment.voucher.approved", new String[] { paymentService.getEmployeeNameForPositionId(paymentheader.getState().getOwnerPosition()) })); } if (Constants.ADVANCE_PAYMENT.equalsIgnoreCase(paymentheader.getVoucherheader().getName())) { advanceRequisitionList.addAll(paymentActionHelper.getAdvanceRequisitionDetails(paymentheader)); return "advancePaymentView"; } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed sendForApproval."); setMode("view"); return VIEW; } public String getComments() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Inside getComments..."); return getText("payment.comments", new String[] { paymentheader.getPaymentAmount() .setScale(2, BigDecimal.ROUND_HALF_EVEN).toPlainString() }); } @SkipValidation @Action(value = "/payment/payment-view") public String view() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting view..."); paymentheader = getPayment(); /* * if (paymentheader.getState().getValue() != null && !paymentheader.getState().getValue().isEmpty() && * paymentheader.getState().getValue().contains("Rejected")) { if (LOGGER.isDebugEnabled()) * LOGGER.debug("Completed view."); return modify(); } */ miscBillList = paymentActionHelper.getPaymentBills(paymentheader); getChequeInfo(paymentheader); if (null != parameters.get("showMode") && parameters.get("showMode")[0].equalsIgnoreCase("view")) // if user is drilling down form source , parameter showMode is passed with value view, in this case we do not show // the mode = parameters.get("showMode")[0]; if (LOGGER.isInfoEnabled()) LOGGER.info("defaultDept in vew : " + getDefaultDept()); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed view."); return VIEW; } @SkipValidation public String advanceView() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting advanceView..."); paymentheader = getPayment(); if (paymentheader.getState().getValue() != null && !paymentheader.getState().getValue().isEmpty() && paymentheader.getState().getValue().contains("Rejected")) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed advanceView."); return modifyAdvancePayment(); } advanceRequisitionList.addAll(paymentActionHelper.getAdvanceRequisitionDetails(paymentheader)); getChequeInfo(paymentheader); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed advanceView."); return "advancePaymentView"; } public void getChequeInfo(Paymentheader paymentheader) { // if(LOGGER.isInfoEnabled()) LOGGER.info("Inside getChequeInfo"); paymentheader = getPayment(); instrumentHeaderList = getPersistenceService() .findAllBy( " from InstrumentHeader ih where ih.id in (select iv.instrumentHeaderId.id from InstrumentVoucher iv where iv.voucherHeaderId.id=?) order by instrumentNumber", paymentheader.getVoucherheader().getId()); if (LOGGER.isDebugEnabled()) LOGGER.debug("Retrived cheque info details for the paymentheader"); } @SkipValidation public boolean validateUser(final String purpose) throws ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("------------------Starting validateUser..."); if (LOGGER.isInfoEnabled()) LOGGER.info("-------------------------------------------------------------------------------------------------"); if (LOGGER.isInfoEnabled()) LOGGER.info("Calling Validate User " + purpose); if (LOGGER.isInfoEnabled()) LOGGER.info("-------------------------------------------------------------------------------------------------"); final Script validScript = (Script) getPersistenceService().findAllByNamedQuery(Script.BY_NAME, "Paymentheader.show.bankbalance").get(0); final List<String> list = (List<String>) scriptService.executeScript(validScript, ScriptService.createContext("persistenceService", paymentService, "purpose", purpose)); if (list.get(0).equals("true")) { if (purpose.equals("balancecheck")) { paymentheader = getPayment(); try { getBankBalance(paymentheader.getBankaccount().getId().toString(), formatter.format(new Date()), paymentheader.getPaymentAmount(), paymentheader.getId(), paymentheader.getBankaccount() .getChartofaccounts().getId()); } catch (final ValidationException e) { LOGGER.error("Error" + e.getMessage(), e); balance = BigDecimal.valueOf(-1); } } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed validateUser."); return true; } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed validateUser."); return false; } } @SkipValidation public String ajaxLoadBankAccounts() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting ajaxLoadBankAccounts..."); if (LOGGER.isInfoEnabled()) LOGGER.info("Bankbranch id = " + parameters.get("bankbranch")[0]); final Bankbranch bankbranch = (Bankbranch) persistenceService.find("from Bankbranch where id = ?", Integer.parseInt(parameters.get("bankbranch")[0])); bankaccountList = getPersistenceService() .findAllBy(" FROM Bankaccount where bankbranch=? and isactive=true ", bankbranch); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed ajaxLoadBankAccounts."); return "bankaccount"; } @SkipValidation @Action(value = "/payment/payment-ajaxGetAccountBalance") public String ajaxGetAccountBalance() throws ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Inside ajaxGetAccountBalance."); getBankBalance(parameters.get("bankaccount")[0], parameters.get("voucherDate")[0], null, null, null); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed ajaxGetAccountBalance."); return "balance"; } @SkipValidation public void getBankBalance(final String accountId, final String vdate, final BigDecimal amount, final Long paymentId, final Long bankGlcodeId) throws ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Inside getBankBalance."); try { balance = paymentService.getAccountBalance(accountId, vdate, amount, paymentId, bankGlcodeId); } catch (final Exception e) { balance = BigDecimal.valueOf(-1); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getBankBalance."); } @SkipValidation @Action(value = "/payment/payment-beforeModify") public String beforeModify() throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting beforeModify."); // if(validateUser("deptcheck")) voucherHeader.getVouchermis().setDepartmentid(paymentService.getAssignment().getDepartment()); action = "search"; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed beforeModify."); return LIST; } @ValidationErrorPage(value = LIST) public String list() throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting list..."); final List<String> descriptionList = new ArrayList<String>(); descriptionList.add("New"); descriptionList.add("Deposited"); descriptionList.add("Reconciled"); final List<EgwStatus> egwStatusList = egwStatusHibernateDAO.getStatusListByModuleAndCodeList("Instrument", descriptionList); String statusId = ""; for (final EgwStatus egwStatus : egwStatusList) statusId = statusId + egwStatus.getId() + ","; statusId = statusId.substring(0, statusId.length() - 1); final StringBuffer sql = new StringBuffer(); if (!StringUtils.isBlank(fromDate)) sql.append(" and ph.voucherheader.voucherDate>='" + sdf.format(formatter.parse(fromDate)) + "' "); if (!StringUtils.isBlank(toDate)) sql.append(" and ph.voucherheader.voucherDate<='" + sdf.format(formatter.parse(toDate)) + "'"); if (!StringUtils.isBlank(voucherHeader.getVoucherNumber())) sql.append(" and ph.voucherheader.voucherNumber like '%" + voucherHeader.getVoucherNumber() + "%'"); if (voucherHeader.getFundId() != null) sql.append(" and ph.voucherheader.fundId.id=" + voucherHeader.getFundId().getId()); if (voucherHeader.getVouchermis().getDepartmentid() != null) sql.append(" and ph.voucherheader.vouchermis.departmentid.id=" + voucherHeader.getVouchermis().getDepartmentid().getId()); if (voucherHeader.getVouchermis().getSchemeid() != null) sql.append(" and ph.voucherheader.vouchermis.schemeid.id=" + voucherHeader.getVouchermis().getSchemeid().getId()); if (voucherHeader.getVouchermis().getSubschemeid() != null) sql.append(" and ph.voucherheader.vouchermis.subschemeid.id=" + voucherHeader.getVouchermis().getSubschemeid().getId()); if (voucherHeader.getVouchermis().getFunctionary() != null) sql.append(" and ph.voucherheader.vouchermis.functionary.id=" + voucherHeader.getVouchermis().getFunctionary().getId()); if (voucherHeader.getVouchermis().getDivisionid() != null) sql.append(" and ph.voucherheader.vouchermis.divisionid.id=" + voucherHeader.getVouchermis().getDivisionid().getId()); paymentheaderList = getPersistenceService() .findAllBy( " from Paymentheader ph where ph.voucherheader.status=0 and (ph.voucherheader.isConfirmed=null or ph.voucherheader.isConfirmed=0) " + sql.toString() + " and ph.voucherheader.id not in (select iv.voucherHeaderId.id from InstrumentVoucher iv where iv.instrumentHeaderId in (from InstrumentHeader ih where ih.statusId.id in (" + statusId + ") ))"); action = LIST; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed list..."); return LIST; } @ValidationErrorPage(value = LIST) @SkipValidation @Action(value = "/payment/payment-modify") public String modify() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting modify..."); paymentheader = getPayment(); final String vNumGenMode = voucherTypeForULB.readVoucherTypes("Payment"); if (!"Auto".equalsIgnoreCase(vNumGenMode)) { voucherNumberPrefix = paymentheader.getVoucherheader().getVoucherNumber() .substring(0, Integer.valueOf(FinancialConstants.VOUCHERNO_TYPE_LENGTH)); voucherNumberSuffix = paymentheader .getVoucherheader() .getVoucherNumber() .substring( Integer.valueOf(FinancialConstants.VOUCHERNO_TYPE_LENGTH, paymentheader.getVoucherheader() .getVoucherNumber().length())); } addDropdownData( "bankaccountList", persistenceService.findAllBy(" from Bankaccount where bankbranch.id=? and isactive=true ", paymentheader .getBankaccount().getBankbranch().getId())); // addDropdownData("bankbranchList", // persistenceService.findAllBy("from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? ) and br.isactive=true order by br.bank.name asc",paymentheader.getVoucherheader().getFundId())); loadbankBranch(paymentheader.getVoucherheader().getFundId()); billList = paymentService.getMiscBillList(paymentheader); if (FinancialConstants.PAYMENTVOUCHER_NAME_SALARY.equalsIgnoreCase(paymentheader.getVoucherheader().getName())) disableExpenditureType = true; // commented by msahoo to avoid account balance check for the bill creator. /* * try { balance = paymentService.getAccountBalance(paymentheader.getBankaccount().getId().toString(), * formatter.format(new Date()),paymentheader.getPaymentAmount(),paymentheader.getId()); } catch (ParseException e) { * throw new ValidationException(Arrays.asList(new * ValidationError("Error While formatting date","Error While formatting date"))); } */ if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed modify."); return MODIFY; } @ValidationErrorPage(value = LIST) @SkipValidation public String modifyAdvancePayment() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting modifyAdvancePayment..."); paymentheader = (Paymentheader) persistenceService.find(" from Paymentheader where id=? ", paymentheader.getId()); addDropdownData("bankaccountList", persistenceService.findAllBy( " from Bankaccount where bankbranch.id=? and isactive=true and fund.id=?", paymentheader.getBankaccount() .getBankbranch().getId(), paymentheader.getBankaccount().getFund().getId())); loadbankBranch(paymentheader.getVoucherheader().getFundId()); advanceRequisitionList.addAll(paymentActionHelper.getAdvanceRequisitionDetails(paymentheader)); final String vNumGenMode = voucherTypeForULB.readVoucherTypes("Payment"); if (!"Auto".equalsIgnoreCase(vNumGenMode)) { voucherNumberPrefix = paymentheader.getVoucherheader().getVoucherNumber() .substring(0, Integer.valueOf(FinancialConstants.VOUCHERNO_TYPE_LENGTH)); voucherNumberSuffix = paymentheader .getVoucherheader() .getVoucherNumber() .substring( Integer.valueOf(FinancialConstants.VOUCHERNO_TYPE_LENGTH, paymentheader.getVoucherheader() .getVoucherNumber().length())); } try { balance = paymentService.getAccountBalance(paymentheader.getBankaccount().getId().toString(), formatter.format(new Date()), paymentheader.getPaymentAmount(), paymentheader.getId(), paymentheader .getBankaccount().getChartofaccounts().getId()); } catch (final ParseException e) { LOGGER.error("Error" + e.getMessage(), e); throw new ValidationException(Arrays.asList(new ValidationError("Error While formatting date", "Error While formatting date"))); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed modifyAdvancePayment..."); return "advancePaymentModify"; } @ValidationErrorPage(value = MODIFY) @SkipValidation @Action(value = "/payment/payment-cancel") public String cancelPayment() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting cancelPayment..."); paymentheader = (Paymentheader) persistenceService.find(" from Paymentheader where id=? ", paymentheader.getId()); voucherHeader = paymentheader.getVoucherheader(); voucherHeader.setStatus(FinancialConstants.CANCELLEDVOUCHERSTATUS); // persistenceService.setType(CVoucherHeader.class); paymentheader.transition(true).end(); persistenceService.persist(voucherHeader); addActionMessage(getMessage("payment.cancel.success")); action = parameters.get(ACTIONNAME)[0]; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed cancelPayment..."); return VIEW; } @ValidationErrorPage(value = MODIFY) @SkipValidation @Action(value = "/payment/payment-edit") public String edit() throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting update..."); try { validateForUpdate(); if (getFieldErrors().isEmpty()) { paymentheader = paymentService.updatePayment(parameters, billList, paymentheader); miscBillList = paymentActionHelper.getPaymentBills(paymentheader); sendForApproval(); addActionMessage(getMessage("payment.transaction.success", new String[] { paymentheader.getVoucherheader() .getVoucherNumber() })); } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed update..."); return MODIFY; } } catch (final ValidationException e) { LOGGER.error("Error" + e.getMessage(), e); addDropdownData( "bankbranchList", persistenceService .findAllBy( "from Bankbranch br where br.id in (select bankbranch.id from Bankaccount where fund=? ) and br.isactive=true order by br.bank.name asc", paymentheader.getVoucherheader().getFundId())); throw new ValidationException(e.getErrors()); } catch (final ApplicationRuntimeException e) { LOGGER.error(e.getMessage(), e); final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e.getMessage())); throw new ValidationException(errors); } catch (final Exception e) { LOGGER.error(e.getMessage(), e); final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e.getMessage())); throw new ValidationException(errors); } // action=MODIFY; if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed update..."); return VIEW; } @ValidationErrorPage(value = "advancePaymentModify") @SkipValidation public String updateAdvancePayment() throws Exception { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting updateAdvancePayment..."); paymentheader = (Paymentheader) persistenceService.find("from Paymentheader where id=?", paymentheader.getId()); advanceRequisitionList.addAll(paymentActionHelper.getAdvanceRequisitionDetails(paymentheader)); try { validateAdvancePayment(); paymentheader.setBankaccount((Bankaccount) persistenceService.find("from Bankaccount where id=?", Integer.valueOf(parameters.get("paymentheader.bankaccount.id")[0]))); addDropdownData("bankaccountList", persistenceService.findAllBy( " from Bankaccount where bankbranch.id=? and isactive=true and fund.id=?", paymentheader.getBankaccount() .getBankbranch().getId(), paymentheader.getBankaccount().getFund().getId())); loadbankBranch(paymentheader.getBankaccount().getFund()); if (getFieldErrors().isEmpty()) { Integer userId = null; if (null != parameters.get("approverUserId") && Integer.valueOf(parameters.get("approverUserId")[0]) != -1) userId = Integer.valueOf(parameters.get("approverUserId")[0]); else userId = ApplicationThreadLocals.getUserId().intValue(); /* * paymentWorkflowService.transition(getValidActions().get(0).getName() + "|" + userId, paymentheader, * paymentheader.getVoucherheader().getDescription()); */ addActionMessage(getMessage("payment.voucher.approved", new String[] { paymentService.getEmployeeNameForPositionId(paymentheader.getState().getOwnerPosition()) })); } else { if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed updateAdvancePayment."); return "advancePaymentModify"; } } catch (final ValidationException e) { LOGGER.error("Error" + e.getMessage(), e); addDropdownData("bankaccountList", persistenceService.findAllBy( " from Bankaccount where bankbranch.id=? and isactive=true and fund.id=?", paymentheader.getBankaccount() .getBankbranch().getId(), paymentheader.getBankaccount().getFund().getId())); loadbankBranch(paymentheader.getBankaccount().getFund()); throw new ValidationException(e.getErrors()); } catch (final Exception e) { addDropdownData("bankaccountList", persistenceService.findAllBy( " from Bankaccount where bankbranch.id=? and isactive=true and fund.id=?", paymentheader.getBankaccount() .getBankbranch().getId(), paymentheader.getBankaccount().getFund().getId())); loadbankBranch(paymentheader.getBankaccount().getFund()); LOGGER.error(e.getMessage(), e); final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("exception", e.getMessage())); throw new ValidationException(errors); } if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed updateAdvancePayment."); return "advancePaymentView"; } private void validateAdvancePayment() throws ValidationException, ApplicationException, ParseException { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting validateAdvancePayment..."); if (paymentheader.getVoucherheader().getVoucherDate() == null || paymentheader.getVoucherheader().getVoucherDate().equals("")) throw new ValidationException(Arrays.asList(new ValidationError("payment.voucherdate.empty", "payment.voucherdate.empty"))); final String vNumGenMode = voucherTypeForULB.readVoucherTypes("Payment"); if (!"Auto".equalsIgnoreCase(vNumGenMode) && (voucherNumberSuffix == null || voucherNumberSuffix.equals(""))) throw new ValidationException(Arrays.asList(new ValidationError("payment.vouchernumber.empty", "payment.vouchernumber.empty"))); if (parameters.get("paymentheader.bankaccount.bankbranch.id")[0].equals("-1")) throw new ValidationException(Arrays.asList(new ValidationError("bankbranch.empty", "bankbranch.empty"))); if (parameters.get("paymentheader.bankaccount.id")[0].equals("-1")) throw new ValidationException(Arrays.asList(new ValidationError("bankaccount.empty", "bankaccount.empty"))); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed validateAdvancePayment..."); } private void validateForUpdate() throws ValidationException, ApplicationException, ParseException { List<PaymentBean> tempBillList = new ArrayList<PaymentBean>(); final List<String> expenseTypeList = new ArrayList<String>(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting validateForUpdate..."); if (paymentheader.getVoucherheader().getVoucherDate() == null || paymentheader.getVoucherheader().getVoucherDate().equals("")) addFieldError("paymentheader.voucherheader.voucherDate", getMessage("payment.voucherdate.empty")); final String vNumGenMode = voucherTypeForULB.readVoucherTypes("Payment"); if (!"Auto".equalsIgnoreCase(vNumGenMode) && (voucherNumberSuffix == null || voucherNumberSuffix.equals(""))) addFieldError("paymentheader.voucherheader.voucherNumber", getMessage("payment.vouchernumber.empty")); if (parameters.get("paymentheader.bankaccount.bankbranch.id")[0].equals("-1")) addFieldError("paymentheader.bankaccount.bankbranch.id", getMessage("bankbranch.empty")); if (parameters.get("paymentheader.bankaccount.id")[0].equals("-1")) addFieldError("paymentheader.bankaccount.id", getMessage("bankaccount.empty")); if (billList == null) addFieldError("paymentheader.bankaccount.id", getMessage("bill.details.empty")); /* * if(!parameters.get("paymentheader.bankaccount.id")[0].equals("-1") && * paymentheader.getVoucherheader().getVoucherDate()!=null) { balance = * paymentService.getAccountBalance(parameters.get("paymentheader.bankaccount.id")[0], * formatter.format(paymentheader.getVoucherheader * ().getVoucherDate()),paymentheader.getPaymentAmount(),paymentheader.getId()); * if(BigDecimal.valueOf(Long.valueOf(parameters.get("grandTotal")[0])).compareTo(balance)==1) * addFieldError("balance",getMessage("insufficient.bank.balance")); } */ int i = 0; boolean selectedContractorPay = false; for (final PaymentBean bean : billList) { tempBillList = new ArrayList<PaymentBean>(); tempBillList.add(bean); if (expenseTypeList.size() != 0 && expenseTypeList.contains(bean.getExpType())) continue; else expenseTypeList.add(bean.getExpType()); if (bean.getIsSelected()) { i++; if (bean.getPaymentAmt().compareTo(BigDecimal.ZERO) <= 0) addFieldError("billList[" + i + "].paymentAmt", getMessage("payment.amount.null")); if (rtgsDefaultMode != null && rtgsDefaultMode.equalsIgnoreCase("Y") && bean.getExpType().equalsIgnoreCase(FinancialConstants.STANDARD_EXPENDITURETYPE_WORKS)) if (bean.getBillDate().compareTo(rtgsModeRestrictionDateForCJV) > 0 && !paymentheader.getType().equalsIgnoreCase(FinancialConstants.MODEOFPAYMENT_RTGS)) { selectedContractorPay = true; break; } } } try { for (int j = 0; j < expenseTypeList.size(); j++) if (paymentheader.getType().equalsIgnoreCase(FinancialConstants.MODEOFPAYMENT_RTGS)) // if(expenseTypeList.get(j).equalsIgnoreCase(FinancialConstants.STANDARD_EXPENDITURETYPE_WORKS)) paymentService.validateRTGSPaymentForModify(tempBillList); /* * if(expenseTypeList.get(j).equalsIgnoreCase(FinancialConstants.STANDARD_EXPENDITURETYPE_PURCHASE)) * paymentService.validateRTGSPaymentForModify(tempBillList); * if(expenseTypeList.get(j).equalsIgnoreCase(FinancialConstants.STANDARD_EXPENDITURETYPE_CONTINGENT)) * paymentService.validateRTGSPaymentForModify(tempBillList); */ } catch (final ValidationException e) { addFieldError(e.getErrors().get(0).getMessage(), getMessage(e.getErrors().get(0).getMessage())); // addFieldError("rtgs.payment.mandatory.details.missing",getMessage("rtgs.payment.mandatory.details.missing")); } if (selectedContractorPay) addFieldError("contractor.bills.only.rtgs.payment", getMessage("contractor.bills.only.rtgs.payment")); // throw new ValidationException(Arrays.asList(new // ValidationError("Mode of payment for contractor bills should only be RTGS For Bill Date Greater than 01-Oct-2013", // "Mode of payment for contractor bills should only be RTGS For Bill Date Greater than 01-Oct-2013"))); if (i == 0) addFieldError("paymentheader.bankaccount.id", getMessage("bill.details.empty")); /* * Commenting since Salary payable is not subledger and Party is DO-bank name can use this in future when salary payable * is subledger financial needs to generate advice if(paymentheader.getType().equalsIgnoreCase("RTGS")) * paymentService.validateRTGSPaymentForModify(billList); */ if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed validateForUpdate."); } @Override public void validate() { checkMandatory("fundId", Constants.FUND, voucherHeader.getFundId(), "voucher.fund.mandatory"); checkMandatory("vouchermis.departmentid", Constants.DEPARTMENT, voucherHeader.getVouchermis().getDepartmentid(), "voucher.department.mandatory"); checkMandatory("vouchermis.function", Constants.FUNCTION, voucherHeader.getVouchermis().getFunction(), "voucher.function.mandatory"); checkMandatory("vouchermis.schemeid", Constants.SCHEME, voucherHeader.getVouchermis().getSchemeid(), "voucher.scheme.mandatory"); checkMandatory("vouchermis.subschemeid", Constants.SUBSCHEME, voucherHeader.getVouchermis().getSubschemeid(), "voucher.subscheme.mandatory"); checkMandatory("vouchermis.functionary", Constants.FUNCTIONARY, voucherHeader.getVouchermis().getFunctionary(), "voucher.functionary.mandatory"); checkMandatory("fundsourceId", Constants.FUNDSOURCE, voucherHeader.getVouchermis().getFundsource(), "voucher.fundsource.mandatory"); checkMandatory("vouchermis.divisionId", Constants.FIELD, voucherHeader.getVouchermis().getDivisionid(), "voucher.field.mandatory"); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed validate."); } private void checkMandatory(final String objectName, final String fieldName, final Object value, final String errorKey) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Inside checkMandatory."); if (mandatoryFields.contains(fieldName) && value == null) addFieldError(objectName, getMessage(errorKey)); } public List<String> getValidActions() { List<String> validActions = Collections.emptyList(); List<AppConfigValues> cutOffDateconfigValue = appConfigValuesService.getConfigValuesByModuleAndKey("EGF", "DataEntryCutOffDate"); if (cutOffDateconfigValue != null && !cutOffDateconfigValue.isEmpty()) { if (null == paymentheader || null == paymentheader.getId() || paymentheader.getCurrentState().getValue().endsWith("NEW")) { validActions = Arrays.asList(FORWARD, FinancialConstants.CREATEANDAPPROVE); } else { if (paymentheader.getCurrentState() != null) { validActions = this.customizedWorkFlowService.getNextValidActions(paymentheader .getStateType(), getWorkFlowDepartment(), getAmountRule(), getAdditionalRule(), paymentheader.getCurrentState().getValue(), getPendingActions(), paymentheader.getCreatedDate()); } } } else { if (null == paymentheader || null == paymentheader.getId() || paymentheader.getCurrentState().getValue().endsWith("NEW")) { validActions = Arrays.asList(FORWARD); } else { if (paymentheader.getCurrentState() != null) { validActions = this.customizedWorkFlowService.getNextValidActions(paymentheader .getStateType(), getWorkFlowDepartment(), getAmountRule(), getAdditionalRule(), paymentheader.getCurrentState().getValue(), getPendingActions(), paymentheader.getCreatedDate()); } } } return validActions; } public String getNextAction() { WorkFlowMatrix wfMatrix = null; if (paymentheader.getId() != null) { if (paymentheader.getCurrentState() != null) { wfMatrix = this.customizedWorkFlowService.getWfMatrix(paymentheader.getStateType(), getWorkFlowDepartment(), getAmountRule(), getAdditionalRule(), paymentheader .getCurrentState().getValue(), getPendingActions(), paymentheader .getCreatedDate()); } else { wfMatrix = this.customizedWorkFlowService.getWfMatrix(paymentheader.getStateType(), getWorkFlowDepartment(), getAmountRule(), getAdditionalRule(), State.DEFAULT_STATE_VALUE_CREATED, getPendingActions(), paymentheader .getCreatedDate()); } } return wfMatrix == null ? "" : wfMatrix.getNextAction(); } /** * * @return */ public Paymentheader getPayment() { if (LOGGER.isDebugEnabled()) LOGGER.debug("Starting getPayment..."); String paymentid = null; paymentid = parameters.get(PAYMENTID)[0]; if (paymentid != null) paymentheader = paymentService.find("from Paymentheader where id=?", Long.valueOf(paymentid)); if (paymentheader == null) paymentheader = new Paymentheader(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Completed getPayment."); return paymentheader; } protected String getMessage(final String key) { return getText(key); } protected String getMessage(final String key, final String[] value) { return getText(key, value); } public String getExpType() { return expType; } public void setExpType(final String expType) { this.expType = expType; } public String getFromDate() { return fromDate; } public void setFromDate(final String fromDate) { this.fromDate = fromDate; } public String getToDate() { return toDate; } public void setToDate(final String toDate) { this.toDate = toDate; } public List<EgBillregister> getContractorBillList() { return contractorBillList; } public void setContractorBillList(final List<EgBillregister> contractorBillList) { this.contractorBillList = contractorBillList; } public List<EgBillregister> getSupplierBillList() { return supplierBillList; } public void setSupplierBillList(final List<EgBillregister> supplierBillList) { this.supplierBillList = supplierBillList; } public String getMode() { return mode; } public void setMode(final String mode) { this.mode = mode; } public Map<String, String> getPayeeMap() { return payeeMap; } public void setPayeeMap(final Map<String, String> payeeMap) { this.payeeMap = payeeMap; } public List<EgBillregister> getTotalBillList() { return totalBillList; } public void setTotalBillList(final List<EgBillregister> totalBillList) { this.totalBillList = totalBillList; } public List<Bankaccount> getBankaccountList() { return bankaccountList; } public void setBankaccountList(final List<Bankaccount> bankaccountList) { this.bankaccountList = bankaccountList; } public Paymentheader getPaymentheader() { return paymentheader; } public void setPaymentheader(final Paymentheader paymentheader) { this.paymentheader = paymentheader; } public void setPaymentService(final PaymentService paymentService) { this.paymentService = paymentService; } public BigDecimal getBalance() { return balance; } public void setBalance(final BigDecimal balance) { this.balance = balance; } public Map<Long, BigDecimal> getDeductionAmtMap() { return deductionAmtMap; } public void setDeductionAmtMap(final Map<Long, BigDecimal> deductionAmtMap) { this.deductionAmtMap = deductionAmtMap; } public Map<Long, BigDecimal> getPaidAmtMap() { return paidAmtMap; } public void setPaidAmtMap(final Map<Long, BigDecimal> paidAmtMap) { this.paidAmtMap = paidAmtMap; } public String getVoucherdate() { return voucherdate; } public void setVoucherdate(final String voucherdate) { this.voucherdate = voucherdate; } public String getPaymentMode() { return paymentMode; } public void setPaymentMode(final String paymentMode) { this.paymentMode = paymentMode; } public List<Miscbilldetail> getMiscBillList() { return miscBillList; } public void setMiscBillList(final List<Miscbilldetail> miscBillList) { this.miscBillList = miscBillList; } public int getMiscount() { return miscount; } public void setMiscount(final int miscount) { this.miscount = miscount; } public Integer getBankaccount() { return bankaccount; } public void setBankaccount(final Integer bankaccount) { this.bankaccount = bankaccount; } public Integer getBankbranch() { return bankbranch; } public void setBankbranch(final Integer bankbranch) { this.bankbranch = bankbranch; } public List<PaymentBean> getBillList() { return billList; } public void setBillList(final List<PaymentBean> billList) { this.billList = billList; } public String getContractorIds() { return contractorIds; } public void setContractorIds(final String contractorIds) { this.contractorIds = contractorIds; } public String getSalaryIds() { return salaryIds; } public void setSalaryIds(final String salaryIds) { this.salaryIds = salaryIds; } public String getSupplierIds() { return supplierIds; } public void setSupplierIds(final String supplierIds) { this.supplierIds = supplierIds; } public String getVouchernumber() { return vouchernumber; } public void setVouchernumber(final String vouchernumber) { this.vouchernumber = vouchernumber; } public EgBillregister getBillregister() { return billregister; } public void setBillregister(final EgBillregister billregister) { this.billregister = billregister; } public boolean isDepartmentDefault() { return isDepartmentDefault; } public void setDepartmentDefault(final boolean isDepartmentDefault) { this.isDepartmentDefault = isDepartmentDefault; } public List<InstrumentHeader> getInstrumentHeaderList() { return instrumentHeaderList; } public void setInstrumentHeaderList(final List<InstrumentHeader> instrumentHeaderList) { this.instrumentHeaderList = instrumentHeaderList; } public List<PaymentBean> getContractorList() { return contractorList; } public void setContractorList(final List<PaymentBean> contractorList) { this.contractorList = contractorList; } public List<PaymentBean> getSupplierList() { return supplierList; } public void setSupplierList(final List<PaymentBean> supplierList) { this.supplierList = supplierList; } public List<Paymentheader> getPaymentheaderList() { return paymentheaderList; } public void setPaymentheaderList(final List<Paymentheader> paymentheaderList) { this.paymentheaderList = paymentheaderList; } public String getVoucherNumberPrefix() { return voucherNumberPrefix; } public void setVoucherNumberPrefix(final String voucherNumberPrefix) { this.voucherNumberPrefix = voucherNumberPrefix; } public String getVoucherNumberSuffix() { return voucherNumberSuffix; } public void setVoucherNumberSuffix(final String voucherNumberSuffix) { this.voucherNumberSuffix = voucherNumberSuffix; } public List<EgBillregister> getContingentBillList() { return contingentBillList; } public void setContingentBillList(final List<EgBillregister> contingentBillList) { this.contingentBillList = contingentBillList; } public List<EgBillregister> getSalaryBillList() { return salaryBillList; } public void setSalaryBillList(final List<EgBillregister> salaryBillList) { this.salaryBillList = salaryBillList; } public List<PaymentBean> getContingentList() { return contingentList; } public void setContingentList(final List<PaymentBean> contingentList) { this.contingentList = contingentList; } public List<PaymentBean> getSalaryList() { return salaryList; } public void setSalaryList(final List<PaymentBean> salaryList) { this.salaryList = salaryList; } public String getContingentIds() { return contingentIds; } public void setContingentIds(final String contingentIds) { this.contingentIds = contingentIds; } public String getWfitemstate() { return wfitemstate; } public void setWfitemstate(final String wfitemstate) { this.wfitemstate = wfitemstate; } public void setVoucherService(final VoucherService voucherService) { this.voucherService = voucherService; } public String getType() { return type; } public void setType(final String type) { this.type = type; } public Integer getDepartmentId() { return departmentId; } public void setDepartmentId(final Integer departmentId) { this.departmentId = departmentId; } public Integer getDefaultDept() { return defaultDept; } public void setDefaultDept(final Integer defaultDept) { this.defaultDept = defaultDept; } public String getBillNumber() { return billNumber; } public void setBillNumber(final String billNumber) { this.billNumber = billNumber; } public String getTypeOfAccount() { return typeOfAccount; } public void setTypeOfAccount(final String typeOfAccount) { this.typeOfAccount = typeOfAccount; } public void setAdvanceRequisition(final List<EgAdvanceRequisition> advanceRequisition) { advanceRequisitionList = advanceRequisition; } public List<EgAdvanceRequisition> getAdvanceRequisitionList() { return advanceRequisitionList; } public void setDisableExpenditureType(final boolean disableExpenditureType) { this.disableExpenditureType = disableExpenditureType; } public boolean isDisableExpenditureType() { return disableExpenditureType; } public void setVoucherHelper(final VoucherHelper voucherHelper) { this.voucherHelper = voucherHelper; } public boolean isChangePartyName() { return changePartyName; } public void setChangePartyName(final boolean changePartyName) { this.changePartyName = changePartyName; } public String getNewPartyname() { return newPartyname; } public void setNewPartyname(final String newPartyname) { this.newPartyname = newPartyname; } public boolean isEnablePensionType() { return enablePensionType; } public void setEnablePensionType(final boolean enablePensionType) { this.enablePensionType = enablePensionType; } public List<EgBillregister> getPensionBillList() { return pensionBillList; } public void setPensionBillList(final List<EgBillregister> pensionBillList) { this.pensionBillList = pensionBillList; } public List<PaymentBean> getPensionList() { return pensionList; } public void setPensionList(final List<PaymentBean> pensionList) { this.pensionList = pensionList; } public String getPensionIds() { return pensionIds; } public void setPensionIds(final String pensionIds) { this.pensionIds = pensionIds; } public Long getFunctionSel() { return functionSel; } public void setFunctionSel(final Long functionSel) { this.functionSel = functionSel; } public String getRtgsDefaultMode() { return rtgsDefaultMode; } public void setRtgsDefaultMode(final String rtgsDefaultMode) { this.rtgsDefaultMode = rtgsDefaultMode; } public Date getRtgsModeRestrictionDateForCJV() { return rtgsModeRestrictionDateForCJV; } public void setRtgsModeRestrictionDateForCJV(final Date rtgsModeRestrictionDateForCJV) { this.rtgsModeRestrictionDateForCJV = rtgsModeRestrictionDateForCJV; } public String getBillSubType() { return billSubType; } public void setBillSubType(final String billSubType) { this.billSubType = billSubType; } public String getRegion() { return region; } public void setRegion(final String region) { this.region = region; } public Map<Integer, String> getMonthMap() { return monthMap; } public void setMonthMap(final Map<Integer, String> monthMap) { this.monthMap = monthMap; } public FinancialYearHibernateDAO getFinancialYearDAO() { return financialYearDAO; } public void setFinancialYearDAO(final FinancialYearHibernateDAO financialYearDAO) { this.financialYearDAO = financialYearDAO; } public String getMonth() { return month; } public void setMonth(final String month) { this.month = month; } public String getYear() { return year; } public void setYear(final String year) { this.year = year; } public String getBank_branch() { return bank_branch; } public void setBank_branch(final String bank_branch) { this.bank_branch = bank_branch; } public String getBank_account() { return bank_account; } public void setBank_account(final String bank_account) { this.bank_account = bank_account; } public ScriptService getScriptService() { return scriptService; } public void setScriptService(final ScriptService scriptService) { this.scriptService = scriptService; } public EgwStatusHibernateDAO getEgwStatusHibernateDAO() { return egwStatusHibernateDAO; } public void setEgwStatusHibernateDAO(final EgwStatusHibernateDAO egwStatusHibernateDAO) { this.egwStatusHibernateDAO = egwStatusHibernateDAO; } public WorkflowBean getWorkflowBean() { return workflowBean; } public void setWorkflowBean(WorkflowBean workflowBean) { this.workflowBean = workflowBean; } public String getCurrentState() { return paymentheader.getState().getValue(); } public String getCutOffDate() { return cutOffDate; } public void setCutOffDate(String cutOffDate) { this.cutOffDate = cutOffDate; } }