/* * 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.works.web.actions.contractorBill; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import org.egov.commons.Accountdetailtype; import org.egov.commons.CChartOfAccounts; import org.egov.commons.CFinancialYear; import org.egov.commons.EgPartytype; import org.egov.commons.EgwTypeOfWork; import org.egov.commons.dao.ChartOfAccountsHibernateDAO; import org.egov.commons.dao.EgPartytypeHibernateDAO; import org.egov.commons.dao.EgwTypeOfWorkHibernateDAO; import org.egov.commons.dao.FinancialYearHibernateDAO; import org.egov.dao.budget.BudgetDetailsDAO; import org.egov.egf.commons.EgovCommon; import org.egov.infra.admin.master.entity.AppConfigValues; import org.egov.infra.exception.ApplicationException; import org.egov.infra.validation.exception.ValidationError; import org.egov.infra.validation.exception.ValidationException; import org.egov.infra.web.struts.actions.BaseFormAction; import org.egov.model.bills.EgBillregister; import org.egov.model.budget.BudgetGroup; import org.egov.pims.model.PersonalInformation; import org.egov.pims.service.EmployeeServiceOld; import org.egov.services.budget.BudgetService; import org.egov.services.recoveries.RecoveryService; import org.egov.works.abstractestimate.entity.AbstractEstimate; import org.egov.works.abstractestimate.entity.AbstractEstimateAppropriation; import org.egov.works.abstractestimate.entity.FinancialDetail; import org.egov.works.contractorbill.entity.ContractorBillRegister; import org.egov.works.milestone.entity.TrackMilestone; import org.egov.works.models.contractorBill.WorkCompletionDetailInfo; import org.egov.works.models.contractorBill.WorkCompletionInfo; import org.egov.works.models.contractoradvance.ContractorAdvanceRequisition; import org.egov.works.models.measurementbook.MBHeader; import org.egov.works.models.workorder.AssetsForWorkOrder; import org.egov.works.models.workorder.WorkOrder; import org.egov.works.models.workorder.WorkOrderEstimate; import org.egov.works.services.ContractorBillService; import org.egov.works.services.WorksService; import org.egov.works.services.contractoradvance.ContractorAdvanceService; import org.egov.works.services.impl.MeasurementBookServiceImpl; import org.egov.works.utils.WorksConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; 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.LinkedList; import java.util.List; import java.util.Map; public class AjaxContractorBillAction extends BaseFormAction { private static final long serialVersionUID = -3316045051992569984L; private static final Logger logger = Logger.getLogger(AjaxContractorBillAction.class); private static final String ADVANCE_AJUSTMENT = "advanceAdjustment"; private static final String CHECK_LIST = "checklist"; private static final String STANDARD_DEDUCTION_ACCOUNTS = "standardDeductionAccounts"; private static final String TOTAL_WORK_VALUE = "totalWorkValue"; private static final String CUMULATIVE_BILL_VALUE = "cumulativeBillValue"; private static final String LATEST_APPROVED_BILL_DATE = "latestBillDate"; private static final String COMPLETION_DETAILS = "completionDetails"; private static final String APPCONFIG_KEY_NAME = "SKIP_BUDGET_CHECK"; private WorkCompletionInfo workcompletionInfo; private List<WorkCompletionDetailInfo> workCompletionDetailInfo = new LinkedList<WorkCompletionDetailInfo>();; private ContractorBillService contractorBillService; private EgBillregister egBillregister; private WorkOrder workOrder; private Long id; private Long workOrderId; private Date billDate; private String workOrderNumber; private String billType; private String deductionType; private String rowId; private Long workOrderEstimateId; private List<CChartOfAccounts> standardDeductionAccountList = new LinkedList<CChartOfAccounts>(); private boolean noMBsPresent; private String latestBillDateStr; private Long billId; @Autowired private FinancialYearHibernateDAO finHibernateDao; private Date latestMBDate; private Long estId; private Long woId; private String refNo; public void setStandardDeductionAccountList( final List<CChartOfAccounts> standardDeductionAccountList) { this.standardDeductionAccountList = standardDeductionAccountList; } private List<AppConfigValues> finalBillChecklist = new LinkedList<AppConfigValues>(); private List<String> checklistValues = new LinkedList<String>(); private String[] selectedchecklistvalues; private List<MBHeader> approvedMBHeaderList = new LinkedList<MBHeader>(); private BigDecimal totalWorkValueRecorded = BigDecimal.ZERO; private BigDecimal totalTenderedItemsAmt = BigDecimal.ZERO; private BigDecimal totalUtilizedAmount = BigDecimal.ZERO; private BigDecimal budgetSanctionAmount = BigDecimal.ZERO; private WorksService worksService; private MeasurementBookServiceImpl measurementBookService; @Autowired private EgPartytypeHibernateDAO egPartytypeHibernateDAO; @Autowired private EgwTypeOfWorkHibernateDAO egwTypeOfWorkHibernateDAO; private BigDecimal totalPendingBalance = new BigDecimal("0.00"); private BigDecimal totalAdvancePaid = new BigDecimal("0.00"); private String source; @Autowired private ChartOfAccountsHibernateDAO chartOfAccountsHibernateDAO; private List<CChartOfAccounts> coaList = new LinkedList<CChartOfAccounts>(); private List<AssetsForWorkOrder> assetList = new LinkedList<AssetsForWorkOrder>(); private static final String SKIP_BUDGCHECK_APPCONF_KEYNAME = "SKIP_BUDGET_CHECK"; private Long glCode; private BigDecimal budgBalance; private BigDecimal budgAmount; private FinancialDetail financialDetail = new FinancialDetail(); private BigDecimal totalGrantAmount = BigDecimal.ZERO; private BudgetDetailsDAO budgetDetailsDAO; private static final String BUDGET_DETAILS = "budgetDetails"; private BigDecimal actualAmount = BigDecimal.ZERO; private boolean checkBudget; private Long estimateId; private Long glCodeId; private String errorMsg; private EgovCommon egovCommon; private static final String WORKS = "Works"; private static final String TRACK_MLS_CHECK = "trackMlsCheckForBillCreation"; private static final String STATUTORY_DEDUCTION_AMOUNT = "statutoryDeductionAmount"; private static final String PARTY_TYPE_CONTRACTOR = "Contractor"; @Autowired @Qualifier("recoveryPersistenceService") private RecoveryService recoveryService; private String subPartyType; private String typeOfWork; private BigDecimal grossAmount; private BigDecimal statutoryAmount = BigDecimal.ZERO; private String recoveryType; private BigDecimal cumulativeBillValue; private BudgetService budgetService; private Long contractorBillId; private String estimateNumber; private String query = ""; private List<WorkOrder> workOrderList = new LinkedList<WorkOrder>(); private List<ContractorBillRegister> contractorBillList = new LinkedList<ContractorBillRegister>(); private String trackMlsCheck; private List<AbstractEstimate> estimateList = new LinkedList<AbstractEstimate>(); private String yearEndApprCheck; private String estimateNo; private static final String VALID = "valid"; private static final String INVALID = "invalid"; private ContractorAdvanceService contractorAdvanceService; private String advanceRequisitionNo; private String owner = ""; private String arfInWorkFlowCheck; @Autowired private EmployeeServiceOld employeeService; private static final String ARF_IN_WORKFLOW_CHECK = "arfInWorkflowCheck"; private String showValidationMsg = ""; public void setBudgetService(final BudgetService budgetService) { this.budgetService = budgetService; } @Override public Object getModel() { return null; } public String totalWorkValue() { totalWorkValueRecorded = contractorBillService.getApprovedMBAmount(workOrderId, workOrderEstimateId, billDate); // totalUtilizedAmount = contractorBillService.getTotalUtilizedAmount(workOrderId, billDate); approvedMBHeaderList.addAll(measurementBookService.getApprovedMBList(workOrderId, workOrderEstimateId, billDate)); // budgetSanctionAmount = contractorBillService.getBudgetedAmtForYear(workOrderId, billDate); totalTenderedItemsAmt = contractorBillService.getApprovedMBAmountOfTenderedItems(workOrderId, workOrderEstimateId, billDate); isSkipBudgetCheck(workOrderEstimateId); if (approvedMBHeaderList.isEmpty()) noMBsPresent = true; return TOTAL_WORK_VALUE; } public String getLastBillDate() { List<EgBillregister> billList; Date latestBillDt; latestBillDateStr = ""; final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService.find( "from WorkOrderEstimate where id=?", workOrderEstimateId); if (workOrderEstimate != null) { billList = contractorBillService.getListOfNonCancelledBillsforEstimate(workOrderEstimate.getEstimate(), new Date()); if (billList != null && !billList.isEmpty()) { latestBillDt = billList.get(0).getBilldate(); for (final EgBillregister bill : billList) if (latestBillDt.compareTo(bill.getBilldate()) < 0) latestBillDt = bill.getBilldate(); latestBillDateStr = new SimpleDateFormat("dd/MM/yyyy").format(latestBillDt); } } return LATEST_APPROVED_BILL_DATE; } public String totalCumulativeBillValue() { final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService.find( "from WorkOrderEstimate where id=?", workOrderEstimateId); cumulativeBillValue = contractorBillService.getTotalValueWoForUptoBillDate(billDate, workOrderEstimate.getWorkOrder().getId(), workOrderEstimate.getId()); return CUMULATIVE_BILL_VALUE; } public String yearEndApprCheckForBillCreation() { final AbstractEstimate estimate = (AbstractEstimate) persistenceService .find("select woe.estimate from WorkOrderEstimate woe where woe.id = ? ", workOrderEstimateId); yearEndApprCheck = VALID; estimateNo = estimate.getEstimateNumber(); Long billDateFinYearId = 0L; CFinancialYear billDateFinYear; try { billDateFinYear = finHibernateDao.getFinancialYearByDate(billDate); } catch (final Exception e) { throw new ValidationException( Arrays.asList(new ValidationError("yrEnd.appr.verification.for.bill.financialyear.invalid", "yrEnd.appr.verification.for.bill.financialyear.invalid"))); } if (billDateFinYear != null) billDateFinYearId = billDateFinYear.getId(); if (estimate.getDepositCode() == null) { final AbstractEstimateAppropriation aeaObj = (AbstractEstimateAppropriation) persistenceService .findByNamedQuery("getLatestBudgetUsageForEstimate", estimate.getId()); if (aeaObj != null && aeaObj.getBudgetUsage().getConsumedAmount() > 0) { if (aeaObj.getBudgetUsage().getFinancialYearId().intValue() != billDateFinYearId.intValue()) yearEndApprCheck = INVALID; } else yearEndApprCheck = INVALID; } return "yearEndApprForBillCreationCheck"; } public String advanceRequisitionInWorkflowCheck() { arfInWorkFlowCheck = VALID; if (workOrderEstimateId != null) { final ContractorAdvanceRequisition arf = contractorAdvanceService .getContractorARFInWorkflowByWOEId(workOrderEstimateId); if (arf != null) { arfInWorkFlowCheck = INVALID; advanceRequisitionNo = arf.getAdvanceRequisitionNumber(); estimateNo = arf.getWorkOrderEstimate().getEstimate().getEstimateNumber(); final PersonalInformation emp = employeeService.getEmployeeforPosition(arf.getCurrentState().getOwnerPosition()); if (emp != null) owner = emp.getUserMaster().getName(); } } return ARF_IN_WORKFLOW_CHECK; } private void isSkipBudgetCheck(final Long workOrderEstimateId) { final List<AppConfigValues> appConfigValuesList = worksService.getAppConfigValue(WORKS, SKIP_BUDGCHECK_APPCONF_KEYNAME); final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService.find( "from WorkOrderEstimate where id=?", workOrderEstimateId); logger.info("length of appconfig values>>>>>> " + appConfigValuesList.size()); for (final AppConfigValues appValues : appConfigValuesList) if (appValues.getValue().equals(workOrderEstimate.getEstimate().getNatureOfWork().getName())) { checkBudget = false; return; } checkBudget = true; } public String completionInfo() { final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService.find( "from WorkOrderEstimate where id=?", workOrderEstimateId); workcompletionInfo = contractorBillService.setWorkCompletionInfoFromBill(null, workOrderEstimate); workCompletionDetailInfo.addAll(contractorBillService.setWorkCompletionDetailInfoList(workOrderEstimate)); return COMPLETION_DETAILS; } /** * calculate contractor total pending balance * @return String */ public String calculateAdvanceAdjustment() { final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService.find( "from WorkOrderEstimate where id=?", workOrderEstimateId); totalAdvancePaid = contractorAdvanceService.getTotalAdvancePaymentMadeByWOEstimateId(workOrderEstimate.getId(), billDate); totalPendingBalance = contractorBillService.calculateTotalPendingAdvance(totalAdvancePaid, billDate, workOrderEstimate, billId); return ADVANCE_AJUSTMENT; } public String billCheckListDetails() throws NumberFormatException, ApplicationException { final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService.find( "from WorkOrderEstimate where id=?", workOrderEstimateId); checklistValues.add("N/A"); checklistValues.add("Yes"); checklistValues.add("No"); try { if ((workOrderEstimate.getEstimate().getNatureOfWork().getCode().equals("Improvement Works") || workOrderEstimate.getEstimate().getNatureOfWork().getCode().equals("Capital Works")) && billType.contains("Final")) finalBillChecklist = worksService.getAppConfigValue(WORKS, "CONTRACTOR_Bill_FinalChecklist"); else if ((workOrderEstimate.getEstimate().getNatureOfWork().getCode().equals("Improvement Works") || workOrderEstimate.getEstimate().getNatureOfWork().getCode().equals("Capital Works")) && billType.contains("Part")) finalBillChecklist = worksService.getAppConfigValue(WORKS, "CONTRACTOR_Bill_RunChecklist"); else if (workOrderEstimate.getEstimate().getNatureOfWork().getCode().equals("Repairs and maintenance") && (billType.contains("Final") || billType.contains("Part"))) finalBillChecklist = worksService.getAppConfigValue(WORKS, "CONTRACTOR_Bill_MaintananceChecklist"); } catch (final Exception e) { logger.error("--------------Error in check bill List-------------"); } return CHECK_LIST; } public String trackMilestoneCheckForFinalBill() { final List<TrackMilestone> tm = persistenceService.findAllBy( " select trmls from WorkOrderEstimate as woe left join woe.milestone mls left join mls.trackMilestone trmls where trmls.egwStatus.code='APPROVED' and woe.id = ? and trmls.total=100 ", workOrderEstimateId); trackMlsCheck = "invalid"; if (tm != null && !tm.isEmpty() && tm.get(0) != null) trackMlsCheck = "valid"; return TRACK_MLS_CHECK; } public String trackMilestoneCheckForPartBill() { final List<TrackMilestone> tm = persistenceService.findAllBy( " select trmls from WorkOrderEstimate as woe left join woe.milestone mls left join mls.trackMilestone trmls where trmls.egwStatus.code='APPROVED' and woe.id = ? and trmls.total>0 ", workOrderEstimateId); trackMlsCheck = "invalid"; if (tm != null && !tm.isEmpty() && tm.get(0) != null) trackMlsCheck = "valid"; return TRACK_MLS_CHECK; } public String populateAccountHeadsForDeductionType() { getStandardDeductionTypes(); return STANDARD_DEDUCTION_ACCOUNTS; } public void setDespositWorksAccBal() throws Exception { final CChartOfAccounts coaObj = (CChartOfAccounts) persistenceService.find("from CChartOfAccounts where id=?", getGlCodeId()); final AbstractEstimate estimate = (AbstractEstimate) persistenceService.find("from AbstractEstimate where id=?", getEstimateId()); final Accountdetailtype adt = chartOfAccountsHibernateDAO.getAccountDetailTypeIdByName(coaObj.getGlcode(), "DEPOSITCODE"); String fundCode = null; if (estimate != null && estimate.getFinancialDetails().get(0) != null) { financialDetail = estimate.getFinancialDetails().get(0); fundCode = financialDetail.getFund().getCode(); } if (adt == null) throw new ValidationException("", "The AccountDetailType is not defined for Desposit Works "); else if (estimate.getDepositCode() == null) throw new ValidationException("", "The Deposit code is not defined for Estimate "); final BigDecimal accBalAmount = egovCommon.getAccountBalanceTillDate(getBillDate(), coaObj.getGlcode(), fundCode, adt.getId(), estimate.getDepositCode().getId().intValue(), null); final BigDecimal billAccBalAmount = egovCommon.getBillAccountBalanceforDate(getBillDate(), coaObj.getGlcode(), fundCode, adt.getId(), estimate.getDepositCode().getId().intValue()); budgBalance = accBalAmount.add(billAccBalAmount); budgAmount = egovCommon.getDepositAmountForDepositCode(getBillDate(), coaObj.getGlcode(), fundCode, adt.getId(), estimate.getDepositCode().getId().intValue()); } public String populateStandardDeductionType() { final List<CChartOfAccounts> coaStandardDedList = getStandardDeductionTypes(); getServletResponse().setContentType("text/xml"); getServletResponse().setHeader("Cache-Control", "no-cache"); String coaString = null; for (final CChartOfAccounts coa : coaStandardDedList) if (coaString == null) coaString = coa.getId() + "/" + coa.getGlcode() + "-" + coa.getName(); else coaString = coaString + "$" + coa.getId() + "/" + coa.getGlcode() + "-" + coa.getName(); try { getServletResponse().getWriter().write(coaString); } catch (final IOException ioex) { logger.error("Error while writing to response --from getByResponseAware()"); } return null; } /** * Convenience method to get the response * * @return current response */ public HttpServletResponse getServletResponse() { return ServletActionContext.getResponse(); } public List<CChartOfAccounts> getStandardDeductionTypes() { List<CChartOfAccounts> pList = null;// new ArrayList<CChartOfAccounts>(); try { final Map<String, String[]> typeAndCodesMap = contractorBillService.getStandardDeductionsFromConfig(); final String[] codes = typeAndCodesMap.get(deductionType); if (codes != null && codes.length != 0) for (final String code : codes) { pList = chartOfAccountsHibernateDAO.getListOfDetailCode(code); if (pList != null) standardDeductionAccountList.addAll(pList); } } catch (final Exception e) { logger.error("--------------Error in fetching other deduction - AccountHeadsForStandardDeductionType-------------"); } return standardDeductionAccountList; } public String getDebitAccountCodes() { final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService.find( "from WorkOrderEstimate where id=?", workOrderEstimateId); if (workOrderEstimate != null && workOrderEstimate.getId() != null) { isSkipBudgetCheck(workOrderEstimate.getId()); addDropdownData(WorksConstants.ASSET_LIST, workOrderEstimate.getAssetValues()); assetList = workOrderEstimate.getAssetValues(); final String accountCodeFromBudgetHead = worksService.getWorksConfigValue("BILL_DEFAULT_BUDGETHEAD_ACCOUNTCODE"); showValidationMsg = WorksConstants.NO; if (workOrderEstimate.getEstimate().getNatureOfWork().getCode().equals(WorksConstants.CAPITAL_WORKS) || workOrderEstimate.getEstimate().getNatureOfWork().getCode().equals(WorksConstants.IMPROVEMENT_WORKS)) { if (StringUtils.isNotBlank(accountCodeFromBudgetHead) && "no".equals(accountCodeFromBudgetHead) && StringUtils.isNotBlank(worksService.getWorksConfigValue(WorksConstants.KEY_CWIP))) { coaList = chartOfAccountsHibernateDAO.getAccountCodeByPurpose( Integer.valueOf(worksService.getWorksConfigValue(WorksConstants.KEY_CWIP))); addDropdownData(WorksConstants.COA_LIST, coaList); } else if (StringUtils.isNotBlank(accountCodeFromBudgetHead) && "yes".equals(accountCodeFromBudgetHead)) { final List<BudgetGroup> budgetGroupList = new ArrayList<BudgetGroup>(); if (workOrderEstimate.getEstimate().getFinancialDetails().get(0).getBudgetGroup() != null) budgetGroupList.add(workOrderEstimate.getEstimate().getFinancialDetails().get(0).getBudgetGroup()); coaList = budgetService.getAccountCodeForBudgetHead(budgetGroupList); addDropdownData(WorksConstants.COA_LIST, coaList); } else coaList = Collections.EMPTY_LIST; } else if (workOrderEstimate.getEstimate().getNatureOfWork().getCode() .equals(WorksConstants.REPAIR_AND_MAINTENANCE)) { if (StringUtils.isNotBlank(accountCodeFromBudgetHead) && "no".equals(accountCodeFromBudgetHead) && StringUtils.isNotBlank(worksService.getWorksConfigValue(WorksConstants.KEY_REPAIRS))) { coaList = chartOfAccountsHibernateDAO.getAccountCodeByPurpose( Integer.valueOf(worksService.getWorksConfigValue(WorksConstants.KEY_REPAIRS))); addDropdownData(WorksConstants.COA_LIST, coaList); } else if (StringUtils.isNotBlank(accountCodeFromBudgetHead) && "yes".equals(accountCodeFromBudgetHead)) { final List<BudgetGroup> budgetGroupList = new ArrayList<BudgetGroup>(); if (workOrderEstimate.getEstimate().getFinancialDetails().get(0).getBudgetGroup() != null) budgetGroupList.add(workOrderEstimate.getEstimate().getFinancialDetails().get(0).getBudgetGroup()); coaList = budgetService.getAccountCodeForBudgetHead(budgetGroupList); addDropdownData(WorksConstants.COA_LIST, coaList); } else coaList = Collections.EMPTY_LIST; } else if (getAppConfigValuesToSkipBudget().contains(workOrderEstimate.getEstimate().getNatureOfWork().getName())) if (StringUtils.isNotBlank(worksService.getWorksConfigValue(WorksConstants.KEY_DEPOSIT)) && checkBudget) { // Story# 806 - Show all the CWIP codes in the contractor bill screen where we show the deposit COA code // now // coaList = // chartOfAccountsHibernateDAO.getAccountCodeByPurpose(Integer.valueOf(worksService.getWorksConfigValue(WorksConstants.KEY_DEPOSIT))); coaList = chartOfAccountsHibernateDAO.getAccountCodeByPurpose( Integer.valueOf(worksService.getWorksConfigValue(WorksConstants.KEY_CWIP))); addDropdownData(WorksConstants.COA_LIST, coaList); } // In case of deposit works the budget head is loaded based on the mapping table else if (StringUtils.isNotBlank(worksService.getWorksConfigValue(WorksConstants.KEY_DEPOSIT)) && !checkBudget && workOrderEstimate.getEstimate().getFinancialDetails().get(0).getCoa() != null) { // Story# 806 - Show all the CWIP codes in the contractor bill screen where we show the deposit COA code // now // coaList = // Arrays.asList(chartOfAccountsHibernateDAO.getCChartOfAccountsByGlCode(workOrderEstimate.getEstimate().getFinancialDetails().get(0).getCoa().getGlcode())); coaList = contractorBillService.getBudgetHeadForDepositCOA(workOrderEstimate.getEstimate()); if (!coaList.isEmpty()) addDropdownData(WorksConstants.COA_LIST, coaList); else coaList = Collections.EMPTY_LIST; if (coaList.isEmpty()) { showValidationMsg = WorksConstants.YES; return WorksConstants.COA_LIST; } } else coaList = Collections.EMPTY_LIST; } return WorksConstants.COA_LIST; } public String getBudgetDetails() throws Exception { final WorkOrderEstimate workOrderEstimate = (WorkOrderEstimate) persistenceService .find("from WorkOrderEstimate woe where woe.estimate.id=?", getEstimateId()); isSkipBudgetCheck(workOrderEstimate.getId()); // if(checkBudget){ setBudgetAmtAndBalForCapitalWorks(workOrderEstimate); /* * else{ setDespositWorksAccBal(); } */ return BUDGET_DETAILS; } private void setBudgetAmtAndBalForCapitalWorks(final WorkOrderEstimate workOrderEstimate) { final Map<String, Object> queryParamMap = new HashMap<String, Object>(); try { if (workOrderEstimate.getEstimate() != null && workOrderEstimate.getEstimate().getFinancialDetails().get(0) != null) financialDetail = workOrderEstimate.getEstimate().getFinancialDetails().get(0); if (financialDetail != null && financialDetail.getFund() != null && financialDetail.getFund().getId() != null && financialDetail.getFund().getId() != -1) queryParamMap.put("fundid", financialDetail.getFund().getId()); if (financialDetail != null && financialDetail.getScheme() != null && financialDetail.getScheme().getId() != null && financialDetail.getScheme().getId() != -1) queryParamMap.put("schemeid", financialDetail.getScheme().getId()); if (financialDetail != null && financialDetail.getSubScheme() != null && financialDetail.getSubScheme().getId() != null && financialDetail.getSubScheme().getId() != -1) queryParamMap.put("subschemeid", financialDetail.getSubScheme().getId()); if (financialDetail != null && financialDetail.getFunctionary() != null && financialDetail.getFunctionary().getId() != null && financialDetail.getFunctionary().getId() != -1) queryParamMap.put("functionaryid", financialDetail.getFunctionary().getId()); if (financialDetail != null && financialDetail.getAbstractEstimate().getWard() != null) queryParamMap.put("boundaryid", financialDetail.getAbstractEstimate().getWard().getId()); if (financialDetail != null && financialDetail.getFunction() != null && financialDetail.getFunction().getId() != null && financialDetail.getFunction().getId() != -1) queryParamMap.put("functionid", financialDetail.getFunction().getId()); if (financialDetail != null && financialDetail.getAbstractEstimate().getUserDepartment() != null) queryParamMap.put("deptid", financialDetail.getAbstractEstimate().getUserDepartment().getId()); if (getBillDate() != null) { final CFinancialYear finyear = getCurrentFinancialYear(getBillDate()); if (finyear != null && finyear.getId() != null) queryParamMap.put("financialyearid", finyear.getId()); queryParamMap.put("toDate", getBillDate()); queryParamMap.put("asondate", getBillDate()); } if (getGlCodeId() != null) { final CChartOfAccounts coaObj = (CChartOfAccounts) persistenceService.find("from CChartOfAccounts where id=?", getGlCodeId()); queryParamMap.put("glcode", coaObj.getGlcode()); queryParamMap.put("glcodeid", getGlCodeId()); try { final List<BudgetGroup> bgList = budgetDetailsDAO.getBudgetHeadByGlcode(coaObj); if (bgList == null || bgList.isEmpty()) throw new ValidationException("", "The Budget balance is not specified for the account code: " + coaObj.getGlcode()); queryParamMap.put("budgetheadid", bgList); } catch (final ValidationException valEx) { errorMsg = "The Budget balance is not specified for the account code: " + coaObj.getGlcode(); logger.error(errorMsg); } } if (logger.isDebugEnabled()) logger.debug("queryParamMap size >>>>>>>>>> " + queryParamMap.size()); if (!queryParamMap.isEmpty() && getFieldErrors().isEmpty()) try { totalGrantAmount = budgetDetailsDAO.getBudgetedAmtForYear(queryParamMap); totalUtilizedAmount = budgetDetailsDAO.getActualBudgetUtilizedForBudgetaryCheck(queryParamMap); actualAmount = budgetDetailsDAO.getBillAmountForBudgetCheck(queryParamMap); final BigDecimal budgetBalance = totalGrantAmount.subtract(totalUtilizedAmount.add(actualAmount)); budgAmount = totalGrantAmount; budgBalance = budgetBalance; } catch (final ValidationException valEx) { throw valEx; } } catch (final Exception e) { logger.error("--------------Error in fetching -------------" + e.getMessage()); } if (logger.isDebugEnabled()) logger.debug("totalGrantAmount>>>>>>>>> " + totalGrantAmount); if (logger.isDebugEnabled()) logger.debug("totalUtilizedAmount>>>>>>>>> " + totalUtilizedAmount); if (logger.isDebugEnabled()) logger.debug("actual amount>>>>>> " + actualAmount); } public CFinancialYear getCurrentFinancialYear(final Date billDate) { return finHibernateDao.getFinYearByDate(billDate); } public String getStatutoryDeductionAmount() throws Exception { getDeductionAmount(); return STATUTORY_DEDUCTION_AMOUNT; } public void getDeductionAmount() throws Exception { String subPartyTypeCode = null; String typeOfWorkCode = null; try { try { if (!"0".equals(subPartyType)) { EgPartytype egPartyType = new EgPartytype(); egPartyType = egPartytypeHibernateDAO.findById(Integer.valueOf(subPartyType)); subPartyTypeCode = egPartyType.getCode(); } if (!"0".equals(typeOfWork)) { EgwTypeOfWork egwTOW = new EgwTypeOfWork(); egwTOW = egwTypeOfWorkHibernateDAO.getTypeOfWorkById(Long.valueOf(typeOfWork)); typeOfWorkCode = egwTOW.getCode(); } statutoryAmount = recoveryService.getDeductionAmount(recoveryType, PARTY_TYPE_CONTRACTOR, subPartyTypeCode, typeOfWorkCode, grossAmount, billDate); if (logger.isDebugEnabled()) logger.debug("statutoryAmount>>>>>>>>> " + statutoryAmount); } catch (final ValidationException e) { errorMsg = e.getErrors().get(0).getMessage(); logger.error(errorMsg); } } catch (final Exception e) { logger.error("--------------Error in fetching -------------" + e.getMessage()); throw e; } } public String getProjectClosureEstimateForBill() { final WorkOrderEstimate woe = (WorkOrderEstimate) getPersistenceService() .find("select distinct mb.workOrderEstimate from MBHeader mb where mb.egBillregister.id=? and " + " mb.egBillregister.billstatus='APPROVED' and mb.workOrderEstimate.estimate.projectCode.egwStatus.code='CLOSED'", contractorBillId); if (woe != null) estimateNumber = woe.getEstimate().getEstimateNumber(); else estimateNumber = ""; return "projectClosureEstimate"; } public String searchWorkOrderNumber() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = "select distinct mbh.workOrder from MBHeader mbh where mbh.workOrder.parent is null and mbh.egBillregister is not null " + "and mbh.egBillregister.billstatus <> ? and mbh.workOrder.workOrderNumber like '%'||?||'%' "; params.add("NEW"); params.add(query.toUpperCase()); workOrderList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "workOrderNoSearchResults"; } public String searchContractorBillNo() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = " from ContractorBillRegister cbr where cbr.billnumber like '%'||?||'%' and cbr.billstatus <> ? "; params.add(query.toUpperCase()); params.add("NEW"); contractorBillList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "billNumberSearchResults"; } public String searchEstimateNumber() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = "select woe.estimate from WorkOrderEstimate woe where woe.workOrder.parent is null and woe.estimate.estimateNumber like '%'||?||'%' " + " and woe.id in (select distinct mbh.workOrderEstimate.id from MBHeader mbh where mbh.egBillregister.id in (select egbr.id from EgBillregister egbr where egbr.billstatus <> ?) )"; params.add(query.toUpperCase()); params.add("NEW"); estimateList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "estimateNoSearchResults"; } public String getLatestMBDateCreatedAndRefNum() { final Object[] mbDateRefNo = contractorBillService.getLatestMBCreatedDateAndRefNo(woId, estId); refNo = (String) mbDateRefNo[0]; latestMBDate = (Date) mbDateRefNo[1]; return "mblatestDateResult"; } public Date getBillDate() { return billDate; } public void setBillDate(final Date billDate) { this.billDate = billDate; } public Long getId() { return id; } public void setId(final Long id) { this.id = id; } public EgBillregister getEgBillregister() { return egBillregister; } public void setEgBillregister(final EgBillregister egBillregister) { this.egBillregister = egBillregister; } public Long getWorkOrderId() { return workOrderId; } public void setWorkOrderId(final Long workOrderId) { this.workOrderId = workOrderId; } public WorkOrder getWorkOrder() { return workOrder; } public void setWorkOrder(final WorkOrder workOrder) { this.workOrder = workOrder; } public void setContractorBillService(final ContractorBillService contractorBillService) { this.contractorBillService = contractorBillService; } public void setWorksService(final WorksService worksService) { this.worksService = worksService; } public BigDecimal getTotalPendingBalance() { return totalPendingBalance; } public void setDeductionType(final String deductionType) { this.deductionType = deductionType; } public List<CChartOfAccounts> getStandardDeductionAccountList() { return standardDeductionAccountList; } public String getRowId() { return rowId; } public void setRowId(final String rowId) { this.rowId = rowId; } public String getWorkOrderNumber() { return workOrderNumber; } public void setWorkOrderNumber(final String workOrderNumber) { this.workOrderNumber = workOrderNumber; } public String getBillType() { return billType; } public void setBillType(final String billType) { this.billType = billType; } public void setMeasurementBookService( final MeasurementBookServiceImpl measurementBookService) { this.measurementBookService = measurementBookService; } public BigDecimal getTotalUtilizedAmount() { return totalUtilizedAmount; } public void setTotalUtilizedAmount(final BigDecimal totalUtilizedAmount) { this.totalUtilizedAmount = totalUtilizedAmount; } public List<AppConfigValues> getFinalBillChecklist() { return finalBillChecklist; } public void setFinalBillChecklist(final List<AppConfigValues> finalBillChecklist) { this.finalBillChecklist = finalBillChecklist; } public BigDecimal getTotalWorkValueRecorded() { return totalWorkValueRecorded; } public void setTotalWorkValueRecorded(final BigDecimal totalWorkValueRecorded) { this.totalWorkValueRecorded = totalWorkValueRecorded; } public List<MBHeader> getApprovedMBHeaderList() { return approvedMBHeaderList; } public void setApprovedMBHeaderList(final List<MBHeader> approvedMBHeaderList) { this.approvedMBHeaderList = approvedMBHeaderList; } public BigDecimal getBudgetSanctionAmount() { return budgetSanctionAmount; } public void setBudgetSanctionAmount(final BigDecimal budgetSanctionAmount) { this.budgetSanctionAmount = budgetSanctionAmount; } public List<String> getChecklistValues() { return checklistValues; } public void setChecklistValues(final List<String> checklistValues) { this.checklistValues = checklistValues; } public String getSource() { return source; } public void setSource(final String source) { this.source = source; } public String[] getSelectedchecklistvalues() { return selectedchecklistvalues; } public void setSelectedchecklistvalues(final String[] selectedchecklistvalues) { this.selectedchecklistvalues = selectedchecklistvalues; } public Long getEstimateId() { return estimateId; } public void setEstimateId(final Long estimateId) { this.estimateId = estimateId; } public List<AssetsForWorkOrder> getAssetList() { return assetList; } public void setAssetList(final List<AssetsForWorkOrder> assetList) { this.assetList = assetList; } public List<CChartOfAccounts> getCoaList() { return coaList; } public void setCoaList(final List<CChartOfAccounts> coaList) { this.coaList = coaList; } public WorkCompletionInfo getWorkcompletionInfo() { return workcompletionInfo; } public void setWorkcompletionInfo(final WorkCompletionInfo workcompletionInfo) { this.workcompletionInfo = workcompletionInfo; } public List<WorkCompletionDetailInfo> getWorkCompletionDetailInfo() { return workCompletionDetailInfo; } public void setWorkCompletionDetailInfo( final List<WorkCompletionDetailInfo> workCompletionDetailInfo) { this.workCompletionDetailInfo = workCompletionDetailInfo; } public Long getGlCode() { return glCode; } public void setGlCode(final Long glCode) { this.glCode = glCode; } public BigDecimal getBudgBalance() { return budgBalance; } public void setBudgBalance(final BigDecimal budgBalance) { this.budgBalance = budgBalance; } public BigDecimal getBudgAmount() { return budgAmount; } public void setBudgAmount(final BigDecimal budgAmount) { this.budgAmount = budgAmount; } public boolean getCheckBudget() { return checkBudget; } public void setCheckBudget(final boolean checkBudget) { this.checkBudget = checkBudget; } public void setBudgetDetailsDAO(final BudgetDetailsDAO budgetDetailsDAO) { this.budgetDetailsDAO = budgetDetailsDAO; } public Long getWorkOrderEstimateId() { return workOrderEstimateId; } public void setWorkOrderEstimateId(final Long workOrderEstimateId) { this.workOrderEstimateId = workOrderEstimateId; } public Long getGlCodeId() { return glCodeId; } public void setGlCodeId(final Long glCodeId) { this.glCodeId = glCodeId; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(final String errorMsg) { this.errorMsg = errorMsg; } public void setEgovCommon(final EgovCommon egovCommon) { this.egovCommon = egovCommon; } public String getSubPartyType() { return subPartyType; } public void setSubPartyType(final String subPartyType) { this.subPartyType = subPartyType; } public String getTypeOfWork() { return typeOfWork; } public void setTypeOfWork(final String typeOfWork) { this.typeOfWork = typeOfWork; } public BigDecimal getGrossAmount() { return grossAmount; } public void setGrossAmount(final BigDecimal grossAmount) { this.grossAmount = grossAmount; } public void setStatutoryAmount(final BigDecimal statutoryAmount) { this.statutoryAmount = statutoryAmount; } public BigDecimal getStatutoryAmount() { return statutoryAmount; } public String getRecoveryType() { return recoveryType; } public void setRecoveryType(final String recoveryType) { this.recoveryType = recoveryType; } public BigDecimal getCumulativeBillValue() { return cumulativeBillValue; } public void setCumulativeBillValue(final BigDecimal cumulativeBillValue) { this.cumulativeBillValue = cumulativeBillValue; } public List<String> getAppConfigValuesToSkipBudget() { return worksService.getNatureOfWorkAppConfigValues("Works", APPCONFIG_KEY_NAME); } public BigDecimal getTotalTenderedItemsAmt() { return totalTenderedItemsAmt; } public void setTotalTenderedItemsAmt(final BigDecimal totalTenderedItemsAmt) { this.totalTenderedItemsAmt = totalTenderedItemsAmt; } public Long getContractorBillId() { return contractorBillId; } public void setContractorBillId(final Long contractorBillId) { this.contractorBillId = contractorBillId; } public String getEstimateNumber() { return estimateNumber; } public void setEstimateNumber(final String estimateNumber) { this.estimateNumber = estimateNumber; } public String getQuery() { return query; } public void setQuery(final String query) { this.query = query; } public List<WorkOrder> getWorkOrderList() { return workOrderList; } public void setWorkOrderList(final List<WorkOrder> workOrderList) { this.workOrderList = workOrderList; } public List<ContractorBillRegister> getContractorBillList() { return contractorBillList; } public void setContractorBillList( final List<ContractorBillRegister> contractorBillList) { this.contractorBillList = contractorBillList; } public boolean getNoMBsPresent() { return noMBsPresent; } public void setNoMBsPresent(final boolean noMBsPresent) { this.noMBsPresent = noMBsPresent; } public String getLatestBillDateStr() { return latestBillDateStr; } public String getTrackMlsCheck() { return trackMlsCheck; } public List<AbstractEstimate> getEstimateList() { return estimateList; } public void setEstimateList(final List<AbstractEstimate> estimateList) { this.estimateList = estimateList; } public String getYearEndApprCheck() { return yearEndApprCheck; } public void setYearEndApprCheck(final String yearEndApprCheck) { this.yearEndApprCheck = yearEndApprCheck; } public String getEstimateNo() { return estimateNo; } public void setEstimateNo(final String estimateNo) { this.estimateNo = estimateNo; } public void setContractorAdvanceService( final ContractorAdvanceService contractorAdvanceService) { this.contractorAdvanceService = contractorAdvanceService; } public BigDecimal getTotalAdvancePaid() { return totalAdvancePaid; } public void setTotalAdvancePaid(final BigDecimal totalAdvancePaid) { this.totalAdvancePaid = totalAdvancePaid; } public Long getBillId() { return billId; } public void setBillId(final Long billId) { this.billId = billId; } public String getAdvanceRequisitionNo() { return advanceRequisitionNo; } public void setAdvanceRequisitionNo(final String advanceRequisitionNo) { this.advanceRequisitionNo = advanceRequisitionNo; } public String getOwner() { return owner; } public void setOwner(final String owner) { this.owner = owner; } public String getArfInWorkFlowCheck() { return arfInWorkFlowCheck; } public void setArfInWorkFlowCheck(final String arfInWorkFlowCheck) { this.arfInWorkFlowCheck = arfInWorkFlowCheck; } public void setEmployeeService(final EmployeeServiceOld employeeService) { this.employeeService = employeeService; } public String getShowValidationMsg() { return showValidationMsg; } public void setShowValidationMsg(final String showValidationMsg) { this.showValidationMsg = showValidationMsg; } public Date getLatestMBDate() { return latestMBDate; } public void setLatestMBDate(final Date latestMBDate) { this.latestMBDate = latestMBDate; } public Long getEstId() { return estId; } public void setEstId(final Long estId) { this.estId = estId; } public String getRefNo() { return refNo; } public void setRefNo(final String refNo) { this.refNo = refNo; } public Long getWoId() { return woId; } public void setWoId(final Long woId) { this.woId = woId; } }