/* * 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.services.contractoradvance; import org.apache.log4j.Logger; import org.egov.commons.Accountdetailtype; import org.egov.commons.CChartOfAccounts; import org.egov.commons.CFinancialYear; import org.egov.commons.EgwStatus; import org.egov.commons.Functionary; import org.egov.commons.dao.ChartOfAccountsHibernateDAO; import org.egov.commons.dao.EgwStatusHibernateDAO; import org.egov.commons.dao.FinancialYearHibernateDAO; import org.egov.eis.entity.DrawingOfficer; import org.egov.infra.validation.exception.ValidationError; import org.egov.infra.validation.exception.ValidationException; import org.egov.infra.workflow.service.WorkflowService; import org.egov.infstr.services.PersistenceService; import org.egov.model.advance.EgAdvanceReqPayeeDetails; import org.egov.model.advance.EgAdvanceRequisitionDetails; import org.egov.model.advance.EgAdvanceRequisitionMis; import org.egov.model.masters.AccountCodePurpose; import org.egov.pims.commons.Designation; import org.egov.pims.service.EisUtilService; import org.egov.works.abstractestimate.entity.AbstractEstimate; import org.egov.works.models.contractoradvance.ContractorAdvanceRequisition; import org.egov.works.models.contractoradvance.ContractorAdvanceRequisitionNumberGenerator; import org.egov.works.revisionestimate.entity.RevisionAbstractEstimate; import org.egov.works.services.WorksService; import org.egov.works.utils.WorksConstants; import org.springframework.beans.factory.annotation.Autowired; import java.math.BigDecimal; 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; public class ContractorAdvanceServiceImpl extends PersistenceService<ContractorAdvanceRequisition, Long> implements ContractorAdvanceService { protected PersistenceService persistenceService; private WorksService worksService; private EisUtilService eisService; @Autowired private ChartOfAccountsHibernateDAO chartOfAccountsHibernateDAO; @Autowired private FinancialYearHibernateDAO financialYearHibernateDAO; @Autowired private EgwStatusHibernateDAO egwStatusHibernateDAO; private ContractorAdvanceRequisitionNumberGenerator contractorAdvanceRequisitionNumberGenerator; private static final String CONTRACTOR_ADVANCE_ACCOUNTCODE_PURPOSE = "CONTRACTOR_ADVANCE_ACCOUNTCODE"; private static final String CONTRACTOR_ADVANCE_REQUISITION = "ContractorAdvanceRequisition"; private static final String ACCOUNTDETAIL_TYPE_CONTRACTOR = "contractor"; private final String PENDING_FOR_VERIFICATION = "Pending for Verification"; private final String PENDING_FOR_VALIDATION = "Pending for Validation"; private final String PENDING_FOR_APPROVAL = "Pending for Approval"; private final String PENDING_FOR_RECTIFICATION = "Pending for Rectification"; private final String PENDING_FOR_CHECK = "Pending for Check"; private PersistenceService<RevisionAbstractEstimate, Long> revisionAbstractEstimateService; private WorkflowService<ContractorAdvanceRequisition> workflowService; private static final String ARF_TYPE = "Contractor"; private static final Logger LOGGER = Logger.getLogger(ContractorAdvanceServiceImpl.class); public ContractorAdvanceServiceImpl(){ super(ContractorAdvanceRequisition.class); } public ContractorAdvanceServiceImpl(Class<ContractorAdvanceRequisition> type){ super(type); } @Override public BigDecimal getAdvancePaidByWOEstimateId(final Long workOrderEstimateId) throws ValidationException { BigDecimal advanceAlreadyPaid = BigDecimal.ZERO; try { advanceAlreadyPaid = (BigDecimal) persistenceService .find("select sum(advanceRequisitionAmount) from ContractorAdvanceRequisition where status.code<>'CANCELLED' and workOrderEstimate.id = ?", workOrderEstimateId); } catch (final ValidationException validationException) { throw new ValidationException(validationException.getErrors()); } return advanceAlreadyPaid; } @Override public BigDecimal getAdvancePaidByWOEstIdForView(final Long workOrderEstimateId, final Long contractorAdvanceRequisitionId) throws ValidationException { BigDecimal advanceAlreadyPaid = BigDecimal.ZERO; try { advanceAlreadyPaid = (BigDecimal) persistenceService .find("select sum(advanceRequisitionAmount) from ContractorAdvanceRequisition where status.code<>'CANCELLED' and workOrderEstimate.id = ? and id < ?", workOrderEstimateId, contractorAdvanceRequisitionId); } catch (final ValidationException validationException) { throw new ValidationException(validationException.getErrors()); } return advanceAlreadyPaid; } @Override public ContractorAdvanceRequisition save(ContractorAdvanceRequisition contractorAdvanceRequisition, final String actionName, final Long advanceAccountCode) throws ValidationException { boolean shouldAddAdvanceDetails = false; try { if (contractorAdvanceRequisition.getStatus() == null || ContractorAdvanceRequisition.ContractorAdvanceRequisitionStatus.REJECTED.toString() .equalsIgnoreCase(contractorAdvanceRequisition.getStatus().getCode()) && org.apache.commons.lang.StringUtils.isBlank(contractorAdvanceRequisition.getState() .getNextAction()) || ContractorAdvanceRequisition.ContractorAdvanceRequisitionStatus.NEW.toString().equalsIgnoreCase( contractorAdvanceRequisition.getStatus().getCode())) shouldAddAdvanceDetails = true; if (contractorAdvanceRequisition.getStatus() == null) contractorAdvanceRequisition.setStatus(egwStatusHibernateDAO.getStatusByModuleAndCode( CONTRACTOR_ADVANCE_REQUISITION, "NEW")); setARFNumber(contractorAdvanceRequisition); contractorAdvanceRequisition = setContractorAdvanceRequisitionMis(contractorAdvanceRequisition); if (shouldAddAdvanceDetails) contractorAdvanceRequisition = setContractorAdvanceDetails(contractorAdvanceRequisition, advanceAccountCode); contractorAdvanceRequisition = persist(contractorAdvanceRequisition); contractorAdvanceRequisition = workflowService.transition(actionName, contractorAdvanceRequisition, contractorAdvanceRequisition.getWorkflowapproverComments()); // TODO - Need to know alternative for how to find previous when // workflow ended /** * if(contractorAdvanceRequisition.getCurrentState()!=null && * contractorAdvanceRequisition.getCurrentState().getValue()!=null && * contractorAdvanceRequisition.getCurrentState().getPrevious() != null && (ContractorAdvanceRequisition. * ContractorAdvanceRequisitionStatus .APPROVED.toString().equalsIgnoreCase (contractorAdvanceRequisition * .getCurrentState().getPrevious().getValue()) || ContractorAdvanceRequisition * .ContractorAdvanceRequisitionStatus.CANCELLED .toString().equalsIgnoreCase * (contractorAdvanceRequisition.getCurrentState ().getPrevious().getValue()))) { * contractorAdvanceRequisition.setStatus (commonsService.getStatusByModuleAndCode (CONTRACTOR_ADVANCE_REQUISITION, * contractorAdvanceRequisition.getCurrentState ().getPrevious().getValue())); //Source path for view ARF needs to be * set to view from Advance Payment screen contractorAdvanceRequisition .getEgAdvanceReqMises().setSourcePath( * "/egworks/contractoradvance/contractorAdvanceRequisition!edit.action?sourcepage=search&id=" * +contractorAdvanceRequisition.getId()); } else **/ { contractorAdvanceRequisition.setStatus(egwStatusHibernateDAO.getStatusByModuleAndCode( CONTRACTOR_ADVANCE_REQUISITION, contractorAdvanceRequisition.getCurrentState().getValue())); } contractorAdvanceRequisition = persist(contractorAdvanceRequisition); } catch (final ValidationException validationException) { throw new ValidationException(validationException.getErrors()); } return contractorAdvanceRequisition; } /* * Generate Contractor Advance Requisition number */ public void setARFNumber(final ContractorAdvanceRequisition contractorAdvanceRequisition) { try { final CFinancialYear financialYear = financialYearHibernateDAO.getFinYearByDate(contractorAdvanceRequisition .getAdvanceRequisitionDate()); if (financialYear == null) throw new ValidationException(Arrays.asList(new ValidationError( "advancerequisition.arfdate.financialyear.invalid", "advancerequisition.arfdate.financialyear.invalid"))); if (contractorAdvanceRequisition.getAdvanceRequisitionNumber() == null || contractorAdvanceRequisition.getAdvanceRequisitionNumber() != null && arfNumberChangeRequired(contractorAdvanceRequisition, financialYear)) contractorAdvanceRequisition.setAdvanceRequisitionNumber(contractorAdvanceRequisitionNumberGenerator .getARFNumber(contractorAdvanceRequisition, financialYear, persistenceService)); } catch (final ValidationException exception) { throw exception; } catch (final Exception e) { throw new ValidationException(Arrays.asList(new ValidationError( "advancerequisition.arfdate.financialyear.invalid", "advancerequisition.arfdate.financialyear.invalid"))); } } /** * The method return true if the ARF number has to be re-generated * * @param entity an instance of <code>ContractorAdvanceRequisition</code> containing the Advance Requisition date * @param financialYear an instance of <code>CFinancialYear</code> representing the financial year for the Advance Requisition * date. * @return a boolean value indicating if the Advance Requisition number change is required. */ private boolean arfNumberChangeRequired(final ContractorAdvanceRequisition entity, final CFinancialYear financialYear) { final String[] arfNum = entity.getAdvanceRequisitionNumber().split("/"); if (arfNum[3].equals(financialYear.getFinYearRange())) return false; return true; } private ContractorAdvanceRequisition setContractorAdvanceRequisitionMis( final ContractorAdvanceRequisition contractorAdvanceRequisition) { try { EgAdvanceRequisitionMis advanceRequisitionMis = null; if (contractorAdvanceRequisition.getId() == null) advanceRequisitionMis = new EgAdvanceRequisitionMis(); else advanceRequisitionMis = contractorAdvanceRequisition.getEgAdvanceReqMises(); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getUserDepartment() != null) advanceRequisitionMis.setEgDepartment(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getUserDepartment()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getFinancialDetails().get(0) .getFunction() != null) advanceRequisitionMis.setFunction(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getFinancialDetails().get(0).getFunction()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getWard() != null) advanceRequisitionMis.setFieldId(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getWard()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getFinancialDetails().get(0) .getFunctionary() != null) advanceRequisitionMis.setFunctionaryId(contractorAdvanceRequisition.getWorkOrderEstimate() .getEstimate().getFinancialDetails().get(0).getFunctionary()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getFinancialDetails().get(0) .getFund() != null) advanceRequisitionMis.setFund(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getFinancialDetails().get(0).getFund()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getFinancialDetails().get(0) .getScheme() != null) advanceRequisitionMis.setScheme(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getFinancialDetails().get(0).getScheme()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getFinancialDetails().get(0) .getSubScheme() != null) advanceRequisitionMis.setSubScheme(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getFinancialDetails().get(0).getSubScheme()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate().getFundSource() != null) advanceRequisitionMis.setFundsource(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getFundSource()); advanceRequisitionMis.setReferencenumber(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getEstimateNumber()); if (contractorAdvanceRequisition.getWorkOrderEstimate().getWorkOrder().getContractor().getName() != null) advanceRequisitionMis.setPayto(contractorAdvanceRequisition.getWorkOrderEstimate().getWorkOrder() .getContractor().getName()); advanceRequisitionMis.setLastupdatedtime(new Date()); advanceRequisitionMis.setEgAdvanceRequisition(contractorAdvanceRequisition); contractorAdvanceRequisition.setEgAdvanceReqMises(advanceRequisitionMis); } catch (final Exception e) { throw new ValidationException(Arrays.asList(new ValidationError("error", e.getMessage()))); } return contractorAdvanceRequisition; } private ContractorAdvanceRequisition setContractorAdvanceDetails( final ContractorAdvanceRequisition contractorAdvanceRequisition, final Long advanceAccountCode) { try { EgAdvanceRequisitionDetails egAdvanceRequisitionDetails = new EgAdvanceRequisitionDetails(); for (final EgAdvanceRequisitionDetails advanceRequisitionDetails : contractorAdvanceRequisition .getEgAdvanceReqDetailses()) egAdvanceRequisitionDetails = advanceRequisitionDetails; egAdvanceRequisitionDetails.setChartofaccounts((CChartOfAccounts) persistenceService.find( "from CChartOfAccounts where id=?", advanceAccountCode)); egAdvanceRequisitionDetails.setFunction(contractorAdvanceRequisition.getWorkOrderEstimate().getEstimate() .getFinancialDetails().get(0).getFunction()); egAdvanceRequisitionDetails.setDebitamount(contractorAdvanceRequisition.getAdvanceRequisitionAmount()); egAdvanceRequisitionDetails.setNarration(contractorAdvanceRequisition.getNarration()); egAdvanceRequisitionDetails.setEgAdvanceRequisition(contractorAdvanceRequisition); if (egAdvanceRequisitionDetails.getChartofaccounts() != null && egAdvanceRequisitionDetails.getChartofaccounts().getGlcode() != null) { final List<Accountdetailtype> detailCode = chartOfAccountsHibernateDAO .getAccountdetailtypeListByGLCode(egAdvanceRequisitionDetails.getChartofaccounts().getGlcode()); if (detailCode != null && !detailCode.isEmpty()) { final Accountdetailtype adt = chartOfAccountsHibernateDAO .getAccountDetailTypeIdByName(egAdvanceRequisitionDetails.getChartofaccounts().getGlcode(), ACCOUNTDETAIL_TYPE_CONTRACTOR); if (adt != null) egAdvanceRequisitionDetails.getEgAdvanceReqpayeeDetailses().add( setRequisitionPayeeDetail(contractorAdvanceRequisition, egAdvanceRequisitionDetails, adt)); if (adt == null) { final List<ValidationError> errors = new ArrayList<ValidationError>(); errors.add(new ValidationError("advancerequisition.validate_glcode_for_subledger", "advancerequisition.validate_glcode_for_subledger")); throw new ValidationException(errors); } } } contractorAdvanceRequisition.getEgAdvanceReqDetailses().clear(); contractorAdvanceRequisition.addEgAdvanceReqDetails(egAdvanceRequisitionDetails); } catch (final Exception e) { throw new ValidationException(Arrays.asList(new ValidationError("error", e.getMessage()))); } return contractorAdvanceRequisition; } private EgAdvanceReqPayeeDetails setRequisitionPayeeDetail( final ContractorAdvanceRequisition contractorAdvanceRequisition, final EgAdvanceRequisitionDetails advanceRequisitionDetails, final Accountdetailtype accountdetailtype) { EgAdvanceReqPayeeDetails egAdvanceReqPaydetail = new EgAdvanceReqPayeeDetails(); for (final EgAdvanceReqPayeeDetails advanceReqPaydetail : advanceRequisitionDetails .getEgAdvanceReqpayeeDetailses()) egAdvanceReqPaydetail = advanceReqPaydetail; egAdvanceReqPaydetail.setAccountdetailKeyId(Integer.valueOf(contractorAdvanceRequisition.getWorkOrderEstimate() .getWorkOrder().getContractor().getId().toString())); egAdvanceReqPaydetail.setNarration(advanceRequisitionDetails.getNarration()); egAdvanceReqPaydetail.setAccountDetailType(accountdetailtype); egAdvanceReqPaydetail.setDebitAmount(advanceRequisitionDetails.getDebitamount()); egAdvanceReqPaydetail.setEgAdvanceRequisitionDetails(advanceRequisitionDetails); return egAdvanceReqPaydetail; } @Override public ContractorAdvanceRequisition getContractorAdvanceRequisitionById(final Long Id) throws ValidationException { ContractorAdvanceRequisition contractorAdvanceRequisition = null; try { contractorAdvanceRequisition = findById(Id, false); } catch (final ValidationException validationException) { throw new ValidationException(validationException.getErrors()); } return contractorAdvanceRequisition; } @Override public List<HashMap> getDrawingOfficerListForARF(final String query, final Date advanceRequisitionDate) { final List<HashMap> drawingOfficers = new ArrayList<HashMap>(); try { final List<Designation> designationsList = new LinkedList<Designation>(); final List<Long> designationsIdList = new LinkedList<Long>(); final String drawingOfficerDesignations = worksService .getWorksConfigValue("CONTRACTORADVANCE_DRAWINGOFFICER_DESIGNATIONS"); if (drawingOfficerDesignations != null) { final String[] designationNames = drawingOfficerDesignations.toUpperCase().split(","); final List<String> desgListUpper = new ArrayList<String>(Arrays.asList(designationNames)); designationsList.addAll(persistenceService.findAllByNamedQuery("getDesignationForListOfDesgNames", desgListUpper)); } for (final Designation desigMaster : designationsList) designationsIdList.add(desigMaster.getId()); drawingOfficers.addAll(eisService.getListOfDrawingOfficers(designationsIdList, advanceRequisitionDate, query)); } catch (final Exception e) { LOGGER.error("Error in method getDrawingOfficerListForARF" + e.getMessage()); } return drawingOfficers; } @Override public List<CChartOfAccounts> getContractorAdvanceAccountcodes() throws ValidationException { List<CChartOfAccounts> coaList = Collections.EMPTY_LIST; final AccountCodePurpose accountCodePurpose = (AccountCodePurpose) persistenceService.find( "from AccountCodePurpose where name = ?", CONTRACTOR_ADVANCE_ACCOUNTCODE_PURPOSE); if (accountCodePurpose != null) coaList = chartOfAccountsHibernateDAO .getAccountCodeByPurpose(Integer.valueOf(accountCodePurpose.getId().toString())); return coaList; } @Override public BigDecimal getTotalEstimateValueIncludingRE(final AbstractEstimate abstractEstimate) throws ValidationException { BigDecimal totalEstimateValue = new BigDecimal(abstractEstimate.getTotalAmount().getValue()); try { final List<RevisionAbstractEstimate> revisionEstimateList = revisionAbstractEstimateService .findAllByNamedQuery("REVISION_ESTIMATES_BY_ESTID", abstractEstimate.getId()); for (final RevisionAbstractEstimate revisionAbstractEstimate : revisionEstimateList) totalEstimateValue = totalEstimateValue.add(new BigDecimal(revisionAbstractEstimate.getTotalAmount() .getValue())); } catch (final ValidationException validationException) { throw new ValidationException(validationException.getErrors()); } return totalEstimateValue; } @Override public Integer getFunctionaryForWorkflow(final ContractorAdvanceRequisition contractorAdvanceRequisition) { Integer workflowFunctionaryId = null; if (contractorAdvanceRequisition != null && contractorAdvanceRequisition.getId() != null && contractorAdvanceRequisition.getCurrentState() != null && contractorAdvanceRequisition.getCurrentState().getNextAction() != null && (contractorAdvanceRequisition.getCurrentState().getNextAction() .equalsIgnoreCase(PENDING_FOR_VERIFICATION) || contractorAdvanceRequisition.getCurrentState().getNextAction() .equalsIgnoreCase(PENDING_FOR_VALIDATION) || contractorAdvanceRequisition.getCurrentState().getNextAction() .equalsIgnoreCase(PENDING_FOR_APPROVAL) || contractorAdvanceRequisition.getCurrentState().getNextAction() .equalsIgnoreCase(PENDING_FOR_RECTIFICATION) || contractorAdvanceRequisition .getCurrentState().getNextAction().equalsIgnoreCase(PENDING_FOR_CHECK) && contractorAdvanceRequisition.getCurrentState().getValue().equalsIgnoreCase("REJECTED"))) { final Functionary func = (Functionary) persistenceService.find(" from Functionary where upper(name) = ?", "UAC"); if (func != null) workflowFunctionaryId = func.getId(); } return workflowFunctionaryId; } @Override public void cancelContractorAdvanceRequisition(ContractorAdvanceRequisition contractorAdvanceRequisition, final String actionName) throws ValidationException { if (contractorAdvanceRequisition.getId() != null) { contractorAdvanceRequisition = workflowService.transition(actionName, contractorAdvanceRequisition, contractorAdvanceRequisition.getWorkflowapproverComments()); contractorAdvanceRequisition.setStatus(egwStatusHibernateDAO.getStatusByModuleAndCode( CONTRACTOR_ADVANCE_REQUISITION, WorksConstants.CANCELLED_STATUS)); persist(contractorAdvanceRequisition); } } @Override public List<EgwStatus> getAllContractorAdvanceRequisitionStatus() { return persistenceService.findAllBy( "from EgwStatus s where s.moduletype=? and s.code <>'NEW' order by orderId", ContractorAdvanceRequisition.class.getSimpleName()); } @Override public List<DrawingOfficer> getAllDrawingOfficerFromARF() { final List<DrawingOfficer> drawingOfficerList = persistenceService .findAllByNamedQuery("getAllDrawingOfficerFromARF"); return drawingOfficerList; } @Override public CChartOfAccounts getContractorAdvanceAccountcodeForWOE(final Long workOrderEstimateId) { CChartOfAccounts advanceCOA = null; final List<ContractorAdvanceRequisition> arfList = persistenceService .findAllBy( "select distinct arf from ContractorAdvanceRequisition arf where arf.workOrderEstimate.id = ? and arf.status.code = ? and arf.arftype = ?", workOrderEstimateId, ContractorAdvanceRequisition.ContractorAdvanceRequisitionStatus.APPROVED.toString(), ARF_TYPE); if (arfList != null && !arfList.isEmpty()) for (final EgAdvanceRequisitionDetails advanceRequisitionDetails : arfList.get(0) .getEgAdvanceReqDetailses()) advanceCOA = advanceRequisitionDetails.getChartofaccounts(); return advanceCOA; } @Override public BigDecimal getTotalAdvancePaymentMadeByWOEstimateId(final Long workOrderEstimateId, final Date asOnDate) { BigDecimal advanceAlreadyPaid = BigDecimal.ZERO; advanceAlreadyPaid = (BigDecimal) persistenceService .find("select sum(advanceRequisitionAmount) from ContractorAdvanceRequisition where status.code = ? and workOrderEstimate.id = ? " + " and egAdvanceReqMises.voucherheader.status = 0 and egAdvanceReqMises.voucherheader.voucherDate <= ?", ContractorAdvanceRequisition.ContractorAdvanceRequisitionStatus.APPROVED.toString(), workOrderEstimateId, asOnDate); return advanceAlreadyPaid; } @Override public ContractorAdvanceRequisition getContractorARFInWorkflowByWOEId(final Long workOrderEstimateId) { final ContractorAdvanceRequisition arf = find( "from ContractorAdvanceRequisition arf where arf.workOrderEstimate.id = ? and arf.status.code not in(?,?) and arf.arftype = ?", workOrderEstimateId, ContractorAdvanceRequisition.ContractorAdvanceRequisitionStatus.APPROVED.toString(), ContractorAdvanceRequisition.ContractorAdvanceRequisitionStatus.CANCELLED.toString(), ARF_TYPE); return arf; } public void setPersistenceService(final PersistenceService persistenceService) { this.persistenceService = persistenceService; } public void setWorksService(final WorksService worksService) { this.worksService = worksService; } public void setEisService(final EisUtilService eisService) { this.eisService = eisService; } public void setContractorAdvanceRequisitionNumberGenerator( final ContractorAdvanceRequisitionNumberGenerator contractorAdvanceRequisitionNumberGenerator) { this.contractorAdvanceRequisitionNumberGenerator = contractorAdvanceRequisitionNumberGenerator; } public void setRevisionAbstractEstimateService( final PersistenceService<RevisionAbstractEstimate, Long> revisionAbstractEstimateService) { this.revisionAbstractEstimateService = revisionAbstractEstimateService; } public void setContractorAdvanceWorkflowService(final WorkflowService<ContractorAdvanceRequisition> workflow) { workflowService = workflow; } }