/*
* 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 java.text.DecimalFormat;
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.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
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.interceptor.validation.SkipValidation;
import org.egov.commons.CFinancialYear;
import org.egov.commons.EgwStatus;
import org.egov.commons.dao.EgwStatusHibernateDAO;
import org.egov.eis.entity.Assignment;
import org.egov.eis.service.AssignmentService;
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.validation.exception.ValidationError;
import org.egov.infra.validation.exception.ValidationException;
import org.egov.infra.web.struts.actions.SearchFormAction;
import org.egov.infra.web.struts.annotation.ValidationErrorPage;
import org.egov.infra.workflow.entity.WorkflowAction;
import org.egov.infra.workflow.service.WorkflowService;
import org.egov.infstr.search.SearchQuery;
import org.egov.infstr.search.SearchQueryHQL;
import org.egov.infstr.services.PersistenceService;
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.models.masters.Contractor;
import org.egov.works.models.tender.NegotiationNumberGenerator;
import org.egov.works.models.tender.OfflineStatus;
import org.egov.works.models.tender.TenderEstimate;
import org.egov.works.models.tender.TenderHeader;
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.tender.TenderResponseQuotes;
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.TenderResponseService;
import org.egov.works.services.WorksPackageService;
import org.egov.works.services.WorksService;
import org.egov.works.utils.DateConversionUtil;
import org.egov.works.utils.WorksConstants;
import org.egov.works.web.actions.estimate.AjaxEstimateAction;
import org.springframework.beans.factory.annotation.Autowired;
@ParentPackage("egov")
@Result(name = TenderNegotiationAction.NEW, location = "tenderNegotiation-new.jsp")
public class TenderNegotiationAction extends SearchFormAction {
private static final long serialVersionUID = 1705982410378688424L;
private static final Logger logger = Logger.getLogger(TenderNegotiationAction.class);
private TenderResponseService tenderResponseService;
private PersistenceService<TenderHeader, Long> tenderHeaderService;
private AbstractEstimateService abstractEstimateService;
private NegotiationNumberGenerator negotiationNumberGenerator;
private TenderResponse tenderResponse = new TenderResponse();
private AbstractEstimate abstractEstimate;
private WorksPackage worksPackage;
private TenderHeader tenderHeader = new TenderHeader();
private TenderEstimate tenderEstimate = new TenderEstimate();
private WorkflowService<TenderResponse> workflowService;
private WorksPackageService workspackageService;
private String messageKey;
private String designation;
private Long estimateId;
private Long worksPackageId;
private String tenderType;
@Autowired
private EgwStatusHibernateDAO egwStatusHibernateDAO;
@Autowired
private UserService userService;
private static final String PREPARED_BY_LIST = "preparedByList";
private static final String DEPARTMENT_LIST = "departmentList";
private List<TenderResponseActivity> actionTenderResponseActivities = new LinkedList<TenderResponseActivity>();
private List<TenderResponseContractors> actionTenderResponseContractors = new LinkedList<TenderResponseContractors>();
@Autowired
private DepartmentService departmentService;
private static final String OBJECT_TYPE = "TenderResponseContractors";
private PersonalInformationService personalInformationService;
private Long contractorId;
private String negotiationNumber;
private String negoNumber;
private Date negotiationDate;
private String wpYear;
private Long deptId;
private Integer departmentId;
private String estimateNumber;
private String projectCode;
private String tenderSource;
private String mode;
private String status;
private WorksService worksService;
private String employeeName;
private String designationNegotiation;
private static final String SAVE_ACTION = "save";
private static final String SOURCE_INBOX = "inbox";
private static final String VALIDATION_PREPAREDBY = "tenderResponse.negotiationPreparedBy";
private static final String VALIDATION_PREPAREDBY_ERROR = "tenderResponse.negotiationPreparedBy.null";
private static final String ACTION_NAME = "actionName";
private String sourcepage = "";
@Autowired
private AssignmentService assignmentService;
@Autowired
private EmployeeServiceOld employeeServiceOld;
private String nsActionName;
private String option;
private Integer negotiationStatusId;
private Integer negotiationStatusApprovedById;
private Long tenderRespId;
private Date approvedDateHidden;
public final static String APPROVED = "APPROVED";
public final static String REJECTED = "REJECTED";
public final static String NEWNs = "NEW";
private String errorType = "";
private WorkOrder workOrder = new WorkOrder();
public final static String TENDERRESPONSE_CONTRACTOR = "tenderResponse.contractor";
public final static String TENDERRESPONSE_CONTRACTOR_NULL = "tenderResponse.contractor.null";
private Integer statusIdValue;
private String currentApproverName;
private String currentStatus;
private Date currentApprovedDate;
private String currentApprovedDateStr = "";
private static final String SOURCE_SEARCH = "search";
private final DecimalFormat formatter = new DecimalFormat("0.00");
private String createdBySelection = "no";
private String editableDate = "yes";
private Double emdAmountDeposited;
private Double securityDeposit;
private Double labourWelfareFund;
private Integer workOrderInchargeId;
private String setStatus;
private String wpNumber;
private Date fromDate;
private Date toDate;
private String tenderCretedBy;
private String tenderFileNumber;
private Double sorPerDiff;
private OfflineStatus setStatusObj = new OfflineStatus();
private final static String TENDER_ACCEPTANCE_NOTE = "acceptanceNote";
private PersistenceService<Contractor, Long> contractorService;
private final static String CONTRACTOR_LIST = "contractorList";
private List<String> tenderTypeList;
private PersistenceService<OfflineStatus, Long> worksStatusService;
private static final String STATUS_OBJECTID = "getStatusDateByObjectId_Type_Desc";
private static final String SEARCH_NEGOTIATION_FOR_WO = "searchNegotiationForWO";
private String cancellationReason;
private String cancelRemarks;
private String loggedInUserEmployeeCode;
private EisUtilService eisService;
private Map<String, String> tenderInvitationTypeMap = new LinkedHashMap<String, String>();
public TenderResponse getTenderResponse() {
return tenderResponse;
}
public Double getEmdAmountDeposited() {
if (emdAmountDeposited == null)
emdAmountDeposited = new Double("0.0");
return emdAmountDeposited;
}
public void setEmdAmountDeposited(final Double emdAmountDeposited) {
this.emdAmountDeposited = emdAmountDeposited;
}
public Double getSecurityDeposit() {
if (securityDeposit == null)
try {
securityDeposit = new Double(worksService.getWorksConfigValue("SECURITY_DEPOSIT_MULTIPLIER"))
.doubleValue() / 100 * abstractEstimate.getWorkValueIncludingTaxes().getValue();
securityDeposit = new Double(formatter.format(securityDeposit));
} catch (final Exception e) {
securityDeposit = 0.0d;
logger.info("exception " + e);
}
return securityDeposit;
}
public void setSecurityDeposit(final Double securityDeposit) {
this.securityDeposit = securityDeposit;
}
protected PersonalInformation getEmployee() {
if (tenderResponse.getNegotiationPreparedBy() == null)
return employeeServiceOld.getEmpForUserId(worksService.getCurrentLoggedInUserId());
else
return tenderResponse.getNegotiationPreparedBy();
}
public Double getLabourWelfareFund() {
if (labourWelfareFund == null)
try {
labourWelfareFund = new Double(worksService.getWorksConfigValue("LWF_MULTIPLIER")).doubleValue() / 100
* abstractEstimate.getWorkValueIncludingTaxes().getValue();
labourWelfareFund = new Double(formatter.format(labourWelfareFund));
} catch (final Exception e) {
labourWelfareFund = 0.0d;
logger.info("exception " + e);
}
return labourWelfareFund;
}
public void setLabourWelfareFund(final Double labourWelfareFund) {
this.labourWelfareFund = labourWelfareFund;
}
public TenderNegotiationAction() {
addRelatedEntity("contractor", Contractor.class);
addRelatedEntity("negotiationPreparedBy", PersonalInformation.class);
}
@SkipValidation
public String edit() {
if (SOURCE_INBOX.equalsIgnoreCase(sourcepage)) {
if (userService != null) {
final User user = userService.getUserById(worksService.getCurrentLoggedInUserId());
final boolean isValidUser = worksService.validateWorkflowForUser(tenderResponse, user);
if (isValidUser)
throw new ApplicationRuntimeException("Error: Invalid Owner - No permission to view this page.");
}
} else if (StringUtils.isEmpty(sourcepage))
sourcepage = "search";
if (SOURCE_INBOX.equals(getSourcepage())) {
if (tenderResponse.getTenderEstimate().getAbstractEstimate() != null)
abstractEstimate = abstractEstimateService.findById(tenderResponse.getTenderEstimate()
.getAbstractEstimate().getId(), false);
if (tenderResponse.getTenderEstimate().getWorksPackage() != null)
worksPackage = workspackageService.findById(tenderResponse.getTenderEstimate().getWorksPackage()
.getId(), false);
tenderHeader = tenderHeaderService.findById(tenderResponse.getTenderEstimate().getTenderHeader().getId(),
false);
tenderType = tenderResponse.getTenderEstimate().getTenderType();
}
if (getAssignment(tenderResponse.getNegotiationPreparedBy()) != null) {
setDesignationNegotiation(getAssignment(tenderResponse.getNegotiationPreparedBy()).getDesignation()
.getName());
setDeptId(getAssignment(tenderResponse.getNegotiationPreparedBy()).getDepartment().getId());
}
final List<Contractor> contractorList = new ArrayList<Contractor>();
for (final TenderResponseContractors tenderResponseContractors : tenderResponse.getTenderResponseContractors())
contractorList.add(tenderResponseContractors.getContractor());
addDropdownData(CONTRACTOR_LIST, contractorList);
return EDIT;
}
/*
* (non-Javadoc)
* @ return String
*/
@ValidationErrorPage(value = "searchNegotiationPage")
public String searchNegotiation() {
return "searchNegotiationPage";
}
@Override
public Object getModel() {
return tenderResponse;
}
@Override
public void prepare() {
final AjaxTenderNegotiationAction ajaxTenderNegotiationAction = new AjaxTenderNegotiationAction();
ajaxTenderNegotiationAction.setPersistenceService(getPersistenceService());
ajaxTenderNegotiationAction.setAssignmentService(assignmentService);
ajaxTenderNegotiationAction.setPersonalInformationService(personalInformationService);
final AjaxEstimateAction ajaxEstimateAction = new AjaxEstimateAction();
ajaxEstimateAction.setPersistenceService(getPersistenceService());
ajaxEstimateAction.setAssignmentService(assignmentService);
ajaxEstimateAction.setAbstractEstimateService(abstractEstimateService);
ajaxEstimateAction.setEisService(eisService);
tenderResponseService.setPersonalInformationService(personalInformationService);
if (StringUtils.isNotBlank(getPastDate()))
setEditableDate(getPastDate());
if (negoNumber != null && StringUtils.isNotBlank(negoNumber)) {
tenderResponse = tenderResponseService.find(
"from TenderResponse tr where tr.negotiationNumber =? and tr.egwStatus.code = 'APPROVED'",
negoNumber);
id = tenderResponse.getId();
tenderHeader = tenderResponse.getTenderEstimate().getTenderHeader();
worksPackageId = tenderResponse.getTenderEstimate().getWorksPackage().getId();
}
if (estimateId != null)
abstractEstimate = abstractEstimateService.findById(estimateId, false);
if (worksPackageId != null) {
worksPackage = workspackageService.findById(worksPackageId, false);
final String status = worksService.getWorksConfigValue("WORKSPACKAGE_STATUS");
String objType = getTenderSource();
if (objType != null && objType.equals("package"))
objType = "WorksPackage";
final Long objId = getWorksPackageId();
if (StringUtils.isNotBlank(status)) {
setStatusObj = (OfflineStatus) getPersistenceService().findByNamedQuery(
"getStatusDateByObjectId_Type_Desc", objId, objType, status);
if (setStatusObj != null)
tenderHeader.setTenderDate(setStatusObj.getStatusDate());
}
}
if (id != null) {
tenderResponse = tenderResponseService.findById(id, false);
tenderHeader = tenderHeaderService.findById(tenderHeader.getId(), false);
if (mode != null && (mode.equalsIgnoreCase("view") || mode.equalsIgnoreCase(SOURCE_SEARCH)))
tenderType = tenderResponse.getTenderEstimate().getTenderType();
if (tenderResponse.getTenderEstimate().getAbstractEstimate() != null)
setTenderSource("estimate");
if (tenderResponse.getTenderEstimate().getWorksPackage() != null)
setTenderSource("package");
}
final Assignment latestAssignment = abstractEstimateService.getLatestAssignmentForCurrentLoginUser();
if (latestAssignment != null) {
tenderResponse.setWorkflowDepartmentId(abstractEstimateService.getLatestAssignmentForCurrentLoginUser()
.getDepartment().getId());
if (tenderResponse.getNegotiationPreparedBy() == null) {
setDesignationNegotiation(latestAssignment.getDesignation().getName());
loggedInUserEmployeeCode = latestAssignment.getEmployee().getCode();
} else
loggedInUserEmployeeCode = tenderResponse.getNegotiationPreparedBy().getEmployeeCode();
}
if (StringUtils.isNotBlank(getCreatedBy()) && "yes".equalsIgnoreCase(getCreatedBy())) {
setCreatedBySelection(getCreatedBy());
addDropdownData(DEPARTMENT_LIST, departmentService.getAllDepartments());
populatePreparedByList(ajaxEstimateAction, deptId != null);
} else {
if (id != null)
worksPackage = tenderResponse.getTenderEstimate().getWorksPackage();
if (worksPackage != null) {
addDropdownData(DEPARTMENT_LIST, Arrays.asList(worksPackage.getDepartment()));
populatePreparedByList(ajaxEstimateAction, worksPackage.getDepartment().getId() != null);
tenderResponse.setNegotiationPreparedBy(getEmployee());
}
}
final List departmentList = departmentService.getAllDepartments();
if (sourcepage != null && sourcepage.equalsIgnoreCase(SEARCH_NEGOTIATION_FOR_WO))
addDropdownData("searchDepartmentList", worksService.getAllDeptmentsForLoggedInUser());
else
addDropdownData("searchDepartmentList", departmentList);
super.prepare();
setupDropdownDataExcluding("contractor", "negotiationPreparedBy", "");
addDropdownData("executingDepartmentList", departmentList);
tenderTypeList = worksService.getTendertypeList();
addDropdownData("tenderTypeList", tenderTypeList);
if (StringUtils.isNotBlank(worksService.getWorksConfigValue("SOR_PERCENTAGE_DIFF")))
sorPerDiff = Double.valueOf(worksService.getWorksConfigValue("SOR_PERCENTAGE_DIFF"));
setTenderCretedBy(worksService.getWorksConfigValue("ESTIMATE_OR_WP_SEARCH_REQ"));
final List<Contractor> contractorList = new ArrayList<Contractor>();
for (final TenderResponseContractors tenderResponseContractors : tenderResponseService
.getActionTenderResponseContractorsList(actionTenderResponseContractors))
contractorList.add(tenderResponseContractors.getContractor());
addDropdownData(CONTRACTOR_LIST, contractorList);
}
protected void populatePreparedByList(final AjaxEstimateAction ajaxEstimateAction, final boolean departID) {
if (departID) {
ajaxEstimateAction.setExecutingDepartment(worksPackage.getDepartment().getId());
if (StringUtils.isNotBlank(loggedInUserEmployeeCode))
ajaxEstimateAction.setEmployeeCode(loggedInUserEmployeeCode);
ajaxEstimateAction.usersInExecutingDepartment();
addDropdownData(PREPARED_BY_LIST, ajaxEstimateAction.getUsersInExecutingDepartment());
} else
addDropdownData(PREPARED_BY_LIST, Collections.EMPTY_LIST);
}
@Override
public String execute() {
return SUCCESS;
}
@SkipValidation
@Action(value = "/tender/tenderNegotiation-newform")
public String newform() {
setDeptId(worksPackage.getDepartment().getId());
return NEW;
}
protected Assignment getAssignment(final PersonalInformation pi) {
if (tenderResponse.getNegotiationPreparedBy() == null)
return employeeServiceOld.getAssignmentByEmpAndDate(new Date(), pi.getIdPersonalInformation());
else
return employeeServiceOld.getAssignmentByEmpAndDate(new Date(), tenderResponse.getNegotiationPreparedBy()
.getIdPersonalInformation());
}
public String getCreatedBy() {
return worksService.getWorksConfigValue("TENDER_NEGOTIATION_CREATED_BY_SELECTION");
}
public String getPastDate() {
return worksService.getWorksConfigValue("TENDER_NEGOTIATION_DATE_SELECTION");
}
/**
* Method to check for valid Tender date. Tender date should be greater than Admin approval date and less than current date
*
* @return boolean
*/
private boolean validTenderDate() {
if (abstractEstimate != null)
return abstractEstimate != null
&& tenderHeader != null
&& tenderHeader.getTenderDate() != null
&& abstractEstimate.getCurrentState().getCreatedDate() != null
&& abstractEstimate.getCurrentState().getValue().equalsIgnoreCase(WorksConstants.END)
&& !DateConversionUtil.isBeforeByDate(tenderHeader.getTenderDate(), abstractEstimate
.getCurrentState().getCreatedDate())
&& !DateConversionUtil.isBeforeByDate(new Date(), tenderHeader.getTenderDate());
if (worksPackage != null)
return worksPackage != null
&& tenderHeader != null
&& tenderHeader.getTenderDate() != null
&& worksPackage.getCurrentState().getCreatedDate() != null
&& worksPackage.getEgwStatus().getCode()
.equalsIgnoreCase(WorksPackage.WorkPacakgeStatus.APPROVED.toString())
&& !DateConversionUtil.isBeforeByDate(tenderHeader.getTenderDate(), worksPackage.getWpDate())
&& !DateConversionUtil.isBeforeByDate(new Date(), tenderHeader.getTenderDate());
return Boolean.TRUE;
}
public String save() {
if (tenderResponse != null
&& (tenderResponse.getEgwStatus() == null
|| NEW.equalsIgnoreCase(tenderResponse.getEgwStatus().getCode()) || REJECTED
.equalsIgnoreCase(tenderResponse.getEgwStatus().getCode())))
tenderResponse.getTenderResponseContractors().clear();
actionTenderResponseContractors = (List) tenderResponseService
.getActionTenderResponseContractorsList(actionTenderResponseContractors);
if (tenderResponse != null
&& !actionTenderResponseContractors.isEmpty()
&& actionTenderResponseContractors.get(0) != null
&& actionTenderResponseContractors.get(0).getContractor() != null
&& (actionTenderResponseContractors.get(0).getContractor().getId() == null
|| actionTenderResponseContractors.get(0).getContractor().getId() == 0 || actionTenderResponseContractors
.get(0).getContractor().getId() == -1))
throw new ValidationException(Arrays.asList(new ValidationError(TENDERRESPONSE_CONTRACTOR,
TENDERRESPONSE_CONTRACTOR_NULL)));
else if (tenderResponse != null && !actionTenderResponseContractors.isEmpty()
&& actionTenderResponseContractors.get(0) != null
&& actionTenderResponseContractors.get(0).getContractor() == null)
throw new ValidationException(Arrays.asList(new ValidationError(TENDERRESPONSE_CONTRACTOR,
TENDERRESPONSE_CONTRACTOR_NULL)));
if (!validTenderDate()) {
if (abstractEstimate != null)
throw new ValidationException(Arrays.asList(new ValidationError("tenderHeader.tenderDate.invalid",
"tenderHeader.tenderDate.invalid")));
if (worksPackage != null)
throw new ValidationException(
Arrays.asList(new ValidationError("tenderHeader.tenderDate.workspackage.invalid",
"tenderHeader.tenderDate.workspackage.invalid")));
}
if (validTenderNo())
throw new ValidationException(Arrays.asList(new ValidationError("tenderHeader.tenderNo.isunique",
"tenderHeader.tenderNo.isunique")));
if (tenderResponse != null
&& tenderResponse.getNegotiationPreparedBy() != null
&& (tenderResponse.getNegotiationPreparedBy().getIdPersonalInformation() == null
|| tenderResponse.getNegotiationPreparedBy().getIdPersonalInformation() == 0 || tenderResponse
.getNegotiationPreparedBy().getIdPersonalInformation() == -1)) {
logger.info("2--- inside save and validation err");
throw new ValidationException(Arrays.asList(new ValidationError(VALIDATION_PREPAREDBY,
VALIDATION_PREPAREDBY_ERROR)));
} else if (tenderResponse != null && tenderResponse.getNegotiationPreparedBy() == null) {
logger.info("3--- inside save and validation err");
throw new ValidationException(Arrays.asList(new ValidationError(VALIDATION_PREPAREDBY,
VALIDATION_PREPAREDBY_ERROR)));
}
CFinancialYear financialYear = null;
if (tenderResponse != null) {
financialYear = abstractEstimateService.getCurrentFinancialYear(tenderResponse.getNegotiationDate());
if (tenderResponse.getEgwStatus() == null
|| REJECTED.equalsIgnoreCase(tenderResponse.getEgwStatus().getCode())
|| NEW.equalsIgnoreCase(tenderResponse.getEgwStatus().getCode()))
tenderResponse.getTenderResponseActivities().clear();
}
if (tenderResponse.getEgwStatus() == null || REJECTED.equalsIgnoreCase(tenderResponse.getEgwStatus().getCode())
|| NEW.equalsIgnoreCase(tenderResponse.getEgwStatus().getCode())) {
populateTenderResponseContractors();
populateTenderResponseActivities();
}
final List<Contractor> contractorList = new ArrayList<Contractor>();
for (final TenderResponseContractors tenderResponseContractors : tenderResponse.getTenderResponseContractors())
contractorList.add(tenderResponseContractors.getContractor());
addDropdownData(CONTRACTOR_LIST, contractorList);
saveTender();
tenderResponse.setTenderEstimate(tenderHeader.getTenderEstimates().get(0));
String actionName = "";
if (parameters.get(ACTION_NAME) != null && parameters.get(ACTION_NAME)[0] != null)
actionName = parameters.get(ACTION_NAME)[0];
try {
setNegotiationNumber(tenderResponse, financialYear);
tenderHeaderService.persist(tenderHeader);
if (SAVE_ACTION.equals(parameters.get(ACTION_NAME)[0]) && tenderResponse.getEgwStatus() == null)
tenderResponse.setEgwStatus(egwStatusHibernateDAO.getStatusByModuleAndCode("TenderResponse", "NEW"));
tenderResponse = tenderResponseService.persist(tenderResponse);
}
catch (final ValidationException sequenceException) {
final List<ValidationError> errorList = sequenceException.getErrors();
for (final ValidationError error : errorList)
if (error.getMessage().contains("DatabaseSequenceFirstTimeException")) {
prepare();
if (tenderResponse != null)
tenderResponse.getTenderResponseContractors().clear();
actionTenderResponseContractors = (List) tenderResponseService
.getActionTenderResponseContractorsList(actionTenderResponseContractors);
if (tenderResponse != null) {
tenderResponse.getTenderResponseActivities().clear();
financialYear = abstractEstimateService.getCurrentFinancialYear(tenderResponse
.getNegotiationDate());
}
populateTenderResponseContractors();
populateTenderResponseActivities();
throw new ValidationException(Arrays.asList(new ValidationError("error", error.getMessage())));
}
}
// tenderResponse = tenderResponseService.persist(tenderResponse);
// calling workflow api
if (actionName != null)
tenderResponse = workflowService.transition(actionName, tenderResponse,
tenderResponse.getWorkflowapproverComments());
tenderResponse = tenderResponseService.persist(tenderResponse);
if (tenderResponse.getEgwStatus() != null && APPROVED.equalsIgnoreCase(tenderResponse.getEgwStatus().getCode()))
messageKey = "tenderResponse.approved";
else
messageKey = "tenderNegotiation.save.success";
addActionMessage(getText(messageKey, messageKey));
getDesignation(tenderResponse);
if (SAVE_ACTION.equals(actionName))
sourcepage = "inbox";
return SAVE_ACTION.equals(actionName) ? EDIT : SUCCESS;
}
public String cancel() {
actionTenderResponseContractors = (List) tenderResponseService
.getActionTenderResponseContractorsList(actionTenderResponseContractors);
if (tenderResponse != null
&& !actionTenderResponseContractors.isEmpty()
&& actionTenderResponseContractors.get(0) != null
&& actionTenderResponseContractors.get(0).getContractor() != null
&& (actionTenderResponseContractors.get(0).getContractor().getId() == null
|| actionTenderResponseContractors.get(0).getContractor().getId() == 0 || actionTenderResponseContractors
.get(0).getContractor().getId() == -1))
throw new ValidationException(Arrays.asList(new ValidationError(TENDERRESPONSE_CONTRACTOR,
TENDERRESPONSE_CONTRACTOR_NULL)));
else if (tenderResponse != null && !actionTenderResponseContractors.isEmpty()
&& actionTenderResponseContractors.get(0) != null
&& actionTenderResponseContractors.get(0).getContractor() == null)
throw new ValidationException(Arrays.asList(new ValidationError(TENDERRESPONSE_CONTRACTOR,
TENDERRESPONSE_CONTRACTOR_NULL)));
if (tenderResponse != null
&& tenderResponse.getNegotiationPreparedBy() != null
&& (tenderResponse.getNegotiationPreparedBy().getIdPersonalInformation() == null
|| tenderResponse.getNegotiationPreparedBy().getIdPersonalInformation() == 0 || tenderResponse
.getNegotiationPreparedBy().getIdPersonalInformation() == -1))
throw new ValidationException(Arrays.asList(new ValidationError(VALIDATION_PREPAREDBY,
VALIDATION_PREPAREDBY_ERROR)));
else if (tenderResponse != null && tenderResponse.getNegotiationPreparedBy() == null)
throw new ValidationException(Arrays.asList(new ValidationError(VALIDATION_PREPAREDBY,
VALIDATION_PREPAREDBY_ERROR)));
saveTender();
tenderResponse.setTenderEstimate(tenderHeader.getTenderEstimates().get(0));
if (tenderResponse.getId() != null) {
workflowService.transition(TenderResponse.Actions.CANCEL.toString(), tenderResponse, "");
tenderResponse = tenderResponseService.persist(tenderResponse);
}
messageKey = "tenderResponse.cancel";
getDesignation(tenderResponse);
return SUCCESS;
}
// start for customizing workflow message display
private void getDesignation(final TenderResponse tenderResponse) {
if (tenderResponse.getEgwStatus() != null && !"NEW".equalsIgnoreCase(tenderResponse.getEgwStatus().getCode())) {
final String result = worksService.getEmpNameDesignation(tenderResponse.getState().getOwnerPosition(),
tenderResponse.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 saveTender() {
populateTenderEstimate();
}
private void populateTenderEstimate() {
if (id != null)
tenderResponse.getTenderEstimate().getTenderHeader().getTenderEstimates().clear();
if (abstractEstimate != null)
tenderEstimate.setAbstractEstimate(abstractEstimate);
if (worksPackage != null)
tenderEstimate.setWorksPackage(worksPackage);
if (tenderType != null && !tenderType.equals("-1"))
tenderEstimate.setTenderType(tenderType);
if (id == null)
tenderEstimate.setTenderHeader(tenderHeader);
tenderHeader.addTenderEstimate(tenderEstimate);
}
private void populateTenderResponseContractors() {
for (final TenderResponseContractors tenderResponseContractors : actionTenderResponseContractors)
if (tenderResponseContractors != null)
tenderResponse.addTenderResponseContractors(tenderResponseContractors);
}
private void populateTenderResponseActivities() {
if (abstractEstimate != null)
addAllActivities(abstractEstimate.getActivities());
if (worksPackage != null)
addAllActivities(worksPackage.getAllActivities());
}
private void addAllActivities(final List<Activity> actList) {
if (tenderTypeList != null && !tenderTypeList.isEmpty() && tenderType.equals(tenderTypeList.get(0)))
for (final Activity activity : actList) {
final TenderResponseActivity tenderResponseActivity = new TenderResponseActivity();
final List<TenderResponseQuotes> tenderResponseQuotesList = new ArrayList<TenderResponseQuotes>();
tenderResponseActivity.setActivity(activity);
tenderResponseActivity.setNegotiatedQuantity(activity.getQuantity());
if (WorksConstants.BILL.equalsIgnoreCase(worksService.getWorksConfigValue("REBATE_PREMIUM_LEVEL"))) {
for (final TenderResponseContractors tenderResponseContractors : actionTenderResponseContractors)
if (tenderResponseContractors != null) {
final TenderResponseQuotes tenderResponseQuotes = new TenderResponseQuotes();
if (activity.getNonSor() == null) {
tenderResponseQuotes.setQuotedRate(activity.getSORCurrentRate().getValue());
tenderResponseActivity.setNegotiatedRate(activity.getSORCurrentRate().getValue());
} else if (activity.getSchedule() == null) {
tenderResponseQuotes.setQuotedRate(activity.getRate());
tenderResponseActivity.setNegotiatedRate(activity.getRate());
}
tenderResponseQuotes.setContractor(tenderResponseContractors.getContractor());
tenderResponseQuotes.setQuotedQuantity(activity.getQuantity());
tenderResponseQuotes.setTenderResponseActivity(tenderResponseActivity);
tenderResponseQuotesList.add(tenderResponseQuotes);
tenderResponseActivity.setTenderResponseQuotes(tenderResponseQuotesList);
}
} else
for (final TenderResponseContractors tenderResponseContractors : actionTenderResponseContractors)
if (tenderResponseContractors != null) {
final TenderResponseQuotes tenderResponseQuotes = new TenderResponseQuotes();
if (activity.getNonSor() == null) {
tenderResponseQuotes.setQuotedRate(activity.getSORCurrentRate().getValue()
+ activity.getSORCurrentRate().getValue() * tenderResponse.getPercQuotedRate()
/ 100);
tenderResponseActivity.setNegotiatedRate(activity.getSORCurrentRate().getValue()
+ activity.getSORCurrentRate().getValue()
* tenderResponse.getPercNegotiatedAmountRate() / 100);
} else if (activity.getSchedule() == null) {
tenderResponseQuotes.setQuotedRate(activity.getRate()
+ activity.getRate() * tenderResponse.getPercQuotedRate() / 100);
tenderResponseActivity.setNegotiatedRate(activity.getRate()
+ activity.getRate() * tenderResponse.getPercNegotiatedAmountRate()
/ 100);
}
tenderResponseQuotes.setContractor(tenderResponseContractors.getContractor());
tenderResponseQuotes.setQuotedQuantity(activity.getQuantity());
tenderResponseQuotes.setTenderResponseActivity(tenderResponseActivity);
tenderResponseQuotesList.add(tenderResponseQuotes);
tenderResponseActivity.setTenderResponseQuotes(tenderResponseQuotesList);
}
tenderResponseActivity.setTenderResponse(tenderResponse);
tenderResponse.addTenderResponseActivity(tenderResponseActivity);
}
else
for (final Activity activity : actList) {
double negotiatedRate = 0.0;
final Map<Long, Object> tenderResponseQuotesMap = new HashMap<Long, Object>();
for (final TenderResponseActivity tenderResponseActivityTemp : actionTenderResponseActivities)
if (tenderResponseActivityTemp != null) {
final List<TenderResponseQuotes> tenderResponseQuotesList = new ArrayList<TenderResponseQuotes>();
for (final TenderResponseQuotes tenderResponseQuotesTemp : tenderResponseActivityTemp
.getTenderResponseQuotesList()) {
final TenderResponseQuotes tenderResponseQuotes = new TenderResponseQuotes();
tenderResponseQuotes.setQuotedRate(tenderResponseQuotesTemp.getQuotedRate());
final Contractor contractor = contractorService.findById(tenderResponseQuotesTemp
.getContractor().getId(), false);
tenderResponseQuotes.setContractor(contractor);
tenderResponseQuotes.setQuotedQuantity(activity.getQuantity());
tenderResponseQuotesList.add(tenderResponseQuotes);
}
tenderResponseQuotesMap.put(tenderResponseActivityTemp.getActivity().getId(),
tenderResponseQuotesList);
if (StringUtils.isNotBlank(tenderResponseActivityTemp.getSchCode())
&& activity.getSchedule() != null
&& activity.getSchedule().getCode().equals(tenderResponseActivityTemp.getSchCode())) {
negotiatedRate = tenderResponseActivityTemp.getNegotiatedRate();
tenderResponseQuotesMap.put(activity.getId(), tenderResponseQuotesList);
} else if (tenderResponseActivityTemp.getActivity().getId().intValue() == activity.getId()
.intValue())
negotiatedRate = tenderResponseActivityTemp.getNegotiatedRate();
}
final TenderResponseActivity tenderResponseActivity = new TenderResponseActivity();
tenderResponseActivity.setActivity(activity);
tenderResponseActivity.setNegotiatedQuantity(activity.getQuantity());
tenderResponseActivity.setNegotiatedRate(negotiatedRate);
tenderResponseActivity.setTenderResponse(tenderResponse);
List<TenderResponseQuotes> tenderResponseQuotesList = new ArrayList<TenderResponseQuotes>();
tenderResponseQuotesList = (List<TenderResponseQuotes>) tenderResponseQuotesMap.get(activity.getId());
for (final TenderResponseQuotes tenderResponseQuotes : tenderResponseQuotesList) {
tenderResponseQuotes.setTenderResponseActivity(tenderResponseActivity);
tenderResponseActivity.addTenderResponseQuotes(tenderResponseQuotes);
}
tenderResponse.addTenderResponseActivity(tenderResponseActivity);
}
}
/** reject */
public String reject() {
saveTender();
tenderResponse.setTenderEstimate(tenderHeader.getTenderEstimates().get(0));
// calling workflow api
workflowService.transition(TenderResponse.Actions.REJECT.toString(), tenderResponse, "");
tenderResponse = tenderResponseService.persist(tenderResponse);
getDesignation(tenderResponse);
messageKey = "tenderResponse.reject";
return SUCCESS;
}
public void setNegotiationNumber(final TenderResponse entity, final CFinancialYear financialYear) {
if (entity.getNegotiationNumber() == null || entity.getNegotiationNumber() != null
&& negotiationNumberChangeRequired(entity, financialYear)) {
if (entity.getTenderEstimate().getAbstractEstimate() != null)
entity.setNegotiationNumber(negotiationNumberGenerator.getTenderNegotiationNumber(entity
.getTenderEstimate().getAbstractEstimate(), financialYear));
if (entity.getTenderEstimate().getWorksPackage() != null)
entity.setNegotiationNumber(negotiationNumberGenerator.getTenderNegotiationNumber(entity
.getTenderEstimate().getWorksPackage(), financialYear));
}
}
private boolean negotiationNumberChangeRequired(final TenderResponse entity, final CFinancialYear financialYear) {
final String[] estNum = entity.getNegotiationNumber().split("/");
if (entity.getTenderEstimate().getAbstractEstimate() != null
&& estNum[0]
.equals(entity.getTenderEstimate().getAbstractEstimate().getExecutingDepartment().getCode())
&& estNum[2].equals(financialYear.getFinYearRange()))
return false;
else if (entity.getTenderEstimate().getWorksPackage() != null
&& estNum[0].equals(entity.getTenderEstimate().getWorksPackage().getDepartment().getCode())
&& estNum[2].equals(financialYear.getFinYearRange()))
return false;
return true;
}
public void setAbstractEstimateService(final AbstractEstimateService abstractEstimateService) {
this.abstractEstimateService = abstractEstimateService;
}
public void setTenderResponse(final TenderResponse tenderResponse) {
this.tenderResponse = tenderResponse;
}
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 TenderHeader getTenderHeader() {
return tenderHeader;
}
public void setTenderHeader(final TenderHeader tenderHeader) {
this.tenderHeader = tenderHeader;
}
public String getTenderType() {
return tenderType;
}
public void setTenderType(final String tenderType) {
this.tenderType = tenderType;
}
public void setTenderHeaderService(final PersistenceService<TenderHeader, Long> tenderHeaderService) {
this.tenderHeaderService = tenderHeaderService;
}
public void setTenderEstimate(final TenderEstimate tenderEstimate) {
this.tenderEstimate = tenderEstimate;
}
public void setNegotiationNumberGenerator(final NegotiationNumberGenerator negotiationNumberGenerator) {
this.negotiationNumberGenerator = negotiationNumberGenerator;
}
/**
* @return the negotiationNumber
*/
public String getNegotiationNumber() {
return negotiationNumber;
}
/**
* @param negotiationNumber the negotiationNumber to set
*/
public void setNegotiationNumber(final String negotiationNumber) {
this.negotiationNumber = negotiationNumber;
}
/**
* @return the negotiationDate
*/
public Date getNegotiationDate() {
return negotiationDate;
}
/**
* @param negotiationDate the negotiationDate to set
*/
public void setNegotiationDate(final Date negotiationDate) {
this.negotiationDate = negotiationDate;
}
/**
* @return the departmentId
*/
public Long getDeptId() {
return deptId;
}
/**
* @param departmentId the departmentId to set
*/
public void setDepartmentId(final Integer departmentId) {
this.departmentId = departmentId;
}
/**
* @return the estimateNumber
*/
public String getEstimateNumber() {
return estimateNumber;
}
/**
* @param estimateNumber the estimateNumber to set
*/
public void setEstimateNumber(final String estimateNumber) {
this.estimateNumber = estimateNumber;
}
/**
* @return the projectCode
*/
public String getProjectCode() {
return projectCode;
}
/**
* @param projectCode the projectCode to set
*/
public void setProjectCode(final String projectCode) {
this.projectCode = projectCode;
}
/**
* @return the mode
*/
public String getMode() {
return mode;
}
/**
* @param mode the mode to set
*/
public void setMode(final String mode) {
this.mode = mode;
}
public List<WorkflowAction> getValidActions() {
return workflowService.getValidActions(tenderResponse);
}
public void setTenderResponseWorkflowService(final WorkflowService<TenderResponse> workflow) {
workflowService = workflow;
}
public List<EgwStatus> getEstimateStatuses() {
final List<EgwStatus> tnStatusList = egwStatusHibernateDAO.getStatusByModule(TenderResponse.class.getSimpleName());
tnStatusList.remove(egwStatusHibernateDAO.getStatusByModuleAndCode(TenderResponse.class.getSimpleName(), "NEW"));
return tnStatusList;
}
public List<EgwStatus> getNegotiationStatusesForWO() {
final List<EgwStatus> tnStatusList = new ArrayList<EgwStatus>();
final String wpStatus = worksService.getWorksConfigValue("WP_STATUS_SEARCH");
final String status = worksService.getWorksConfigValue("TenderResponse.setstatus");
final String lastStatus = worksService.getWorksConfigValue("TenderResponse.laststatus");
final List<String> statList = new ArrayList<String>();
if (StringUtils.isNotBlank(wpStatus))
statList.add(wpStatus);
if (StringUtils.isNotBlank(status) && StringUtils.isNotBlank(lastStatus)) {
final List<String> statusList = Arrays.asList(status.split(","));
for (final String stat : statusList)
if (stat.equals(lastStatus)) {
statList.add(stat);
break;
} else
statList.add(stat);
}
if ("cancelTN".equals(sourcepage))
tnStatusList.add(egwStatusHibernateDAO.getStatusByModuleAndCode(TenderResponse.class.getSimpleName(), "APPROVED"));
tnStatusList.addAll(egwStatusHibernateDAO.getStatusListByModuleAndCodeList(TenderResponse.class.getSimpleName(),
statList));
return tnStatusList;
}
/**
* @return the status
*/
public String getStatus() {
return status;
}
/**
* @param status the status to set
*/
public void setStatus(final String status) {
this.status = status;
}
@Override
public void validate() {
if (actionTenderResponseContractors != null) {
final List<Contractor> contractorList = new ArrayList<Contractor>();
for (final TenderResponseContractors tenderResponseContractors : tenderResponseService
.getActionTenderResponseContractorsList(actionTenderResponseContractors))
contractorList.add(tenderResponseContractors.getContractor());
addDropdownData(CONTRACTOR_LIST, contractorList);
}
if (tenderResponse.getId() == null && tenderResponse.getEgwStatus() == null
&& sourcepage.equalsIgnoreCase("createNegotiationForWP") && !sourcepage.equalsIgnoreCase(SOURCE_INBOX)
&& !sourcepage.equalsIgnoreCase("cancelTN") && !sourcepage.equalsIgnoreCase(SEARCH_NEGOTIATION_FOR_WO)
&& !sourcepage.equalsIgnoreCase("search")) {
final TenderResponse tenderResp = (TenderResponse) persistenceService.findByNamedQuery(
"getTenderForWorksPackageNum", getWpNumber());
if (tenderResp != null)
addActionError(getText("tenderNegotiation.workspackage.uniquecheck.message", new String[] {
getWpNumber(), tenderResp.getNegotiationNumber() }));
}
if (tenderResponse != null && tenderType != null && !tenderTypeList.isEmpty()
&& tenderType.equals(tenderTypeList.get(0))) {
if (tenderResponse.getPercQuotedRate() <= -100D)
addActionError(getText("tenderResponse.percQuotedRate.valid"));
if (tenderResponse.getPercNegotiatedAmountRate() <= -100D)
addActionError(getText("tenderResponse.percNegotiatedRate.valid"));
}
final Collection<TenderResponseActivity> tenderResponseActivityList = tenderResponseService
.getTenderResponseActivityList(actionTenderResponseActivities);
if (tenderResponse != null && tenderType != null && !tenderTypeList.isEmpty()
&& tenderType.equals(tenderTypeList.get(1)) && !tenderResponseActivityList.isEmpty())
for (final TenderResponseActivity tenderResponseActivity : tenderResponseActivityList) {
for (final TenderResponseQuotes tenderResponseQuotes : tenderResponseActivity
.getTenderResponseQuotesList())
if (tenderResponseQuotes.getQuotedRate() == 0.0)
addActionError(getText("tenderResponseActivity.quotedRate.non.negative"));
if (tenderResponseActivity.getNegotiatedRate() == 0.0)
addActionError(getText("tenderResponseActivity.negotiatedRate.non.negative"));
}
}
/**
* @return the worksService
*/
public WorksService getWorksService() {
return worksService;
}
/**
* @param worksService the worksService to set
*/
public void setWorksService(final WorksService worksService) {
this.worksService = worksService;
}
/**
* @return the employeeName
*/
public String getEmployeeName() {
return employeeName;
}
/**
* @param employeeName the employeeName to set
*/
public void setEmployeeName(final String employeeName) {
this.employeeName = employeeName;
}
/**
* @return the sourcepage
*/
public String getSourcepage() {
return sourcepage;
}
/**
* @param sourcepage the sourcepage to set
*/
public void setSourcepage(final String sourcepage) {
this.sourcepage = sourcepage;
}
public WorkOrder getWorkOrder() {
return workOrder;
}
public void setWorkOrder(final WorkOrder workOrder) {
this.workOrder = workOrder;
}
public String getErrorType() {
return errorType;
}
public void setErrorType(final String errorType) {
this.errorType = errorType;
}
public Date getApprovedDateHidden() {
return approvedDateHidden;
}
public void setApprovedDateHidden(final Date approvedDateHidden) {
this.approvedDateHidden = approvedDateHidden;
}
public String getNsActionName() {
return nsActionName;
}
public void setNsActionName(final String nsActionName) {
this.nsActionName = nsActionName;
}
public Long getTenderRespId() {
return tenderRespId;
}
public void setTenderRespId(final Long tenderRespId) {
this.tenderRespId = tenderRespId;
}
public Integer getNegotiationStatusId() {
return negotiationStatusId;
}
public void setNegotiationStatusId(final Integer negotiationStatusId) {
this.negotiationStatusId = negotiationStatusId;
}
public Integer getNegotiationStatusApprovedById() {
return negotiationStatusApprovedById;
}
public void setNegotiationStatusApprovedById(final Integer negotiationStatusApprovedById) {
this.negotiationStatusApprovedById = negotiationStatusApprovedById;
}
public String getOption() {
return option;
}
public void setOption(final String option) {
this.option = option;
}
public String getMessageKey() {
return messageKey;
}
private Long id;
public Long getId() {
return id;
}
public void setId(final Long id) {
this.id = id;
}
// set status and workorder no generation
public String getCurrentStatus() {
return currentStatus;
}
public void setCurrentStatus(final String currentStatus) {
this.currentStatus = currentStatus;
}
public String getCurrentApproverName() {
return currentApproverName;
}
public void setCurrentApproverName(final String currentApproverName) {
this.currentApproverName = currentApproverName;
}
public String getCurrentApprovedDateStr() {
if (currentApprovedDate != null)
currentApprovedDateStr = new java.text.SimpleDateFormat("dd/MM/yyyy").format(currentApprovedDate);
return currentApprovedDateStr;
}
public void setCurrentApprovedDate(final Date currentApprovedDate) {
this.currentApprovedDate = currentApprovedDate;
}
public Integer getStatusIdValue() {
return statusIdValue;
}
public void setStatusIdValue(final Integer statusIdValue) {
this.statusIdValue = statusIdValue;
}
public void setTenderResponseService(final TenderResponseService tenderResponseService) {
this.tenderResponseService = tenderResponseService;
}
public Integer getWorkOrderInchargeId() {
return workOrderInchargeId;
}
public void setWorkOrderInchargeId(final Integer workOrderInchargeId) {
this.workOrderInchargeId = workOrderInchargeId;
}
public Long getWorksPackageId() {
return worksPackageId;
}
public void setWorksPackageId(final Long worksPackageId) {
this.worksPackageId = worksPackageId;
}
public void setWorkspackageService(final WorksPackageService workspackageService) {
this.workspackageService = workspackageService;
}
public WorksPackage getWorksPackage() {
return worksPackage;
}
public void setWorksPackage(final WorksPackage worksPackage) {
this.worksPackage = worksPackage;
}
public String getCreatedBySelection() {
return createdBySelection;
}
public void setCreatedBySelection(final String createdBySelection) {
this.createdBySelection = createdBySelection;
}
public String getEditableDate() {
return editableDate;
}
public void setEditableDate(final String editableDate) {
this.editableDate = editableDate;
}
public void setDepartmentService(final DepartmentService departmentService) {
this.departmentService = departmentService;
}
public String getWpYear() {
if (worksPackage != null)
return abstractEstimateService.getCurrentFinancialYear(worksPackage.getWpDate()).getFinYearRange();
return wpYear;
}
public boolean validTenderNo() {
boolean status = false;
if (tenderHeader != null && tenderHeader.getTenderNo() != null) {
final AjaxTenderNegotiationAction ajaxTenderNegotiationAction = new AjaxTenderNegotiationAction();
ajaxTenderNegotiationAction.setPersistenceService(getPersistenceService());
ajaxTenderNegotiationAction.setAssignmentService(assignmentService);
ajaxTenderNegotiationAction.setTenderNo(tenderHeader.getTenderNo());
ajaxTenderNegotiationAction.setId(id);
if (ajaxTenderNegotiationAction.getTendernoCheck())
status = true;
}
return status;
}
@SuppressWarnings("unchecked")
protected void getPositionAndUser() {
final List<TenderResponseContractors> tenderResponseContractorsList = new ArrayList<TenderResponseContractors>();
final Map<String, Integer> exceptionaSorMap = worksService.getExceptionSOR();
final Iterator i = searchResult.getList().iterator();
while (i.hasNext()) {
final TenderResponse tenderResponse = (TenderResponse) i.next();
if (SEARCH_NEGOTIATION_FOR_WO.equals(sourcepage)) {
double totalTenderNegQty = tenderResponse.getTotalNegotiatedQuantity().getValue();
double totalWorkOrderQty = getTotalWorkOrderQuantity(tenderResponse.getNegotiationNumber());
totalTenderNegQty = Math.round(totalTenderNegQty * 100) / 100.0;
totalWorkOrderQty = Math.round(totalWorkOrderQty * 100) / 100.0;
if (totalWorkOrderQty >= totalTenderNegQty)
continue;
}
if (!tenderResponse.getEgwStatus().getCode().equalsIgnoreCase(WorksConstants.APPROVED)
&& !tenderResponse.getEgwStatus().getCode().equalsIgnoreCase(WorksConstants.CANCELLED_STATUS)) {
final PersonalInformation emp = employeeServiceOld.getEmployeeforPosition(tenderResponse.getCurrentState()
.getOwnerPosition());
if (emp != null && StringUtils.isNotBlank(emp.getEmployeeName()))
if (tenderResponse.getTenderEstimate().getAbstractEstimate() == null)
tenderResponse.getTenderEstimate().getWorksPackage().setEmployeeName(emp.getEmployeeName());
else
tenderResponse.getTenderEstimate().getAbstractEstimate()
.setPositionAndUserName(emp.getEmployeeName());
}
double totalAmt = 0;
for (final TenderResponseActivity act : tenderResponse.getTenderResponseActivities()) {
double result = 1;
if (act.getActivity().getSchedule() != null
&& exceptionaSorMap.containsKey(act.getActivity().getUom().getUom())) {
result = exceptionaSorMap.get(act.getActivity().getUom().getUom());
totalAmt += act.getNegotiatedQuantity() * act.getNegotiatedRate() / result;
} else
totalAmt += act.getNegotiatedQuantity() * act.getNegotiatedRate();
}
tenderResponse.setTotalAmount(totalAmt);
final Iterator j = tenderResponse.getTenderResponseContractors().iterator();
while (j.hasNext()) {
final TenderResponseContractors tenderResponseCntractrs = (TenderResponseContractors) j.next();
if (tenderResponseCntractrs.getTenderResponse().getEgwStatus() != null
&& tenderResponseCntractrs.getTenderResponse().getEgwStatus().getCode()
.equals(TenderResponse.TenderResponseStatus.APPROVED.toString())) {
final OfflineStatus setStatus = (OfflineStatus) persistenceService.findByNamedQuery(
"getmaxStatusByObjectId_Type", tenderResponseCntractrs.getId(),
tenderResponseCntractrs.getId(), TenderResponseContractors.class.getSimpleName(),
TenderResponseContractors.class.getSimpleName());
if (setStatus == null) {
tenderResponseCntractrs.setStatus(tenderResponse.getEgwStatus().getCode());
tenderResponseCntractrs.setStatusCode(tenderResponse.getEgwStatus().getCode());
} else {
tenderResponseCntractrs.setStatus(setStatus.getEgwStatus().getDescription());
tenderResponseCntractrs.setStatusCode(setStatus.getEgwStatus().getCode());
}
} else {
tenderResponseCntractrs.setStatus(tenderResponse.getEgwStatus().getCode());
tenderResponseCntractrs.setStatusCode(tenderResponse.getEgwStatus().getCode());
}
}
final String approved = getApprovedValue();
final OfflineStatus lastStatus = worksStatusService.findByNamedQuery(STATUS_OBJECTID, tenderResponse
.getTenderResponseContractors().get(0).getId(), OBJECT_TYPE, getLastStatus());
final String actions = worksService.getWorksConfigValue("TENDERNEGOTIATION_SHOW_ACTIONS");
if (StringUtils.isNotBlank(actions)) {
String setStat = "";
tenderResponse.getTenderNegotiationsActions().addAll(Arrays.asList(actions.split(",")));
if (lastStatus != null || "view".equalsIgnoreCase(setStatus))
setStat = worksService.getWorksConfigValue("WORKS_VIEW_OFFLINE_STATUS_VALUE");
else if (lastStatus == null && StringUtils.isNotBlank(approved)
&& tenderResponse.getEgwStatus() != null
&& approved.equals(tenderResponse.getEgwStatus().getCode()))
setStat = worksService.getWorksConfigValue("WORKS_SETSTATUS_VALUE");
if (StringUtils.isNotBlank(setStat))
tenderResponse.getTenderNegotiationsActions().add(setStat);
}
tenderResponseContractorsList.addAll(tenderResponse.getTenderResponseContractors());
}
if (SEARCH_NEGOTIATION_FOR_WO.equals(sourcepage)) {
final List<TenderResponseContractors> tenderResponseContractorsTempList = new ArrayList<TenderResponseContractors>();
final Iterator k = tenderResponseContractorsList.listIterator();
while (k.hasNext()) {
final TenderResponseContractors tenderResponseCntractrs = (TenderResponseContractors) k.next();
if (status != null && status != "" && contractorId != null && contractorId != -1) {
if (tenderResponseCntractrs.getStatusCode().equals(status)
&& tenderResponseCntractrs.getContractor().getId().equals(contractorId))
tenderResponseContractorsTempList.add(tenderResponseCntractrs);
} else if (status != null && status != "" && (contractorId == null || contractorId == -1)) {
if (tenderResponseCntractrs.getStatusCode().equals(status))
tenderResponseContractorsTempList.add(tenderResponseCntractrs);
} else if ((status == null || status == "") && contractorId != null && contractorId != -1
&& tenderResponseCntractrs.getContractor().getId().equals(contractorId))
tenderResponseContractorsTempList.add(tenderResponseCntractrs);
}
searchResult.getList().clear();
searchResult.getList().addAll(tenderResponseContractorsTempList);
} else {
searchResult.getList().clear();
searchResult.getList().addAll(tenderResponseContractorsList);
}
}
private double getTotalWorkOrderQuantity(final String negotiationNumber) {
Object[] params = new Object[] { negotiationNumber, WorksConstants.CANCELLED_STATUS };
Double totalWorkOrderQty = (Double) getPersistenceService().findByNamedQuery("getTotalQuantityForWO", params);
params = new Object[] { negotiationNumber, WorksConstants.NEW };
final Double totalWorkOrderQtyForNew = (Double) getPersistenceService().findByNamedQuery(
"getTotalQuantityForNewWO", params);
if (totalWorkOrderQty != null && totalWorkOrderQtyForNew != null)
totalWorkOrderQty = totalWorkOrderQty + totalWorkOrderQtyForNew;
if (totalWorkOrderQty == null && totalWorkOrderQtyForNew != null)
totalWorkOrderQty = totalWorkOrderQtyForNew;
if (totalWorkOrderQty == null)
return 0.0d;
else
return totalWorkOrderQty.doubleValue();
}
public String getApprovedValue() {
return TenderResponse.TenderResponseStatus.APPROVED.toString();
}
public String getLastStatus() {
return worksService.getWorksConfigValue(WorksConstants.TENDERRESPONSE_LASTSTATUS);
}
public String getDesignationNegotiation() {
return designationNegotiation;
}
public void setDesignationNegotiation(final String designationNegotiation) {
this.designationNegotiation = designationNegotiation;
}
public String getDesignation() {
return designation;
}
public void setDesignation(final String designation) {
this.designation = designation;
}
public String getTenderSource() {
return tenderSource;
}
public void setTenderSource(final String tenderSource) {
this.tenderSource = tenderSource;
}
public String getSetStatus() {
return setStatus;
}
public void setSetStatus(final String setStatus) {
this.setStatus = setStatus;
}
public Double getSorPerDiff() {
return sorPerDiff;
}
public void setSorPerDiff(final Double sorPerDiff) {
this.sorPerDiff = sorPerDiff;
}
public String getWpNumber() {
return wpNumber;
}
public void setWpNumber(final String wpNumber) {
this.wpNumber = wpNumber;
}
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 String getTenderCretedBy() {
return tenderCretedBy;
}
public void setTenderCretedBy(final String tenderCretedBy) {
this.tenderCretedBy = tenderCretedBy;
}
public String getTenderFileNumber() {
return tenderFileNumber;
}
public void setTenderFileNumber(final String tenderFileNumber) {
this.tenderFileNumber = tenderFileNumber;
}
public List<Contractor> getContractorForApprovedNegotiation() {
return getPersistenceService().findAllByNamedQuery("getApprovedNegotiationContractors");
}
public void setDeptId(final Long deptId) {
this.deptId = deptId;
}
public Integer getDepartmentId() {
return departmentId;
}
@Override
public SearchQuery prepareQuery(final String sortField, final String sortOrder) {
final List<Object> paramList = new ArrayList<Object>();
String negotiationStr = "from TenderResponse as tenderResponse "
+ " where tenderResponse.createdBy is not null ";
if (getStatus().equals(TenderResponse.TenderResponseStatus.APPROVED.toString())) {
negotiationStr += " and tenderResponse.egwStatus.code= ? and "
+ " tenderResponse.id in ( select trc.tenderResponse.id from TenderResponseContractors trc where trc.id not in (select objectId from OfflineStatus where objectType='"
+ OBJECT_TYPE + "' ))";
paramList.add(status);
} else if (getStatus().equals(TenderResponse.TenderResponseStatus.CANCELLED.toString())) {
negotiationStr += " and tenderResponse.egwStatus.code= ? ";
paramList.add(status);
} else if (StringUtils.isNotBlank(getStatus()) && !getStatus().equals("-1")) {
negotiationStr += "and tenderResponse.egwStatus.code != 'NEW' and ((tenderResponse.egwStatus.code = ?) or "
+ "(tenderResponse.egwStatus.code = 'APPROVED' and tenderResponse.id in (select trc.tenderResponse.id from TenderResponseContractors trc where trc.id in ("
+ " select stat.objectId from "
+ "OfflineStatus stat where stat.egwStatus.code= ? and stat.id = (select"
+ " max(stat1.id) from OfflineStatus stat1 where trc.id=stat1.objectId and stat1.objectType='"
+ OBJECT_TYPE + "') and stat.objectType='" + OBJECT_TYPE + "')))) ";
paramList.add(getStatus());
paramList.add(getStatus());
if (sourcepage != null && "cancelTN".equals(sourcepage))
negotiationStr += " and tenderResponse.egwStatus.code = 'APPROVED'";
}
if (StringUtils.isNotBlank(negotiationNumber)) {
negotiationStr = negotiationStr + " and UPPER(tenderResponse.negotiationNumber) like ?";
paramList.add("%" + negotiationNumber.trim().toUpperCase() + "%");
}
if (fromDate != null && toDate != null && getFieldErrors().isEmpty()) {
negotiationStr = negotiationStr + " and tenderResponse.negotiationDate between ? and ? ";
paramList.add(fromDate);
paramList.add(toDate);
}
if (departmentId != null && departmentId != -1) {
negotiationStr = negotiationStr
+ " and (tenderResponse.tenderEstimate.abstractEstimate.id in "
+ "(select tr1.tenderEstimate.abstractEstimate.id from TenderResponse tr1 "
+ " where tr1.tenderEstimate.abstractEstimate.id!=null and tr1.tenderEstimate.worksPackage.id=null and"
+ " tr1.tenderEstimate.abstractEstimate.executingDepartment.id= ?) "
+ " or tenderResponse.tenderEstimate.worksPackage.id in "
+ "(select tr.tenderEstimate.worksPackage.id from TenderResponse tr "
+ " where tr.tenderEstimate.abstractEstimate.id=null and tr.tenderEstimate.worksPackage.id!=null and"
+ " tr.tenderEstimate.worksPackage.department.id= ?)) ";
paramList.add(departmentId);
paramList.add(departmentId);
}
if (StringUtils.isNotBlank(estimateNumber)) {
negotiationStr = negotiationStr
+ " and tenderResponse.tenderEstimate.worksPackage.id in "
+ "(select wpd.worksPackage.id from WorksPackageDetails wpd where UPPER(wpd.estimate.estimateNumber) like ? )";
paramList.add("%" + estimateNumber.trim().toUpperCase() + "%");
}
if (StringUtils.isNotBlank(projectCode)) {
negotiationStr = negotiationStr
+ " and tenderResponse.tenderEstimate.worksPackage.id in "
+ "(select wpd.worksPackage.id from WorksPackageDetails wpd where UPPER(wpd.estimate.projectCode.code) like ?)";
paramList.add("%" + projectCode.trim().toUpperCase() + "%");
}
if (StringUtils.isNotBlank(wpNumber)) {
negotiationStr = negotiationStr + " and UPPER(tenderResponse.tenderEstimate.worksPackage.wpNumber) like ?";
paramList.add("%" + wpNumber.trim().toUpperCase() + "%");
}
if (StringUtils.isNotBlank(tenderFileNumber)) {
negotiationStr = negotiationStr
+ " and UPPER(tenderResponse.tenderEstimate.worksPackage.tenderFileNumber) like ? ";
paramList.add("%" + tenderFileNumber.toUpperCase() + "%");
}
if (getContractorId() != null && getContractorId() != -1) {
negotiationStr = negotiationStr
+ " and tenderResponse.id in ( select trc.tenderResponse.id from TenderResponseContractors trc where trc.contractor.id= ?)";
paramList.add(getContractorId());
}
final String countQuery = "select count(*) " + negotiationStr;
return new SearchQueryHQL(negotiationStr, countQuery, paramList);
}
@Override
@ValidationErrorPage(value = "searchNegotiationPage")
public String search() {
setPageSize(WorksConstants.PAGE_SIZE);
super.search();
getPositionAndUser();
return "searchNegotiationPage";
}
public String cancelApprovedTN() {
final TenderResponse tenderResponse = tenderResponseService.findById(tenderRespId, false);
tenderResponse.setEgwStatus(egwStatusHibernateDAO.getStatusByModuleAndCode("TenderResponse",
WorksConstants.CANCELLED_STATUS));
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("tenderNegotiation.cancel.cancelledby")).concat(": ").concat(empName);
else
cancellationReason.concat(". ").concat(getText("tenderNegotiation.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 = tenderResponse.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(TenderResponse.TenderResponseStatus.CANCELLED.toString()); oldEndState.setText1(cancellationText);
* tenderResponse.changeState("END", owner, null);
*****/
negotiationNumber = tenderResponse.getNegotiationNumber();
messageKey = negotiationNumber + " : " + getText("tenderResponse.cancel");
return SUCCESS;
}
public void setPersonalInformationService(final PersonalInformationService personalInformationService) {
this.personalInformationService = personalInformationService;
}
public String acceptanceNote() {
return TENDER_ACCEPTANCE_NOTE;
}
public List<TenderResponseContractors> getActionTenderResponseContractors() {
return actionTenderResponseContractors;
}
public void setActionTenderResponseContractors(final List<TenderResponseContractors> actionTenderResponseContractors) {
this.actionTenderResponseContractors = actionTenderResponseContractors;
}
public void setContractorService(final PersistenceService<Contractor, Long> service) {
contractorService = service;
}
public Long getContractorId() {
return contractorId;
}
public void setContractorId(final Long contractorId) {
this.contractorId = contractorId;
}
public List<String> getTenderTypeList() {
return tenderTypeList;
}
public void setTenderTypeList(final List<String> tenderTypeList) {
this.tenderTypeList = tenderTypeList;
}
public void setUserService(final UserService userService) {
this.userService = userService;
}
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 PersistenceService<OfflineStatus, Long> getWorksStatusService() {
return worksStatusService;
}
public void setWorksStatusService(final PersistenceService<OfflineStatus, Long> worksStatusService) {
this.worksStatusService = worksStatusService;
}
public String getNegoNumber() {
return negoNumber;
}
public void setNegoNumber(final String negoNumber) {
this.negoNumber = negoNumber;
}
public String getLoggedInUserEmployeeCode() {
return loggedInUserEmployeeCode;
}
public void setLoggedInUserEmployeeCode(final String loggedInUserEmployeeCode) {
this.loggedInUserEmployeeCode = loggedInUserEmployeeCode;
}
public void setEisService(final EisUtilService eisService) {
this.eisService = eisService;
}
public Map<String, String> getTenderInvitationTypeMap() {
return tenderInvitationTypeMap;
}
public void setTenderInvitationTypeMap(final Map<String, String> tenderInvitationTypeMap) {
this.tenderInvitationTypeMap = tenderInvitationTypeMap;
}
public List<TenderResponseActivity> getActionTenderResponseActivities() {
return actionTenderResponseActivities;
}
public void setActionTenderResponseActivities(final List<TenderResponseActivity> actionTenderResponseActivities) {
this.actionTenderResponseActivities = actionTenderResponseActivities;
}
}