/* * 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.tender; import org.apache.commons.lang.StringUtils; import org.egov.eis.entity.Assignment; import org.egov.eis.service.AssignmentService; import org.egov.infra.exception.ApplicationRuntimeException; import org.egov.infra.web.struts.actions.BaseFormAction; import org.egov.pims.service.PersonalInformationService; import org.egov.works.abstractestimate.entity.AbstractEstimate; import org.egov.works.abstractestimate.entity.Activity; import org.egov.works.models.estimate.ProjectCode; import org.egov.works.models.masters.MarketRate; import org.egov.works.models.masters.ScheduleOfRate; import org.egov.works.models.tender.EstimateLineItemsForWP; import org.egov.works.models.tender.TenderResponse; import org.egov.works.models.tender.WorksPackage; import org.egov.works.models.workorder.WorkOrder; import org.egov.works.services.AbstractEstimateService; import org.egov.works.services.WorkOrderService; import org.egov.works.services.WorksPackageService; import org.egov.works.services.WorksService; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.Collection; 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 AjaxTenderNegotiationAction extends BaseFormAction { private static final long serialVersionUID = -9058467908860158263L; private static final String MARKETVALUE = "marketValue"; private AbstractEstimateService abstractEstimateService; private WorksService worksService; private Long estimateId; private Long packageId; private Date asOnDate; private double marketRateAmount = 0; private WorksPackageService workspackageService; @Autowired private AssignmentService assignmentService; private TenderResponse tenderResp = new TenderResponse(); // for prepared by private static final String USERS_IN_DEPT = "usersInDept"; private static final String DESIGN_FOR_EMP = "designForEmp"; private Integer executingDepartment; private Long empID; private List usersInExecutingDepartment; private Assignment assignment; private String tenderNo; private Long checkId; private Long id; private static final String TENDERNUMBERUNIQUECHECK = "tenderNumberUniqueCheck"; private PersonalInformationService personalInformationService; private static final String GET_WORKORDERS_TN = "getWorkOrdersForTN"; private List<WorkOrder> workOrderList = new ArrayList<WorkOrder>(); private WorkOrderService workOrderService; private String tenderNegotiationNo; private String query = ""; private List<AbstractEstimate> estimateList = new LinkedList<AbstractEstimate>(); private List<ProjectCode> projectCodeList = new LinkedList<ProjectCode>(); private List<String> negotiationNumberList = new LinkedList<String>(); private List<WorksPackage> wpNumberList = new LinkedList<WorksPackage>(); private List<WorksPackage> tenderFileNumberList = new LinkedList<WorksPackage>(); public String getMarketValue() { if (estimateId != null) getMarketValueForEstimate(estimateId); if (packageId != null) getMarketValueForPackage(packageId); return MARKETVALUE; } public double getMarketValueForEstimate(final Long estimateId) { final AbstractEstimate abstractEstimate = abstractEstimateService.findById(estimateId, false); final Collection<Activity> sorActivities = abstractEstimate.getSORActivities(); final Map<String, Integer> exceptionaSorMap = worksService.getExceptionSOR(); for (final Activity activity : sorActivities) { double marketrate = 0; double marketrateAmt = 0; final ScheduleOfRate scheduleOfRate = activity.getSchedule(); if (scheduleOfRate.hasValidMarketRateFor(asOnDate)) { double result = 1; final MarketRate marketRate = scheduleOfRate.getMarketRateOn(asOnDate); if (activity.getUom() != null && StringUtils.isNotBlank(activity.getUom().getUom()) && exceptionaSorMap.containsKey(activity.getUom().getUom())) result = exceptionaSorMap.get(activity.getUom().getUom()); marketrate = marketRate.getMarketRate().getValue() / result; } if (marketrate == 0) marketrateAmt = activity.getAmount().getValue(); else marketrateAmt = activity.getQuantity() * marketrate; marketRateAmount = marketRateAmount + marketrateAmt; } final Collection<Activity> nonSorActivities = abstractEstimate.getNonSORActivities(); for (final Activity activity : nonSorActivities) marketRateAmount = marketRateAmount + activity.getAmount().getValue(); return marketRateAmount; } public double getMarketValueForPackage(final Long packageId) { final WorksPackage workspackage = workspackageService.findById(packageId, false); for (final EstimateLineItemsForWP estlineItem : workspackage.getActivitiesForEstimate()) { double marketrate = 0; double marketrateAmt = 0; final Map<String, Integer> exceptionaSorMap = worksService.getExceptionSOR(); if (StringUtils.isNotBlank(estlineItem.getCode())) { final ScheduleOfRate scheduleOfRate = estlineItem.getActivity().getSchedule(); if (scheduleOfRate.hasValidMarketRateFor(asOnDate)) { double result = 1; final MarketRate marketRate = scheduleOfRate.getMarketRateOn(asOnDate); if (exceptionaSorMap.containsKey(estlineItem.getUom())) result = exceptionaSorMap.get(estlineItem.getUom()); marketrate = marketRate.getMarketRate().getValue() / result; } if (marketrate == 0) marketrateAmt = estlineItem.getAmt(); else marketrateAmt = estlineItem.getQuantity() * marketrate; marketRateAmount = marketRateAmount + marketrateAmt; } else marketRateAmount = marketRateAmount + estlineItem.getActivity().getAmount().getValue(); } return marketRateAmount; } public double getMarketRateWithTax(final double marketrate, final Activity activity) { double marketrateAmt = 0; if (marketrate == 0) marketrateAmt = activity.getAmountIncludingTax().getValue(); else { marketrateAmt = activity.getQuantity() * marketrate; marketrateAmt += activity.getServiceTaxPerc() * marketrateAmt / 100; } return marketrateAmt; } public String tenderNumberUniqueCheck() { return TENDERNUMBERUNIQUECHECK; } // for preparedby public String designationForUser() { try { assignment = assignmentService.getPrimaryAssignmentForEmployee(empID); } catch (final Exception e) { throw new ApplicationRuntimeException("user.find.error", e); } return DESIGN_FOR_EMP; } public boolean getTendernoCheck() { boolean tenderNoexistsOrNot = false; TenderResponse tenderResponseObj = null; if (id == null) { tenderResponseObj = (TenderResponse) getPersistenceService().findByNamedQuery("TenderNumberUniqueCheck", tenderNo); if (tenderResponseObj != null) tenderNoexistsOrNot = true; } else if (getPersistenceService().findByNamedQuery("TenderNumberUniqueCheckForEdit", tenderNo, id) != null) tenderNoexistsOrNot = true; return tenderNoexistsOrNot; } public String usersInExecutingDepartment() { try { final HashMap<String, Object> criteriaParams = new HashMap<String, Object>(); criteriaParams.put("departmentId", executingDepartment); criteriaParams.put("isPrimary", "Y"); if (executingDepartment == null || executingDepartment == -1) usersInExecutingDepartment = Collections.EMPTY_LIST; else usersInExecutingDepartment = personalInformationService.getListOfEmployeeViewBasedOnCriteria( criteriaParams, -1, -1); } catch (final Exception e) { throw new ApplicationRuntimeException("user.find.error", e); } return USERS_IN_DEPT; } public String getWODetailsForTN() throws Exception { List<WorkOrder> woList = new ArrayList<WorkOrder>(); woList = workOrderService .findAllBy( "select distinct wo from WorkOrder wo where wo.egwStatus.code<>'CANCELLED' and wo.negotiationNumber=? ", tenderNegotiationNo); if (woList != null && !woList.isEmpty()) workOrderList.addAll(woList); return GET_WORKORDERS_TN; } public String searchNegotiationNumber() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = " select distinct tr.negotiationNumber from TenderResponse tr where upper(tr.negotiationNumber) like '%'||?||'%' and tr.egwStatus.code <> ? "; params.add(query.toUpperCase()); params.add("NEW"); negotiationNumberList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "negotiationNumberSearchResults"; } public String searchWorksPackageNumber() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = "select distinct tr.tenderEstimate.worksPackage from TenderResponse tr where upper(tr.tenderEstimate.worksPackage.wpNumber) like '%'||?||'%' and tr.egwStatus.code <> ? "; params.add(query.toUpperCase()); params.add("NEW"); wpNumberList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "worksPackageNumberSearchResults"; } public String searchTenderFileNumber() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = "select distinct tr.tenderEstimate.worksPackage from TenderResponse tr where upper(tr.tenderEstimate.worksPackage.tenderFileNumber) like '%'||?||'%' and tr.egwStatus.code <> ? "; params.add(query.toUpperCase()); params.add("NEW"); tenderFileNumberList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "tenderFileNumberSearchResults"; } public String searchProjectCode() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = "select distinct wpd.estimate.projectCode from WorksPackageDetails wpd where upper(wpd.estimate.projectCode.code) like '%'||?||'%' " + " and wpd.worksPackage.id in (select distinct tr.tenderEstimate.worksPackage.id from TenderResponse tr where tr.egwStatus.code <> ? )"; params.add(query.toUpperCase()); params.add("NEW"); projectCodeList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "projectCodeSearchResults"; } public String searchEstimateNumber() { String strquery = ""; final ArrayList<Object> params = new ArrayList<Object>(); if (!StringUtils.isEmpty(query)) { strquery = "select wpd.estimate from WorksPackageDetails wpd where upper(wpd.estimate.estimateNumber) like '%'||?||'%' " + " and wpd.worksPackage.id in (select distinct tr.tenderEstimate.worksPackage.id from TenderResponse tr where tr.egwStatus.code <> ? )"; params.add(query.toUpperCase()); params.add("NEW"); estimateList = getPersistenceService().findAllBy(strquery, params.toArray()); } return "estimateNoSearchResults"; } @Override public Object getModel() { return tenderResp; } @Override public String execute() { return SUCCESS; } public void setAssignmentService(final AssignmentService assignmentService) { this.assignmentService = assignmentService; } public void setAbstractEstimateService(final AbstractEstimateService abstractEstimateService) { this.abstractEstimateService = abstractEstimateService; } public void setEstimateId(final Long estimateId) { this.estimateId = estimateId; } public void setAsOnDate(final Date asOnDate) { this.asOnDate = asOnDate; } public double getMarketRateAmount() { return marketRateAmount; } public void setMarketRateAmount(final double marketRateAmount) { this.marketRateAmount = marketRateAmount; } public void setEmpID(final Long empID) { this.empID = empID; } public List getUsersInExecutingDepartment() { return usersInExecutingDepartment; } public void setExecutingDepartment(final Integer executingDepartment) { this.executingDepartment = executingDepartment; } public Assignment getAssignment() { return assignment; } public Long getPackageId() { return packageId; } public void setPackageId(final Long packageId) { this.packageId = packageId; } public void setWorkspackageService(final WorksPackageService workspackageService) { this.workspackageService = workspackageService; } public String getTenderNo() { return tenderNo; } public void setTenderNo(final String tenderNo) { this.tenderNo = tenderNo; } public Long getCheckId() { return checkId; } public void setCheckId(final Long checkId) { this.checkId = checkId; } public TenderResponse getTenderResp() { return tenderResp; } public void setTenderResp(final TenderResponse tenderResp) { this.tenderResp = tenderResp; } public Long getId() { return id; } public void setId(final Long id) { this.id = id; } public void setWorksService(final WorksService worksService) { this.worksService = worksService; } public void setPersonalInformationService(final PersonalInformationService personalInformationService) { this.personalInformationService = personalInformationService; } public List<WorkOrder> getWorkOrderList() { return workOrderList; } public void setWorkOrderList(final List<WorkOrder> workOrderList) { this.workOrderList = workOrderList; } public String getTenderNegotiationNo() { return tenderNegotiationNo; } public void setTenderNegotiationNo(final String tenderNegotiationNo) { this.tenderNegotiationNo = tenderNegotiationNo; } public void setWorkOrderService(final WorkOrderService workOrderService) { this.workOrderService = workOrderService; } public List<AbstractEstimate> getEstimateList() { return estimateList; } public void setEstimateList(final List<AbstractEstimate> estimateList) { this.estimateList = estimateList; } public String getQuery() { return query; } public void setQuery(final String query) { this.query = query; } public List<ProjectCode> getProjectCodeList() { return projectCodeList; } public void setProjectCodeList(final List<ProjectCode> projectCodeList) { this.projectCodeList = projectCodeList; } public List<String> getNegotiationNumberList() { return negotiationNumberList; } public List<WorksPackage> getWpNumberList() { return wpNumberList; } public void setWpNumberList(final List<WorksPackage> wpNumberList) { this.wpNumberList = wpNumberList; } public List<WorksPackage> getTenderFileNumberList() { return tenderFileNumberList; } public void setTenderFileNumberList(final List<WorksPackage> tenderFileNumberList) { this.tenderFileNumberList = tenderFileNumberList; } }