/*
* 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.workorder;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
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.Locale;
import java.util.Map;
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.EgwStatus;
import org.egov.commons.dao.EgwStatusHibernateDAO;
import org.egov.eis.entity.EmployeeView;
import org.egov.eis.service.AssignmentService;
import org.egov.infra.admin.master.entity.Department;
import org.egov.infra.admin.master.entity.User;
import org.egov.infra.admin.master.service.DepartmentService;
import org.egov.infra.admin.master.service.UserService;
import org.egov.infra.exception.ApplicationRuntimeException;
import org.egov.infra.persistence.entity.component.Money;
import org.egov.infra.reporting.engine.ReportOutput;
import org.egov.infra.reporting.engine.ReportRequest;
import org.egov.infra.reporting.engine.ReportService;
import org.egov.infra.utils.DateUtils;
import org.egov.infra.utils.NumberUtil;
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.infra.web.struts.annotation.ValidationErrorPage;
import org.egov.infra.web.utils.EgovPaginatedList;
import org.egov.infra.workflow.entity.StateHistory;
import org.egov.infra.workflow.entity.WorkflowAction;
import org.egov.infra.workflow.service.WorkflowService;
import org.egov.infstr.services.Page;
import org.egov.infstr.services.PersistenceService;
import org.egov.pims.commons.Designation;
import org.egov.pims.model.PersonalInformation;
import org.egov.pims.service.EisUtilService;
import org.egov.pims.service.EmployeeServiceOld;
import org.egov.pims.service.PersonalInformationService;
import org.egov.works.abstractestimate.entity.AbstractEstimate;
import org.egov.works.abstractestimate.entity.Activity;
import org.egov.works.abstractestimate.entity.AssetsForEstimate;
import org.egov.works.models.contractoradvance.ContractorAdvanceRequisition;
import org.egov.works.models.masters.Contractor;
import org.egov.works.models.tender.EstimateLineItemsForWP;
import org.egov.works.models.tender.OfflineStatus;
import org.egov.works.models.tender.TenderResponse;
import org.egov.works.models.tender.TenderResponseActivity;
import org.egov.works.models.tender.TenderResponseContractors;
import org.egov.works.models.workorder.AssetsForWorkOrder;
import org.egov.works.models.workorder.WorkOrder;
import org.egov.works.models.workorder.WorkOrderActivity;
import org.egov.works.models.workorder.WorkOrderEstimate;
import org.egov.works.services.AbstractEstimateService;
import org.egov.works.services.TenderResponseService;
import org.egov.works.services.WorkOrderService;
import org.egov.works.services.WorksService;
import org.egov.works.services.impl.WorkOrderServiceImpl;
import org.egov.works.utils.DateConversionUtil;
import org.egov.works.utils.WorksConstants;
import org.egov.works.web.actions.estimate.AjaxEstimateAction;
import org.hibernate.Query;
import org.springframework.beans.factory.annotation.Autowired;
import net.sf.jasperreports.engine.JRException;
@ParentPackage("egov")
@Results(value = {
@Result(name = WorkOrderAction.PRINT, type = "stream", location = "WorkOrderPDF", params = {
"inputName", "WorkOrderPDF", "contentType", "application/pdf", "contentDisposition", "no-cache" }),
@Result(name = WorkOrderAction.WORKORDERNOTICEPDF, type = "stream", location = "WorkOrderPDF", params = {
"inputName", "WorkOrderPDF", "contentType", "application/pdf", "contentDisposition",
"no-cache;filename=WorkOrderNotice.pdf" }),
@Result(name = WorkOrderAction.NEW, location = "workOrder-new.jsp") })
public class WorkOrderAction extends BaseFormAction {
private static final long serialVersionUID = -8902400945730474523L;
private static final String SAVE_ACTION = "save";
public final static String APPROVED = "APPROVED";
private final NumberFormat formatter = new DecimalFormat("#0.00");
private WorkOrder workOrder = new WorkOrder();
private WorkOrderService workOrderService;
private WorksService worksService;
private TenderResponseService tenderResponseService;
private AbstractEstimateService abstractEstimateService;
private PersistenceService<OfflineStatus, Long> worksStatusService;
@Autowired
private EgwStatusHibernateDAO egwStatusHibernateDAO;
@Autowired
private AssignmentService assignmentService;
@Autowired
private EmployeeServiceOld employeeServiceOld;
@Autowired
private UserService userService;
@Autowired
private DepartmentService departmentService;
private EisUtilService eisService;
private Long tenderRespId;
private TenderResponse tenderResponse;
private Long deptId;
private Integer empId;
private String editableDate;
private String createdBySelection;
private String status;
private Double activityAssignedAmt;
private Date fromDate;
private Date toDate;
private Long assignedTo1;
private Long assignedTo2;
private String messageKey;
private Long id;
private String setStatus;
private String mode;
private static final String PREPARED_BY_LIST = "preparedByList";
private static final String DEPARTMENT_LIST = "departmentList";
private static final String ASSIGNED_TO_LIST = "assignedToList";
private static final String ASSIGNED_USER_LIST1 = "assignedUserList1";
private static final String ASSIGNED_USER_LIST2 = "assignedUserList2";
private static final String OBJECT_TYPE = "TenderResponse";
private static final String WO_OBJECT_TYPE = "WorkOrder";
private static final String STATUS_OBJECTID = "getStatusDateByObjectId_Type_Desc";
private static final String WORK_ORDER_CREATIONDATE = "STATUS_FOR_WORKORDER_CREATION";
private static final String SITE_HAND_OVER = "Site handed over";
private static final String WORK_COMMENCED = "Work commenced";
private static final String WF_APPROVED = "APPROVED";
private static final String SEARCH_WO = "searchWorkOrder";
private static final String DATE_FORMAT = "dd-MMM-yyyy";
private static final String SOURCE_INBOX = "inbox";
private List<Designation> workOrderDesigList = new ArrayList<Designation>();
private List<WorkOrder> workOrderList = null;
// private List<String> workOrderActions;
private Long workOrderId;
private String sourcepage = "";
private String percTenderType = "";
private String tenderResponseType = null;
private WorkflowService<WorkOrder> workOrderWorkflowService;
private OfflineStatus setStatusObj;
public static final String PRINT = "print";
private InputStream workOrderPDF;
private ReportService reportService;
private String employeeName;
private String designation;
private String estimateNumber;
private String wpNumber;
private String tenderFileNumber;
private PersonalInformationService personalInformationService;
private Long tenderRespContrId;
private TenderResponseContractors tenderResponseContractor;
private PersistenceService<TenderResponseContractors, Long> tenderResponseContractorsService;
private Double securityDepositConfValue;
private Double labourWelfareFundConfValue;
private List<WorkOrderActivity> actionWorkOrderActivities = new LinkedList<WorkOrderActivity>();
private List<WorkOrderActivity> woActivities = new LinkedList<WorkOrderActivity>();
private PersistenceService<Activity, Long> activityService;
private Integer page = 1;
private Integer pageSize = 30;
private EgovPaginatedList pagedResults;
private String cancellationReason;
private String cancelRemarks;
private String workOrderNo;
private String woStatus;
private static final Logger logger = Logger.getLogger(WorkOrderAction.class);
private final SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");
private Date contractPeriodCutOffDate;
private Integer defaultPreparedBy;
private Long defaultDepartmentId;
private final String loggedInUserEmployeeCode = null;
private Long estimateId;
private AbstractEstimate abstractEstimate = null;
private Boolean isWorkCommenced;
private Integer reportId = -1;
protected static final String WORKORDERNOTICEPDF = "workOrderNotice";
public static final String WORKFLOW_ENDS = "END";
public WorkOrderAction() {
addRelatedEntity("contractor", Contractor.class);
addRelatedEntity("engineerIncharge", PersonalInformation.class);
addRelatedEntity("engineerIncharge2", PersonalInformation.class);
addRelatedEntity("workOrderPreparedBy", PersonalInformation.class);
}
@Override
public void prepare() {
if (estimateId != null)
abstractEstimate = abstractEstimateService.findById(estimateId, false);
final AjaxEstimateAction ajaxEstimateAction = new AjaxEstimateAction();
final AjaxWorkOrderAction ajaxWorkOrderAction = new AjaxWorkOrderAction();
ajaxWorkOrderAction.setPersistenceService(getPersistenceService());
ajaxWorkOrderAction.setPersonalInformationService(personalInformationService);
ajaxEstimateAction.setPersistenceService(getPersistenceService());
ajaxEstimateAction.setAssignmentService(assignmentService);
ajaxEstimateAction.setAbstractEstimateService(abstractEstimateService);
ajaxEstimateAction.setEisService(eisService);
addDropdownData("executingDepartmentList",
getPersistenceService().findAllBy("from DepartmentImpl order by upper(deptName)"));
if (worksService != null) {
final List<String> tenderTypeList = worksService.getTendertypeList();
if (tenderTypeList != null && !tenderTypeList.isEmpty())
percTenderType = tenderTypeList.get(0);
}
if (tenderRespId != null) {
tenderResponse = tenderResponseService.findById(tenderRespId, false);
if (tenderRespContrId != null)
tenderResponseContractor = tenderResponseContractorsService.findById(tenderRespContrId, false);
if (tenderResponse.getTenderResponseContractors().size() > 1)
workOrder.setWorkOrderAmount(0.0D);
else
workOrder.setWorkOrderAmount(getEstimateAmountAfterNego());
tenderResponse.setActivitiesForWorkorder(workOrderService.getActivitiesForWorkorder(tenderResponse));
}
if (id != null) {
workOrder = workOrderService.findById(id, false);
final Object woNoticeFlag = workOrderService.getWorkCommencedDateByWOId(id);
isWorkCommenced = woNoticeFlag == null ? false : true;
if (workOrder.getEgwStatus().getCode().equalsIgnoreCase("cancelled"))
tenderResponse = tenderResponseService.findByNamedQuery("getTenderFortenderIdCanceledWO", workOrder
.getNegotiationNumber(), workOrder.getId(), workOrder.getTenderNumber(), workOrder
.getContractor().getId(),
workOrder.getPackageNumber());
else
tenderResponse = tenderResponseService.findByNamedQuery("getTenderFortenderId",
workOrder.getTenderNumber());
tenderRespId = tenderResponse.getId();
tenderResponse.setWorkOrderAmount(getWorkOrderAmount());
tenderResponseContractor = tenderResponseContractorsService.find(
"from TenderResponseContractors where contractor.id=? and tenderResponse.id=?", workOrder
.getContractor().getId(),
tenderResponse.getId());
tenderRespContrId = tenderResponseContractor.getId();
setWorkOrderActivities(workOrder);
}
super.prepare();
if (tenderResponse != null)
if (tenderResponse.getTenderEstimate().getAbstractEstimate() == null)
deptId = tenderResponse.getTenderEstimate().getWorksPackage().getDepartment().getId();
else
deptId = tenderResponse.getTenderEstimate().getAbstractEstimate().getExecutingDepartment().getId();
setupDropdownDataExcluding("contractor", "engineerIncharge", "engineerIncharge2", "workOrderPreparedBy");
if (StringUtils.isNotBlank(getCreatedBy()) && "yes".equalsIgnoreCase(getCreatedBy())) {
setCreatedBySelection(getCreatedBy());
addDropdownData(DEPARTMENT_LIST, departmentService.getAllDepartments());
populatePreparedByList(ajaxEstimateAction, deptId != null);
} else {
final List<EmployeeView> empViewList = getUsersInDepartment();
if (empViewList != null && empViewList.size() == 1)
defaultPreparedBy = empViewList.get(0).getId().intValue();
addDropdownData(PREPARED_BY_LIST, empViewList);
defaultDepartmentId = deptId;
if (tenderResponse != null && tenderResponse.getTenderEstimate() != null
&& tenderResponse.getTenderEstimate().getWorksPackage() != null
&& tenderResponse.getTenderEstimate().getWorksPackage().getDepartment() != null)
addDropdownData(DEPARTMENT_LIST,
Arrays.asList(tenderResponse.getTenderEstimate().getWorksPackage().getDepartment()));
setCreatedBySelection(getCreatedBy());
}
if (StringUtils.isNotBlank(getPastDate()))
setEditableDate(getPastDate());
populateWorkOrderAssignedToList(ajaxWorkOrderAction, deptId != null);
populateWorkOrderUsersList1(ajaxWorkOrderAction, assignedTo1 != null, deptId != null);
populateWorkOrderUsersList2(ajaxWorkOrderAction, assignedTo2 != null, deptId != null);
addDropdownData("deptListForSearch", departmentService.getAllDepartments());
getDeptList();
final String cutOffDate = worksService.getWorksConfigValue("CONTRACT_PERIOD_CUT_OFF_DATE");
if (StringUtils.isNotBlank(cutOffDate))
try {
contractPeriodCutOffDate = dateFormatter.parse(cutOffDate);
} catch (final ParseException pe) {
logger.error("Unable to parse contract period cut off date");
}
if (tenderResponse != null && tenderResponse.getTenderEstimate() != null
&& tenderResponse.getTenderEstimate().getTenderType() != null
&& tenderResponse.getTenderEstimate().getTenderType().equalsIgnoreCase(percTenderType))
tenderResponseType = tenderResponse.getTenderEstimate().getTenderType();
if ("cancelWO".equals(sourcepage))
setWoStatus(WorksConstants.APPROVED);
}
private List getUsersInDepartment() {
final AjaxEstimateAction ajaxEstimateAction = new AjaxEstimateAction();
ajaxEstimateAction.setPersistenceService(getPersistenceService());
ajaxEstimateAction.setAssignmentService(assignmentService);
ajaxEstimateAction.setEisService(eisService);
if (deptId != null)
ajaxEstimateAction.setExecutingDepartment(deptId);
else if (tenderResponse != null)
if (tenderResponse.getTenderEstimate().getAbstractEstimate() == null)
ajaxEstimateAction.setExecutingDepartment(tenderResponse.getTenderEstimate().getWorksPackage()
.getDepartment().getId());
else
ajaxEstimateAction.setExecutingDepartment(tenderResponse.getTenderEstimate().getAbstractEstimate()
.getExecutingDepartment().getId());
ajaxEstimateAction.setEmployeeCode(loggedInUserEmployeeCode);
ajaxEstimateAction.usersInExecutingDepartment();
return ajaxEstimateAction.getUsersInExecutingDepartment();
}
@Action(value = "/workorder/worksOrder-newform")
public String newform() {
workOrder.setSecurityDeposit(getSecurityDepositConfValue() / 100 * workOrder.getWorkOrderAmount());
workOrder.setLabourWelfareFund(getLabourWelfareFundConfValue() / 100 * workOrder.getWorkOrderAmount());
return NEW;
}
public String save() {
final String actionName = parameters.get("actionName")[0];
if (workOrder.getEgwStatus() == null
|| WorksConstants.REJECTED.equalsIgnoreCase(workOrder.getEgwStatus().getCode())
|| NEW.equalsIgnoreCase(workOrder.getEgwStatus().getCode())) {
workOrder.getWorkOrderEstimates().clear();
// populateAssets();
populateWorkOrderActivities();
}
try {
workOrderService.setWorkOrderNumber(tenderResponse.getTenderEstimate().getAbstractEstimate(), workOrder,
tenderResponse.getTenderEstimate().getWorksPackage());
} catch (final ValidationException sequenceException) {
setSourcepage("inbox");
final List<ValidationError> errorList = sequenceException.getErrors();
for (final ValidationError error : errorList)
if (error.getMessage().contains("DatabaseSequenceFirstTimeException")) {
prepare();
throw new ValidationException(Arrays.asList(new ValidationError("error", error.getMessage())));
}
}
if (workOrder.getEgwStatus() == null
|| WorksConstants.REJECTED.equalsIgnoreCase(workOrder.getEgwStatus().getCode())
|| NEW.equalsIgnoreCase(workOrder.getEgwStatus().getCode()))
validateWorkOrderDate();
if (SAVE_ACTION.equals(actionName) && workOrder.getEgwStatus() == null)
workOrder.setEgwStatus(egwStatusHibernateDAO.getStatusByModuleAndCode("WorkOrder", "NEW"));
workOrder = workOrderService.persist(workOrder);
workOrder = workOrderWorkflowService.transition(actionName, workOrder, "");
if (workOrder.getEgwStatus() != null && APPROVED.equalsIgnoreCase(workOrder.getEgwStatus().getCode())) {
messageKey = "workOrder.approved";
workOrder.setApprovedDate(new Date());
} else
messageKey = "workorder.save.success";
addActionMessage(getText(messageKey, messageKey));
getDesignation(workOrder);
if (workOrder.getEgwStatus() == null
|| WorksConstants.REJECTED.equalsIgnoreCase(workOrder.getEgwStatus().getCode())
|| NEW.equalsIgnoreCase(workOrder.getEgwStatus().getCode()))
setWorkOrderActivities(workOrder);
if (SAVE_ACTION.equals(actionName))
sourcepage = "inbox";
return SAVE_ACTION.equals(actionName) ? EDIT : SUCCESS;
}
public String cancel() {
final String actionName = parameters.get("actionName")[0];
if (workOrder.getId() != null) {
workOrderWorkflowService.transition(actionName, workOrder, "");
workOrder = workOrderService.persist(workOrder);
}
messageKey = "workorder.cancel";
return SUCCESS;
}
public void getDesignation(final WorkOrder workOrder) {
/* start for customizing workflow message display */
if (workOrder.getEgwStatus() != null && !"NEW".equalsIgnoreCase(workOrder.getEgwStatus().getCode())) {
final String result = worksService.getEmpNameDesignation(workOrder.getState().getOwnerPosition(), workOrder
.getState().getCreatedDate());
if (result != null && !"@".equalsIgnoreCase(result)) {
final String empName = result.substring(0, result.lastIndexOf('@'));
final String designation = result.substring(result.lastIndexOf('@') + 1, result.length());
setEmployeeName(empName);
setDesignation(designation);
}
}
/* end */
}
private void validateWorkOrderDate() {
// TODO - use Tender Response approved date instead of reading from
// approved state createddate
if (getWorkOrderCreationDate() == null
&& workOrder.getWorkOrderDate() != null
&& tenderResponse.getEgwStatus() != null
&& TenderResponse.TenderResponseStatus.APPROVED.toString().equals(
tenderResponse.getEgwStatus().getCode())
&& DateConversionUtil.isBeforeByDate(workOrder.getWorkOrderDate(), tenderResponse.getState()
.getCreatedDate()))
throw new ValidationException(Arrays.asList(new ValidationError(
"workorder.workorderDate.lessthan.approvedDate", "workorder.workorderDate.lessthan.approvedDate")));
else if (getWorkOrderCreationDate() != null && workOrder.getWorkOrderDate() != null
&& DateConversionUtil.isBeforeByDate(workOrder.getWorkOrderDate(), getWorkOrderCreationDate()))
throw new ValidationException(Arrays.asList(new ValidationError(
"workorder.workorderDate.lessthan.statusDate", getText(
"workorder.workorderDate.lessthan.statusDate", new String[] { setStatusObj.getEgwStatus()
.getDescription() }))));
}
@SkipValidation
public String viewWorkOrderPdf() throws JRException, Exception {
ReportRequest reportRequest = null;
Map<String, Object> reportParams = null;
Double quotedPerc = null;
Double negotiatedPerc = null;
Double quotedAmount = null;
Double negotiatedAmount = null;
Double estimateAmt = null;
TenderResponse tenderResponse;
if (workOrder.getEgwStatus().getCode().equalsIgnoreCase("cancelled"))
tenderResponse = (TenderResponse) persistenceService.findByNamedQuery("getTenderFortenderIdCanceledWO",
workOrder.getNegotiationNumber(), workOrder.getId(), workOrder.getTenderNumber(), workOrder
.getContractor().getId(),
workOrder.getPackageNumber());
else
tenderResponse = (TenderResponse) persistenceService.findByNamedQuery("getTenderFortenderId",
workOrder.getTenderNumber());
final List<String> tenderTypeList = worksService.getTendertypeList();
if (tenderTypeList != null && !tenderTypeList.isEmpty())
percTenderType = tenderTypeList.get(0);
if (tenderResponse != null && tenderResponse.getTenderEstimate() != null
&& tenderResponse.getTenderEstimate().getTenderType() != null
&& tenderResponse.getTenderEstimate().getTenderType().equalsIgnoreCase(percTenderType)) {
quotedPerc = tenderResponse.getPercQuotedRate();
negotiatedPerc = tenderResponse.getPercNegotiatedAmountRate();
quotedAmount = null;
negotiatedAmount = null;
if (tenderResponse.getTenderResponseContractors().size() > 1) {
if (negotiatedPerc >= 0)
estimateAmt = workOrder.getWorkOrderAmount() / (1 + Math.abs(negotiatedPerc) / 100);
else
estimateAmt = workOrder.getWorkOrderAmount() / (1 - Math.abs(negotiatedPerc) / 100);
} else
estimateAmt = getWorkOrderAmount();
if (quotedPerc >= 0)
quotedAmount = estimateAmt + estimateAmt * (Math.abs(quotedPerc) / 100);
else
quotedAmount = estimateAmt - estimateAmt * (Math.abs(quotedPerc) / 100);
if (negotiatedPerc >= 0)
negotiatedAmount = estimateAmt + estimateAmt * (Math.abs(negotiatedPerc) / 100);
else
negotiatedAmount = estimateAmt - estimateAmt * (Math.abs(negotiatedPerc) / 100);
}
if (workOrder.getPackageNumber() == null) {
reportParams = workOrderService.createHeaderParams(workOrder, "estimate");
reportParams.put("WORKORDER_BILLOFQUANTITIES_LIST", workOrderService.getActivitiesForWorkorder(workOrder));
reportParams.put("quotedAmount", quotedAmount);
reportParams.put("quotedPerc", quotedPerc);
reportParams.put("negotiatedAmount", negotiatedAmount);
reportParams.put("negotiatedPerc", negotiatedPerc);
reportParams.put("estimateAmt", estimateAmt);
reportRequest = new ReportRequest("workorderForEstimate", workOrder, reportParams);
} else {
reportParams = workOrderService.createHeaderParams(workOrder, "wp");
reportParams.put("WORKORDER_BILLOFQUANTITIES_LIST", workOrderService.getActivitiesForWorkorder(workOrder));
reportParams.put("quotedAmount", quotedAmount);
reportParams.put("quotedPerc", quotedPerc);
reportParams.put("negotiatedAmount", negotiatedAmount);
reportParams.put("negotiatedPerc", negotiatedPerc);
reportRequest = new ReportRequest("workorderForWp", workOrderService.getAeForWp(workOrder), reportParams);
reportParams.put("estimateAmt", estimateAmt);
}
final ReportOutput reportOutput = reportService.createReport(reportRequest);
if (reportOutput != null && reportOutput.getReportOutputData() != null)
workOrderPDF = new ByteArrayInputStream(reportOutput.getReportOutputData());
return PRINT;
}
private void populateWorkOrderActivities() {
if (tenderResponse != null && tenderResponse.getTenderResponseContractors().size() == 1) {
if (tenderResponse.getTenderEstimate().getWorksPackage() == null) {
WorkOrderEstimate workOrderEstimate = new WorkOrderEstimate();
workOrderEstimate.setEstimate(tenderResponse.getTenderEstimate().getAbstractEstimate());
workOrderEstimate.setWorkOrder(workOrder);
for (final TenderResponseActivity tenderResponseActivity : tenderResponse.getTenderResponseActivities())
addTenderResponseActivities(workOrderEstimate, tenderResponseActivity);
workOrderEstimate = populateAssets(workOrderEstimate, tenderResponse.getTenderEstimate()
.getAbstractEstimate());
workOrder.addWorkOrderEstimate(workOrderEstimate);
} else if (tenderResponse.getTenderEstimate().getAbstractEstimate() == null)
for (final AbstractEstimate estimate : tenderResponse.getTenderEstimate().getWorksPackage()
.getAllEstimates()) {
WorkOrderEstimate workOrderEstimate = new WorkOrderEstimate();
workOrderEstimate.setEstimate(estimate);
workOrderEstimate.setWorkOrder(workOrder);
for (final TenderResponseActivity tenderResponseActivity : tenderResponse
.getTenderResponseActivities())
for (final Activity act : estimate.getActivities())
if (act.getId().equals(tenderResponseActivity.getActivity().getId()))
addTenderResponseActivities(workOrderEstimate, tenderResponseActivity);
workOrderEstimate = populateAssets(workOrderEstimate, estimate);
workOrder.addWorkOrderEstimate(workOrderEstimate);
}
} else {
final Map<Long, WorkOrderEstimate> workOrderEstimateMap = new HashMap<Long, WorkOrderEstimate>();
for (final WorkOrderActivity woActivity : getActionWorkOrderActivityList()) {
if (!workOrderEstimateMap.containsKey(woActivity.getActivity().getAbstractEstimate().getId())) {
WorkOrderEstimate workOrderEstimate = new WorkOrderEstimate();
workOrderEstimate.setEstimate(woActivity.getActivity().getAbstractEstimate());
workOrderEstimate.setWorkOrder(workOrder);
workOrderEstimate = populateAssets(workOrderEstimate, woActivity.getActivity()
.getAbstractEstimate());
workOrderEstimateMap.put(woActivity.getActivity().getAbstractEstimate().getId(), workOrderEstimate);
}
final WorkOrderActivity workOrderActivity = new WorkOrderActivity();
workOrderActivity.setActivity(woActivity.getActivity());
workOrderActivity.setApprovedRate(woActivity.getApprovedRate());
workOrderActivity.setApprovedQuantity(woActivity.getApprovedQuantity());
workOrderActivity
.setApprovedAmount(new Money(woActivity.getApprovedRate() * woActivity.getApprovedQuantity()
* woActivity.getActivity().getConversionFactor()).getValue());
final WorkOrderEstimate workOrderEstimate = workOrderEstimateMap.get(woActivity.getActivity()
.getAbstractEstimate().getId());
workOrderActivity.setWorkOrderEstimate(workOrderEstimate);
workOrderEstimate.addWorkOrderActivity(workOrderActivity);
}
for (final WorkOrderEstimate workOrderEstimate : workOrderEstimateMap.values())
workOrder.addWorkOrderEstimate(workOrderEstimate);
}
}
public String edit() {
if (SOURCE_INBOX.equalsIgnoreCase(sourcepage)) {
final User user = userService.getUserById(worksService.getCurrentLoggedInUserId());
final boolean isValidUser = worksService.validateWorkflowForUser(workOrder, user);
if (isValidUser)
throw new ApplicationRuntimeException("Error: Invalid Owner - No permission to view this page.");
} else if (StringUtils.isEmpty(sourcepage))
sourcepage = "search";
return EDIT;
}
public Collection<EstimateLineItemsForWP> getActivitiesForWorkorder() {
Collection<EstimateLineItemsForWP> li = null;
if (id == null) {
tenderResponse.setWorkOrderAmount(getWorkOrderAmount());
li = workOrderService.getActivitiesForWorkorder(tenderResponse);
} else
li = workOrderService.getActivitiesForWorkorder(workOrder);
return li;
}
@Override
public Object getModel() {
return workOrder;
}
@ValidationErrorPage(value = SEARCH_WO)
public String searchWorkOrder() {
return SEARCH_WO;
}
public List<EgwStatus> getWorkOrderStatuses() {
final List<EgwStatus> woStatusList = egwStatusHibernateDAO.getStatusByModule(WorkOrder.class.getSimpleName());
woStatusList.remove(egwStatusHibernateDAO.getStatusByModuleAndCode(WorkOrder.class.getSimpleName(), "NEW"));
return woStatusList;
}
public List<EgwStatus> getWorkOrderStatusesForMBCreation() {
return egwStatusHibernateDAO.getStatusListByModuleAndCodeList(WorkOrder.class.getSimpleName(),
worksService.getNatureOfWorkAppConfigValues("Works", "WORKORDER_STATUS"));
}
public String getWOCreationForEstimateOrWP() {
return worksService.getWorksConfigValue("ESTIMATE_OR_WP_FOR_WO");
}
private WorkOrderEstimate populateAssets(final WorkOrderEstimate workOrderEstimate, final AbstractEstimate estimate) {
for (final AssetsForEstimate assetValue : estimate.getAssetValues()) {
final AssetsForWorkOrder assetsForWorkOrder = new AssetsForWorkOrder();
assetsForWorkOrder.setAsset(assetValue.getAsset());
assetsForWorkOrder.setWorkOrderEstimate(workOrderEstimate);
workOrderEstimate.addAssetValue(assetsForWorkOrder);
}
return workOrderEstimate;
}
private void addTenderResponseActivities(final WorkOrderEstimate workOrderEstimate,
final TenderResponseActivity tenderResponseActivity) {
final WorkOrderActivity workOrderActivity = new WorkOrderActivity();
workOrderActivity.setActivity(tenderResponseActivity.getActivity());
workOrderActivity.setApprovedRate(tenderResponseActivity.getNegotiatedRate());
workOrderActivity.setApprovedQuantity(tenderResponseActivity.getNegotiatedQuantity());
workOrderActivity.setApprovedAmount(new Money(workOrderActivity.getApprovedRate()
* workOrderActivity.getApprovedQuantity() * tenderResponseActivity.getActivity().getConversionFactor())
.getValue());
workOrderActivity.setWorkOrderEstimate(workOrderEstimate);
workOrderEstimate.addWorkOrderActivity(workOrderActivity);
}
private Date getWorkOrderCreationDate() {
final String statusForCreation = getWorkOrderCreationConfValue();
if ("0".equals(statusForCreation))
setStatusObj = (OfflineStatus) getPersistenceService().findByNamedQuery("getmaxStatusByObjectId", tenderRespId,
tenderRespId, OBJECT_TYPE);
else
setStatusObj = (OfflineStatus) getPersistenceService().findByNamedQuery("getStatusDateByObjectId_Type_Desc",
tenderRespId, OBJECT_TYPE, statusForCreation);
if (setStatusObj != null)
return setStatusObj.getStatusDate();
return null;
}
private String getWorkOrderCreationConfValue() {
return worksService.getWorksConfigValue(WORK_ORDER_CREATIONDATE);
}
public double getWorkOrderAmount() {
double totalAmt = 0;
for (final EstimateLineItemsForWP act : workOrderService.getActivitiesForWorkorder(tenderResponse))
totalAmt += act.getAmt();
return totalAmt;
}
public String getEstimateAmount() {
double totalAmt = 0;
for (final EstimateLineItemsForWP act : workOrderService.getActivitiesForWorksPackage(tenderResponse))
totalAmt += act.getAmt();
return formatter.format(totalAmt);
}
public double getEstimateAmountAfterNego() {
double totalAmt = 0;
for (final EstimateLineItemsForWP act : workOrderService.getActivitiesForWorkorder(tenderResponse))
totalAmt += act.getAmt();
if (tenderResponse != null && tenderResponse.getTenderEstimate() != null
&& tenderResponse.getTenderEstimate().getTenderType() != null
&& tenderResponse.getTenderEstimate().getTenderType().equalsIgnoreCase(percTenderType))
if (tenderResponse.getPercNegotiatedAmountRate() >= 0)
totalAmt = totalAmt + totalAmt * Math.abs(tenderResponse.getPercNegotiatedAmountRate()) / 100;
else
totalAmt = totalAmt - totalAmt * Math.abs(tenderResponse.getPercNegotiatedAmountRate()) / 100;
return totalAmt;
}
@ValidationErrorPage(value = SEARCH_WO)
public String searchWorkOrderDetails() {
final Map<String, Object> criteriaMap = new HashMap<String, Object>();
final List<Object> paramList = new ArrayList<Object>();
if (StringUtils.isNotBlank(status) && !getStatus().equals("-1"))
criteriaMap.put("STATUS", status);
if (StringUtils.isNotBlank(workOrder.getWorkOrderNumber()))
criteriaMap.put("WORKORDER_NO", workOrder.getWorkOrderNumber());
if (StringUtils.isNotBlank(getEstimateNumber()))
criteriaMap.put("ESTIMATE_NO", getEstimateNumber());
if (getDeptId() != null && getDeptId() > 0)
criteriaMap.put("DEPT_ID", getDeptId());
if (StringUtils.isNotBlank(getWpNumber()))
criteriaMap.put("WP_NO", getWpNumber());
if (StringUtils.isNotBlank(getTenderFileNumber()))
criteriaMap.put("TENDER_FILE_NO", getTenderFileNumber());
if (workOrder.getContractor() != null && workOrder.getContractor().getId() != -1)
criteriaMap.put("CONTRACTOR_ID", workOrder.getContractor().getId());
if (fromDate != null && toDate != null && !DateUtils.compareDates(getToDate(), getFromDate()))
addFieldError("enddate", getText("greaterthan.endDate.fromDate"));
if (toDate != null && !DateUtils.compareDates(new Date(), getToDate()))
addFieldError("enddate", getText("greaterthan.endDate.currentdate"));
if (!getFieldErrors().isEmpty())
return SEARCH_WO;
if (fromDate != null && toDate == null)
criteriaMap.put("FROM_DATE", new Date(DateUtils.getFormattedDate(getFromDate(), DATE_FORMAT)));
else if (toDate != null && fromDate == null)
criteriaMap.put("TO_DATE", new Date(DateUtils.getFormattedDate(getToDate(), DATE_FORMAT)));
else if (fromDate != null && toDate != null && getFieldErrors().isEmpty()) {
criteriaMap.put("FROM_DATE", new Date(DateUtils.getFormattedDate(getFromDate(), DATE_FORMAT)));
criteriaMap.put("TO_DATE", new Date(DateUtils.getFormattedDate(getToDate(), DATE_FORMAT)));
}
criteriaMap.put(WorkOrderServiceImpl.SOURCEPAGE, sourcepage);
if ("searchWOForMBCreation".equals(sourcepage))
workOrderList = workOrderService.searchWOForMB(criteriaMap);
else if ("searchWOForBillCreation".equals(sourcepage))
workOrderList = workOrderService.searchWOForBilling(criteriaMap);
else {
List<String> qryObj;
Object[] params;
Long count;
Page resPage;
qryObj = workOrderService.searchWOToPaginatedView(criteriaMap, paramList);
if (paramList.isEmpty()) {
params = null;
count = (Long) persistenceService.find(qryObj.get(0));
final Query qryWithNoParam = persistenceService.getSession().createQuery(qryObj.get(1));
resPage = new Page(qryWithNoParam, page, pageSize);
} else {
params = new Object[paramList.size()];
params = paramList.toArray(params);
count = (Long) persistenceService.find(qryObj.get(0), params);
resPage = persistenceService.findPageBy(qryObj.get(1), page, pageSize, params);
}
pagedResults = new EgovPaginatedList(resPage, count.intValue());
workOrderList = pagedResults != null ? pagedResults.getList() : null;
}
if (!workOrderList.isEmpty())
workOrderList = getPositionAndUser(workOrderList);
if (!("searchWOForBillCreation".equals(sourcepage) || "searchWOForMBCreation".equals(sourcepage)))
pagedResults.setList(workOrderList);
return SEARCH_WO;
}
protected List<WorkOrder> getPositionAndUser(final List<WorkOrder> results) {
final List<WorkOrder> workOrderList = new ArrayList<WorkOrder>();
for (final WorkOrder workOrder : results) {
if (workOrder.getCurrentState() != null)
if (!workOrder.getEgwStatus().getCode().equalsIgnoreCase(WorksConstants.APPROVED)
&& !workOrder.getEgwStatus().getCode().equalsIgnoreCase(WorksConstants.CANCELLED_STATUS)) {
final PersonalInformation emp = employeeServiceOld.getEmployeeforPosition(workOrder.getCurrentState()
.getOwnerPosition());
if (emp != null && StringUtils.isNotBlank(emp.getEmployeeName()))
workOrder.setOwner(emp.getEmployeeName());
}
// workOrder.setWorkOrderAmount(getWorkOrderActvitiesAmount(workOrder));
workOrderList.add(workOrder);
if (workOrder.getEgwStatus() != null && workOrder.getEgwStatus().getCode().equals(WF_APPROVED)) {
final OfflineStatus set_status = (OfflineStatus) persistenceService.findByNamedQuery(
"getmaxStatusByObjectId_Type", workOrder.getId(), workOrder.getId(),
WorkOrder.class.getSimpleName(), WorkOrder.class.getSimpleName());
if (set_status == null)
workOrder.setStatus(workOrder.getEgwStatus().getCode());
else
workOrder.setStatus(set_status.getEgwStatus().getCode());
} else if (workOrder.getEgwStatus() != null)
workOrder.setStatus(workOrder.getEgwStatus().getCode());
final String approved = getApprovedValue();
final String actions = worksService.getWorksConfigValue("WORKORDER_SHOW_ACTIONS");
if (StringUtils.isNotBlank(actions)) {
String setStat = "";
String workCommencedStatus = "";
OfflineStatus lastStatus = null;
workOrder.getWorkOrderActions().addAll(Arrays.asList(actions.split(",")));
if (workOrder.getId() != null && getLastStatus() != null)
lastStatus = worksStatusService.findByNamedQuery(STATUS_OBJECTID, workOrder.getId(),
WO_OBJECT_TYPE, getLastStatus());
if (lastStatus != null || "view".equalsIgnoreCase(setStatus))
setStat = worksService.getWorksConfigValue("WORKS_VIEW_OFFLINE_STATUS_VALUE");
else if (lastStatus == null && StringUtils.isNotBlank(approved) && workOrder.getEgwStatus() != null
&& approved.equals(workOrder.getEgwStatus().getCode()))
setStat = worksService.getWorksConfigValue("WORKS_SETSTATUS_VALUE");
if (StringUtils.isNotBlank(setStat))
workOrder.getWorkOrderActions().add(setStat);
if (lastStatus != null
&& lastStatus.getEgwStatus().getCode().equalsIgnoreCase(WorksConstants.WO_STATUS_WOCOMMENCED)) {
workCommencedStatus = worksService.getWorksConfigValue("WORK_ORDER_NOTICE");
if (StringUtils.isNotBlank(workCommencedStatus))
workOrder.getWorkOrderActions().add(workCommencedStatus);
}
}
}
return workOrderList;
}
public String getApprovedValue() {
return WorksConstants.APPROVED;
}
public String getLastStatus() {
return worksService.getWorksConfigValue(WorksConstants.WORKORDER_LASTSTATUS);
}
public double getWorkOrderActvitiesAmount(final WorkOrder workOrder) {
double totalAmt = 0;
for (final WorkOrderEstimate workOrderEstimate : workOrder.getWorkOrderEstimates())
for (final WorkOrderActivity woAct : workOrderEstimate.getWorkOrderActivities())
totalAmt += woAct.getApprovedAmount();
return totalAmt;
}
public List<WorkflowAction> getValidActions() {
return workOrderWorkflowService.getValidActions(workOrder);
}
public String getPastDate() {
return worksService.getWorksConfigValue("WORK_ORDER_PASTDATE");
}
private String getMBCreationBySelection() {
return worksService.getWorksConfigValue("MB_CREATED_BY_SELECTION");
}
public void getDeptList() {
if (StringUtils.isNotBlank(getMBCreationBySelection())) {
if ("no".equals(getMBCreationBySelection())) {
final List<Department> deptList = worksService.getAllDeptmentsForLoggedInUser();
addDropdownData("deptListForMB", deptList);
} else
addDropdownData("deptListForMB", departmentService.getAllDepartments());
} else
addDropdownData("deptListForMB", Collections.EMPTY_LIST);
}
public String getCreatedBy() {
return worksService.getWorksConfigValue("WORK_ORDER_CREATEDBY");
}
private void populatePreparedByList(final AjaxEstimateAction ajaxEstimateAction,
final boolean executingDeptPopulated) {
if (executingDeptPopulated) {
ajaxEstimateAction.setExecutingDepartment(deptId);
ajaxEstimateAction.usersInExecutingDepartment();
addDropdownData(PREPARED_BY_LIST, ajaxEstimateAction.getUsersInExecutingDepartment());
} else
addDropdownData(PREPARED_BY_LIST, Collections.EMPTY_LIST);
}
private void populateWorkOrderAssignedToList(final AjaxWorkOrderAction ajaxWorkOrderAction,
final boolean executingDeptPopulated) {
if (executingDeptPopulated && deptId > 0) {
ajaxWorkOrderAction.setDepartmentName(departmentService.getDepartmentById(Long.valueOf(deptId)).getName());
ajaxWorkOrderAction.getDesignationByDeptId();
addDropdownData(ASSIGNED_TO_LIST, ajaxWorkOrderAction.getWorkOrderDesigList());
} else
addDropdownData(ASSIGNED_TO_LIST, Collections.EMPTY_LIST);
}
private void populateWorkOrderUsersList1(final AjaxWorkOrderAction ajaxWorkOrderAction, final boolean desgId,
final boolean executingDeptPopulated) {
if (desgId && executingDeptPopulated && deptId > 0) {
ajaxWorkOrderAction.setDesgId(getAssignedTo1());
ajaxWorkOrderAction.setExecutingDepartment(deptId);
ajaxWorkOrderAction.getUsersForDesg();
addDropdownData(ASSIGNED_USER_LIST1, ajaxWorkOrderAction.getUserList());
} else
addDropdownData(ASSIGNED_USER_LIST1, Collections.EMPTY_LIST);
}
private void populateWorkOrderUsersList2(final AjaxWorkOrderAction ajaxWorkOrderAction, final boolean desgId,
final boolean executingDeptPopulated) {
if (desgId && executingDeptPopulated && deptId > 0) {
ajaxWorkOrderAction.setDesgId(getAssignedTo2());
ajaxWorkOrderAction.setExecutingDepartment(deptId);
ajaxWorkOrderAction.getUsersForDesg();
addDropdownData(ASSIGNED_USER_LIST2, ajaxWorkOrderAction.getUserList());
} else
addDropdownData(ASSIGNED_USER_LIST2, Collections.EMPTY_LIST);
}
public String viewWorkOrderNotice() {
String nameOfWO = "";
final Locale LOCALE = new Locale("en", "IN");
final SimpleDateFormat DDMMYYYYFORMATS = new SimpleDateFormat("dd/MM/yyyy", LOCALE);
final Date wOCommencedDate = workOrderService.getWorkCommencedDateByWOId(id);
final String workCommencedDate = DDMMYYYYFORMATS.format(wOCommencedDate);
final String approverName = getApproverName(workOrder);
final List<WorkOrderNoticeEsimateInfo> estimates = getEstimatesForWO(workOrder);
// Setting work order name based on size of estimates for a work order
// if size is 1 then assigning the name to name of abstract estimate
// if size is greater than 1 then assigning the name for work order form
// worksPackage
if (estimates.size() == 1)
nameOfWO = workOrder.getWorkOrderEstimates().get(0).getEstimate().getName();
else
nameOfWO = workOrderService.getWorksPackageName(workOrder.getPackageNumber());
final Map<String, Object> reportParams = new HashMap<String, Object>();
reportParams.put("executingDept", workOrder.getWorkOrderEstimates().get(0).getEstimate()
.getExecutingDepartment().getName());
reportParams.put("workOrderNo", workOrder.getWorkOrderNumber());
reportParams.put("contractorNC", workOrder.getContractor().getName() + " / "
+ workOrder.getContractor().getCode());
reportParams.put("contractPeriod", workOrder.getContractPeriod());
reportParams.put("defectLiability", workOrder.getDefectLiabilityPeriod());
reportParams.put("allottedTo", workOrder.getEngineerIncharge().getName());
reportParams.put("nameOfWO", nameOfWO);
reportParams.put("valueOfWO", NumberUtil.formatNumber(BigDecimal.valueOf(workOrder.getWorkOrderAmount())));
reportParams.put("workCommencedDate", workCommencedDate);
reportParams.put("approverName", approverName);
final ReportRequest reportRequest = new ReportRequest("WorkOrderNotice", estimates, reportParams);
final ReportOutput reportOutput = reportService.createReport(reportRequest);
if (reportOutput != null && reportOutput.getReportOutputData() != null)
workOrderPDF = new ByteArrayInputStream(reportOutput.getReportOutputData());
return WORKORDERNOTICEPDF;
}
protected String getApproverName(final WorkOrder wo) {
String approver = "";
final List<StateHistory> history = wo.getStateHistory();
for (final StateHistory st : history)
if (st.getValue().equalsIgnoreCase(WORKFLOW_ENDS)) {
final PersonalInformation pInfo = employeeServiceOld.getEmployeeforPosition(st.getOwnerPosition());
if (pInfo != null && StringUtils.isNotBlank(pInfo.getName()))
approver = approver + pInfo.getName();
}
return approver;
}
protected List<WorkOrderNoticeEsimateInfo> getEstimatesForWO(final WorkOrder wo) {
final List<WorkOrderNoticeEsimateInfo> woEstimateList = new ArrayList<WorkOrderNoticeEsimateInfo>();
Double woEstimateAmount = 0D;
final Object[] obj = (Object[]) workOrderService.getTenderNegotiationInfo(workOrder.getNegotiationNumber());
final String tenderType = (String) obj[1];
for (final WorkOrderEstimate woe : wo.getWorkOrderEstimates()) {
final WorkOrderNoticeEsimateInfo estimateInfo = new WorkOrderNoticeEsimateInfo();
estimateInfo.setEstimateNumber(woe.getEstimate().getEstimateNumber());
estimateInfo.setWorkName(woe.getEstimate().getName());
estimateInfo.setWorkDescription(woe.getEstimate().getDescription());
if (StringUtils.isNotBlank(tenderType) && tenderType.equalsIgnoreCase(WorksConstants.PERC_TENDER)) {
final Double estimateAmt = woe.getEstimate().getWorkValue();
woEstimateAmount = estimateAmt + estimateAmt * (Double) obj[0] / 100;
} else
for (final WorkOrderActivity woa : woe.getWorkOrderActivities())
woEstimateAmount = woEstimateAmount + woa.getApprovedAmount();
estimateInfo.setEstimateValue(NumberUtil.formatNumber(BigDecimal.valueOf(woEstimateAmount)));
woEstimateList.add(estimateInfo);
}
return woEstimateList;
}
public Double getSecurityDepositConfValue() {
securityDepositConfValue = workOrderService.getSecurityDepositConfValue();
return securityDepositConfValue;
}
public void setSecurityDepositConfValue(final Double securityDepositConfValue) {
this.securityDepositConfValue = securityDepositConfValue;
}
public Double getLabourWelfareFundConfValue() {
labourWelfareFundConfValue = workOrderService.getLabourWelfareFundConfValue();
return labourWelfareFundConfValue;
}
public void setLabourWelfareFundConfValue(final Double labourWelfareFundConfValue) {
this.labourWelfareFundConfValue = labourWelfareFundConfValue;
}
public String getAssignedToRequiredOrNot() {
return worksService.getWorksConfigValue("WORKORDER_ASSIGNEDTO_REQUIRED");
}
public WorkOrder getWorkOrder() {
return workOrder;
}
public void setWorkOrder(final WorkOrder workOrder) {
this.workOrder = workOrder;
}
public String getCreatedBySelection() {
return createdBySelection;
}
public void setCreatedBySelection(final String createdBySelection) {
this.createdBySelection = createdBySelection;
}
public void setWorkOrderService(final WorkOrderService workOrderService) {
this.workOrderService = workOrderService;
}
public void setWorksService(final WorksService worksService) {
this.worksService = worksService;
}
public void setTenderResponseService(final TenderResponseService tenderResponseService) {
this.tenderResponseService = tenderResponseService;
}
public TenderResponse getTenderResponse() {
return tenderResponse;
}
public void setTenderResponse(final TenderResponse tenderResponse) {
this.tenderResponse = tenderResponse;
}
public void setDepartmentService(final DepartmentService departmentService) {
this.departmentService = departmentService;
}
public void setAbstractEstimateService(final AbstractEstimateService abstractEstimateService) {
this.abstractEstimateService = abstractEstimateService;
}
public String getEditableDate() {
return editableDate;
}
public void setEditableDate(final String editableDate) {
this.editableDate = editableDate;
}
public Integer getEmpId() {
return empId;
}
public Collection<EstimateLineItemsForWP> getActivitiesForWorkorderList() {
return tenderResponse.getActivitiesForWorkorder();
}
public void setEmpId(final Integer empId) {
this.empId = empId;
}
public Long getTenderRespId() {
return tenderRespId;
}
public void setTenderRespId(final Long tenderRespId) {
this.tenderRespId = tenderRespId;
}
public List<Designation> getWorkOrderDesigList() {
return workOrderDesigList;
}
public void setWorkOrderDesigList(final List<Designation> workOrderDesigList) {
this.workOrderDesigList = workOrderDesigList;
}
public String getStatus() {
return status;
}
public void setStatus(final String status) {
this.status = status;
}
public void setEisService(final EisUtilService eisService) {
this.eisService = eisService;
}
public Long getAssignedTo1() {
return assignedTo1;
}
public void setAssignedTo1(final Long assignedTo1) {
this.assignedTo1 = assignedTo1;
}
public Long getAssignedTo2() {
return assignedTo2;
}
public void setAssignedTo2(final Long assignedTo2) {
this.assignedTo2 = assignedTo2;
}
public List<WorkOrder> getWorkOrderList() {
return workOrderList;
}
public void setWorkOrderList(final List<WorkOrder> workOrderList) {
this.workOrderList = workOrderList;
}
public Date getFromDate() {
return fromDate;
}
public void setFromDate(final Date fromDate) {
this.fromDate = fromDate;
}
public Date getToDate() {
return toDate;
}
public void setToDate(final Date toDate) {
this.toDate = toDate;
}
/*
* public List<String> getWorkOrderActions() { return workOrderActions ; }
*/
public Map<String, Object> getContractorForApprovedWorkOrder() {
final Map<String, Object> contractorsWithWOList = new HashMap<String, Object>();
if (workOrderService.getContractorsWithWO() != null)
for (final Contractor contractor : workOrderService.getContractorsWithWO())
contractorsWithWOList.put(contractor.getId() + "", contractor.getCode() + " - " + contractor.getName());
return contractorsWithWOList;
}
public Long getWorkOrderId() {
return workOrderId;
}
public void setWorkOrderId(final Long workOrderId) {
this.workOrderId = workOrderId;
}
public Long getId() {
return id;
}
public void setId(final Long id) {
this.id = id;
}
public String getMessageKey() {
return messageKey;
}
public void setWorkOrderWorkflowService(final WorkflowService<WorkOrder> workOrderWorkflowService) {
this.workOrderWorkflowService = workOrderWorkflowService;
}
public String getSetStatus() {
return setStatus;
}
public void setSetStatus(final String setStatus) {
this.setStatus = setStatus;
}
public String getMode() {
return mode;
}
public void setMode(final String mode) {
this.mode = mode;
}
public InputStream getWorkOrderPDF() {
return workOrderPDF;
}
public void setWorkOrderPDF(final InputStream workOrderPDF) {
this.workOrderPDF = workOrderPDF;
}
public ReportService getReportService() {
return reportService;
}
public void setReportService(final ReportService reportService) {
this.reportService = reportService;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(final String employeeName) {
this.employeeName = employeeName;
}
public String getDesignation() {
return designation;
}
public void setDesignation(final String designation) {
this.designation = designation;
}
public String getSourcepage() {
return sourcepage;
}
public void setSourcepage(final String sourcepage) {
this.sourcepage = sourcepage;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(final Long deptId) {
this.deptId = deptId;
}
public void setWorksStatusService(final PersistenceService<OfflineStatus, Long> worksStatusService) {
this.worksStatusService = worksStatusService;
}
public Date getSiteHandOverDate() {
if (id != null) {
final OfflineStatus objStatusForSite = worksStatusService.findByNamedQuery(STATUS_OBJECTID, id, WO_OBJECT_TYPE,
SITE_HAND_OVER);
if (objStatusForSite != null)
return objStatusForSite.getStatusDate();
}
return null;
}
public Date getWorkCommencedDate() {
if (id != null) {
final OfflineStatus objStatusForSite = worksStatusService.findByNamedQuery(STATUS_OBJECTID, id, WO_OBJECT_TYPE,
WORK_COMMENCED);
if (objStatusForSite != null)
return objStatusForSite.getStatusDate();
}
return null;
}
public String getEstimateNumber() {
return estimateNumber;
}
public void setEstimateNumber(final String estimateNumber) {
this.estimateNumber = estimateNumber;
}
public String getWpNumber() {
return wpNumber;
}
public void setWpNumber(final String wpNumber) {
this.wpNumber = wpNumber;
}
public String getTenderFileNumber() {
return tenderFileNumber;
}
public void setTenderFileNumber(final String tenderFileNumber) {
this.tenderFileNumber = tenderFileNumber;
}
public void setPersonalInformationService(final PersonalInformationService personalInformationService) {
this.personalInformationService = personalInformationService;
}
public Long getTenderRespContrId() {
return tenderRespContrId;
}
public void setTenderRespContrId(final Long tenderRespContrId) {
this.tenderRespContrId = tenderRespContrId;
}
public TenderResponseContractors getTenderResponseContractor() {
return tenderResponseContractor;
}
public void setTenderResponseContractor(final TenderResponseContractors tenderResponseContractor) {
this.tenderResponseContractor = tenderResponseContractor;
}
public void setTenderResponseContractorsService(
final PersistenceService<TenderResponseContractors, Long> tenderResponseContractorsService) {
this.tenderResponseContractorsService = tenderResponseContractorsService;
}
public List<WorkOrderActivity> getActionWorkOrderActivities() {
return actionWorkOrderActivities;
}
public void setActionWorkOrderActivities(final List<WorkOrderActivity> actionWorkOrderActivities) {
this.actionWorkOrderActivities = actionWorkOrderActivities;
}
public void setActivityService(final PersistenceService<Activity, Long> activityService) {
this.activityService = activityService;
}
public Collection<WorkOrderActivity> getActionWorkOrderActivityList() {
final Collection<WorkOrderActivity> woActivityList = workOrderService
.getActionWorkOrderActivitiesList(actionWorkOrderActivities);
for (final WorkOrderActivity workOrderActivity : woActivityList) {
workOrderActivity.setActivity(activityService.findById(workOrderActivity.getActivity().getId(), false));
workOrderActivity.setUnAssignedQuantity(workOrderActivity.getActivity().getQuantity()
- getAssignedQuantity(workOrderActivity.getActivity().getId(), workOrder.getNegotiationNumber()));
}
return woActivityList;
}
public List<WorkOrderActivity> getWoActivities() {
return woActivities;
}
public void setWoActivities(final List<WorkOrderActivity> woActivities) {
this.woActivities = woActivities;
}
public void setWorkOrderActivities(final WorkOrder workorder) {
woActivities.clear();
for (final WorkOrderEstimate workOrderEstimate : workorder.getWorkOrderEstimates())
if (workOrderEstimate != null)
for (final WorkOrderActivity workOrderActivity : workOrderEstimate.getWorkOrderActivities()) {
workOrderActivity.setUnAssignedQuantity(workOrderActivity.getActivity().getQuantity()
- getAssignedQuantity(workOrderActivity.getActivity().getId(), workOrderActivity
.getWorkOrderEstimate().getWorkOrder().getNegotiationNumber()));
woActivities.add(workOrderActivity);
}
}
@Override
public void validate() {
final Collection<WorkOrderActivity> woActivityList = workOrderService
.getActionWorkOrderActivitiesList(actionWorkOrderActivities);
final String contractPrd = workOrder.getContractPeriod().toString();
if (parameters.get("actionName") != null) {
final String actionName = parameters.get("actionName")[0];
if (!actionName.equalsIgnoreCase("reject")) {
if (workOrder.getEgwStatus() == null && id == null && !"searchWOForMBCreation".equals(sourcepage)
&& !"searchWOForBillCreation".equals(sourcepage) && !"cancelWO".equals(sourcepage)
&& (estimateId != null || tenderRespId != null && tenderRespContrId != null)
&& (SAVE_ACTION.equals(actionName) || "submit_for_approval".equals(actionName))) {
validateMandatoryFields();
validateContractPeriod(contractPrd);
}
if (workOrder.getEgwStatus() != null
&& (workOrder.getEgwStatus().getCode().equalsIgnoreCase("NEW") || workOrder.getEgwStatus()
.getCode().equalsIgnoreCase("REJECTED"))
&& id != null) {
validateMandatoryFields();
if (contractPeriodCutOffDate != null) {
final Date createdDate = workOrder.getCreatedDate() == null ? new Date() : workOrder
.getCreatedDate();
if (createdDate.after(contractPeriodCutOffDate))
validateContractPeriod(contractPrd);
}
}
if (!actionName.equalsIgnoreCase("cancel"))
for (final WorkOrderActivity workOrderActivity : woActivityList) {
if (workOrderActivity.getApprovedRate() == 0.0)
addActionError(getText("WorkOrderActivity.approvedRate.non.negative"));
if (workOrderActivity.getApprovedQuantity() == 0.0)
addActionError(getText("WorkOrderActivity.approvedQuantity.non.negative"));
}
validateDLP();
}
}
if (workOrder.getEgwStatus() == null && id == null && !"searchWOForMBCreation".equals(sourcepage)
&& !"searchWOForBillCreation".equals(sourcepage) && !"cancelWO".equals(sourcepage))
if (tenderRespId != null && tenderRespContrId != null)
if (tenderResponse.getTenderResponseContractors().size() > 1)
multipleContractorsValidation();
else
singleContractorValidation();
}
private void validateContractPeriod(final String contractPrd) {
if (StringUtils.isBlank(contractPrd))
addActionError(getText("contractPeriod.null"));
if (StringUtils.isNotBlank(contractPrd) && Integer.parseInt(contractPrd) <= 0)
addActionError(getText("contractPeriod.greater.than.zero"));
}
private void validateMandatoryFields() {
if (workOrder.getWorkOrderDate() == null)
addActionError(getText("workorder.date.null"));
if (workOrder.getEmdAmountDeposited() == 0.00)
addActionError(getText("workOrder.emdAmount.invalid"));
}
private void singleContractorValidation() {
if (id == null) {
final WorkOrder woObj = (WorkOrder) persistenceService.find(
"from WorkOrder wo where wo.negotiationNumber = ? and wo.egwStatus.code!='CANCELLED' ",
workOrder.getNegotiationNumber());
if (woObj != null)
addActionError(getText("workOrder.tenderNegotiation.uniqueCheck.message"));
}
}
private void multipleContractorsValidation() {
if (id == null) {
final String woaQuery = "select sum(woa.approvedQuantity) from WorkOrderActivity woa where woa.workOrderEstimate.workOrder.negotiationNumber=? and woa.workOrderEstimate.workOrder.egwStatus.code !='CANCELLED' ";
final Double countWoaIds = (Double) persistenceService.find(woaQuery, workOrder.getNegotiationNumber());
final String traQuery = "select sum(tra.negotiatedQuantity) from TenderResponseActivity tra where tra.tenderResponse.negotiationNumber = ? and tra.tenderResponse.egwStatus.code != 'CANCELLED'";
final Double countTraIds = (Double) persistenceService.find(traQuery, workOrder.getNegotiationNumber());
if (countWoaIds != null && countTraIds != null && countTraIds != 0 && countWoaIds != 0
&& countWoaIds >= countTraIds)
addActionError(getText("workOrder.tenderNegotiation.uniqueCheck.multipleContractor.message"));
}
}
private void validateDLP() {
if (workOrder.getDefectLiabilityPeriod() <= 0.0)
addActionError(getText("defectLiabilityPeriod.validate"));
}
private double getAssignedQuantity(final Long activityId, final String negotiationNumber) {
final Object[] params = new Object[] { negotiationNumber, WorksConstants.CANCELLED_STATUS, activityId };
final Double assignedQty = (Double) getPersistenceService().findByNamedQuery("getAssignedQuantityForActivity",
params);
if (assignedQty == null)
return 0.0d;
else
return assignedQty.doubleValue();
}
@ValidationErrorPage(value = SEARCH_WO)
public String cancelApprovedWO() {
final WorkOrder workOrder = workOrderService.findById(workOrderId, false);
validateARFForWO(workOrder);
workOrder
.setEgwStatus(egwStatusHibernateDAO.getStatusByModuleAndCode(WO_OBJECT_TYPE, WorksConstants.CANCELLED_STATUS));
if (workOrder.getCurrentState() != null) {
final PersonalInformation prsnlInfo = employeeServiceOld.getEmpForUserId(worksService
.getCurrentLoggedInUserId());
String empName = "";
if (prsnlInfo.getEmployeeFirstName() != null)
empName = prsnlInfo.getEmployeeFirstName();
if (prsnlInfo.getEmployeeLastName() != null)
empName = empName.concat(" ").concat(prsnlInfo.getEmployeeLastName());
if (cancelRemarks != null && StringUtils.isNotBlank(cancelRemarks))
cancellationReason.concat(" : ").concat(cancelRemarks).concat(". ")
.concat(getText("workOrder.cancel.cancelledby")).concat(": ").concat(empName);
else
cancellationReason.concat(". ").concat(getText("workOrder.cancel.cancelledby")).concat(": ")
.concat(empName);
// TODO - The setter methods of variables in State.java are
// protected. Need to alternative way to solve this issue.
// Set the status and workflow state to cancelled
/****
* State oldEndState = workOrder.getCurrentState(); Position owner = prsnlInfo.getAssignment(new
* Date()).getPosition(); oldEndState.setCreatedBy(prsnlInfo.getUserMaster());
* oldEndState.setModifiedBy(prsnlInfo.getUserMaster()); oldEndState.setCreatedDate(new Date());
* oldEndState.setModifiedDate(new Date()); oldEndState.setOwner(owner);
* oldEndState.setValue(WorksConstants.CANCELLED_STATUS.toString()); oldEndState.setText1(cancellationText);
* workOrder.changeState("END", owner, null);
****/
}
workOrderNo = workOrder.getWorkOrderNumber();
messageKey = workOrderNo + " : " + getText("workorder.cancel");
return SUCCESS;
}
/*
* Validate is there any Advance Requisition forms created for Estimates in this work order. If yes then throw proper
* validation message.
*/
private void validateARFForWO(final WorkOrder workOrder) {
String arfNo = "";
String estimateNo = "";
for (final WorkOrderEstimate woe : workOrder.getWorkOrderEstimates())
for (final ContractorAdvanceRequisition arf : woe.getContractorAdvanceRequisitions()) {
if (!arf.getStatus()
.getCode()
.equalsIgnoreCase(
ContractorAdvanceRequisition.ContractorAdvanceRequisitionStatus.CANCELLED.toString()))
if (!arfNo.equals(""))
arfNo = arfNo.concat(", ARF#:").concat(arf.getAdvanceRequisitionNumber());
else
arfNo = arfNo.concat(arf.getAdvanceRequisitionNumber());
if (!arf.getWorkOrderEstimate().getEstimate().getEgwStatus().getCode()
.equalsIgnoreCase(AbstractEstimate.EstimateStatus.CANCELLED.toString()))
if (!estimateNo.equals(""))
estimateNo = estimateNo.concat(", ").concat(
arf.getWorkOrderEstimate().getEstimate().getEstimateNumber());
else
estimateNo = estimateNo.concat(arf.getWorkOrderEstimate().getEstimate().getEstimateNumber());
}
if (!arfNo.equals(""))
throw new ValidationException(Arrays.asList(new ValidationError("cancelWO.arf.created.message", getText(
"cancelWO.arf.created.message", new String[] { arfNo, estimateNo }))));
}
public void setUserService(final UserService userService) {
this.userService = userService;
}
public String getPercTenderType() {
return percTenderType;
}
public String getTenderResponseType() {
return tenderResponseType;
}
public Double getActivityAssignedAmt() {
return activityAssignedAmt;
}
public void setActivityAssignedAmt(final Double activityAssignedAmt) {
this.activityAssignedAmt = activityAssignedAmt;
}
public EgovPaginatedList getPagedResults() {
return pagedResults;
}
public void setPagedResults(final EgovPaginatedList pagedResults) {
this.pagedResults = pagedResults;
}
public String getCancellationReason() {
return cancellationReason;
}
public void setCancellationReason(final String cancellationReason) {
this.cancellationReason = cancellationReason;
}
public String getCancelRemarks() {
return cancelRemarks;
}
public void setCancelRemarks(final String cancelRemarks) {
this.cancelRemarks = cancelRemarks;
}
public String getWorkOrderNo() {
return workOrderNo;
}
public void setWorkOrderNo(final String workOrderNo) {
this.workOrderNo = workOrderNo;
}
public String getWoStatus() {
return woStatus;
}
public void setWoStatus(final String woStatus) {
this.woStatus = woStatus;
}
public Integer getPage() {
return page;
}
public Integer getPageSize() {
return pageSize;
}
public void setPage(final Integer page) {
this.page = page;
}
public void setPageSize(final Integer pageSize) {
this.pageSize = pageSize;
}
public Date getContractPeriodCutOffDate() {
return contractPeriodCutOffDate;
}
public void setContractPeriodCutOffDate(final Date contractPeriodCutOffDate) {
this.contractPeriodCutOffDate = contractPeriodCutOffDate;
}
public Integer getDefaultPreparedBy() {
return defaultPreparedBy;
}
public Long getDefaultDepartmentId() {
return defaultDepartmentId;
}
public String getLoggedInUserEmployeeCode() {
return loggedInUserEmployeeCode;
}
public Long getEstimateId() {
return estimateId;
}
public void setEstimateId(final Long estimateId) {
this.estimateId = estimateId;
}
public AbstractEstimate getAbstractEstimate() {
return abstractEstimate;
}
public void setAbstractEstimate(final AbstractEstimate abstractEstimate) {
this.abstractEstimate = abstractEstimate;
}
public Boolean getIsWorkCommenced() {
return isWorkCommenced;
}
public void setIsWorkCommenced(final Boolean isWorkCommenced) {
this.isWorkCommenced = isWorkCommenced;
}
public Integer getReportId() {
return reportId;
}
public void setReportId(final Integer reportId) {
this.reportId = reportId;
}
}