/* * 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.models.workorder; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.egov.commons.EgwStatus; import org.egov.eis.entity.Employee; import org.egov.infra.persistence.entity.Auditable; import org.egov.infra.persistence.entity.component.Money; import org.egov.infra.persistence.validator.annotation.DateFormat; import org.egov.infra.persistence.validator.annotation.Required; import org.egov.infra.persistence.validator.annotation.ValidateDate; import org.egov.infra.utils.DateUtils; import org.egov.infra.validation.exception.ValidationError; import org.egov.infra.workflow.entity.StateAware; import org.egov.works.lineestimate.entity.DocumentDetails; import org.egov.works.models.masters.Contractor; import org.egov.works.models.measurementbook.MBHeader; import org.egov.works.models.tender.OfflineStatus; import org.egov.works.revisionestimate.entity.enums.RevisionType; import org.hibernate.validator.constraints.Length; public class WorkOrder extends StateAware implements Auditable { private static final long serialVersionUID = -3955155765490287178L; private Long id; @NotNull private Contractor contractor; @Required(message = "workOrder.workOrderDate.null") @DateFormat(message = "invalid.fieldvalue.workOrderDate") @ValidateDate(allowPast = true, dateFormat = "dd/MM/yyyy", message = "invalid.workOrderDate") private Date workOrderDate; @NotNull private String workOrderNumber; private String packageNumber; private String tenderNumber; private String negotiationNumber; @Length(max = 1024, message = "workOrderDetails.length") private String workOrderDetails; private Integer contractPeriod; @Length(max = 1024, message = "agreementDetails.length") private String agreementDetails; @Length(max = 1024, message = "paymentTerms.length") private String paymentTerms; @Min(value = 0, message = "workorder.emdAmountDeposited.non.negative") private double emdAmountDeposited; @Min(value = 0, message = "workorder.non.negative") private double securityDeposit; @Min(value = 0, message = "workorder.non.negative") private double labourWelfareFund; @Required(message = "workorder.engineerIncharge.null") private Employee engineerIncharge; @Min(value = 0, message = "workorder.non.negative") private double defectLiabilityPeriod; @NotNull @Min(value = 1) private double workOrderAmount; @NotNull private EgwStatus egwStatus; private double tenderFinalizedPercentage; @DateFormat(message = "invalid.fieldvalue.workOrderDate") private Date approvedDate; private String fileNumber; @DateFormat(message = "invalid.fieldvalue.fileDate") private Date fileDate; @Length(max = 1024, message = "bankguarantee.length") private String bankGuarantee; private String estimateNumber; private WorkOrder parent; private Date expectedCompletionDate; private String tenderType; private String owner; private String status; private transient String percentageSign; private List<WorkOrderEstimate> workOrderEstimates = new LinkedList<WorkOrderEstimate>(); private Set<OfflineStatus> offlineStatuses = new HashSet<OfflineStatus>(); private List<String> workOrderActions = new ArrayList<String>(); private Set<WorkOrder> revisionWOs = new HashSet<WorkOrder>(); private Set<MBHeader> mbHeaders = new HashSet<MBHeader>(); private transient List<DocumentDetails> documentDetails = new ArrayList<DocumentDetails>(0); private String cancellationReason; private String cancellationRemarks; @Override public Long getId() { return id; } @Override public void setId(final Long id) { this.id = id; } public Contractor getContractor() { return contractor; } public void setContractor(final Contractor contractor) { this.contractor = contractor; } public Date getWorkOrderDate() { return workOrderDate; } public void setWorkOrderDate(final Date workOrderDate) { this.workOrderDate = workOrderDate; } public String getWorkOrderNumber() { return workOrderNumber; } public void setWorkOrderNumber(final String workOrderNumber) { this.workOrderNumber = workOrderNumber; } public String getPackageNumber() { return packageNumber; } public void setPackageNumber(final String packageNumber) { this.packageNumber = packageNumber; } public String getTenderNumber() { return tenderNumber; } public void setTenderNumber(final String tenderNumber) { this.tenderNumber = tenderNumber; } public String getNegotiationNumber() { return negotiationNumber; } public void setNegotiationNumber(final String negotiationNumber) { this.negotiationNumber = negotiationNumber; } public String getWorkOrderDetails() { return workOrderDetails; } public void setWorkOrderDetails(final String workOrderDetails) { this.workOrderDetails = workOrderDetails; } public Integer getContractPeriod() { return contractPeriod; } public void setContractPeriod(final Integer contractPeriod) { this.contractPeriod = contractPeriod; } public String getAgreementDetails() { return agreementDetails; } public void setAgreementDetails(final String agreementDetails) { this.agreementDetails = agreementDetails; } public String getPaymentTerms() { return paymentTerms; } public void setPaymentTerms(final String paymentTerms) { this.paymentTerms = paymentTerms; } public double getEmdAmountDeposited() { return emdAmountDeposited; } public void setEmdAmountDeposited(final double emdAmountDeposited) { this.emdAmountDeposited = emdAmountDeposited; } public double getSecurityDeposit() { return securityDeposit; } public void setSecurityDeposit(final double securityDeposit) { this.securityDeposit = securityDeposit; } public double getLabourWelfareFund() { return labourWelfareFund; } public void setLabourWelfareFund(final double labourWelfareFund) { this.labourWelfareFund = labourWelfareFund; } public Employee getEngineerIncharge() { return engineerIncharge; } public void setEngineerIncharge(final Employee engineerIncharge) { this.engineerIncharge = engineerIncharge; } public double getDefectLiabilityPeriod() { return defectLiabilityPeriod; } public void setDefectLiabilityPeriod(final double defectLiabilityPeriod) { this.defectLiabilityPeriod = defectLiabilityPeriod; } public double getWorkOrderAmount() { return workOrderAmount; } public void setWorkOrderAmount(final double workOrderAmount) { this.workOrderAmount = workOrderAmount; } public EgwStatus getEgwStatus() { return egwStatus; } public void setEgwStatus(final EgwStatus egwStatus) { this.egwStatus = egwStatus; } public WorkOrder getParent() { return parent; } public void setParent(final WorkOrder parent) { this.parent = parent; } public String getEstimateNumber() { return estimateNumber; } public void setEstimateNumber(final String estimateNumber) { this.estimateNumber = estimateNumber; } public double getTenderFinalizedPercentage() { return tenderFinalizedPercentage; } public void setTenderFinalizedPercentage(final double tenderFinalizedPercentage) { this.tenderFinalizedPercentage = tenderFinalizedPercentage; } public Date getApprovedDate() { return approvedDate; } public void setApprovedDate(final Date approvedDate) { this.approvedDate = approvedDate; } public String getTenderType() { return tenderType; } public void setTenderType(final String tenderType) { this.tenderType = tenderType; } public String getFileNumber() { return fileNumber; } public void setFileNumber(final String fileNumber) { this.fileNumber = fileNumber; } public Date getFileDate() { return fileDate; } public void setFileDate(final Date fileDate) { this.fileDate = fileDate; } public String getBankGuarantee() { return bankGuarantee; } public void setBankGuarantee(final String bankGuarantee) { this.bankGuarantee = bankGuarantee; } public String getOwner() { return owner; } public void setOwner(final String owner) { this.owner = owner; } public String getStatus() { return status; } public void setStatus(final String status) { this.status = status; } public List<WorkOrderEstimate> getWorkOrderEstimates() { return workOrderEstimates; } public void setWorkOrderEstimates(final List<WorkOrderEstimate> workOrderEstimates) { this.workOrderEstimates = workOrderEstimates; } public Set<OfflineStatus> getOfflineStatuses() { return offlineStatuses; } public void setOfflineStatuses(final Set<OfflineStatus> offlineStatuses) { this.offlineStatuses = offlineStatuses; } public List<String> getWorkOrderActions() { return workOrderActions; } public void setWorkOrderActions(final List<String> workOrderActions) { this.workOrderActions = workOrderActions; } public Set<WorkOrder> getRevisionWOs() { return revisionWOs; } public void setRevisionWOs(final Set<WorkOrder> revisionWOs) { this.revisionWOs = revisionWOs; } public void setExpectedCompletionDate(final Date expectedCompletionDate) { this.expectedCompletionDate = expectedCompletionDate; } public void addWorkOrderEstimate(final WorkOrderEstimate workOrderEstimate) { workOrderEstimates.add(workOrderEstimate); } public Set<MBHeader> getMbHeaders() { return mbHeaders; } public void setMbHeaders(final Set<MBHeader> mbHeaders) { this.mbHeaders = mbHeaders; } public String getFormattedString(final double value) { final double rounded = Math.round(value * 100) / 100.0; final DecimalFormat formatter = new DecimalFormat("0.00"); formatter.setDecimalSeparatorAlwaysShown(true); return formatter.format(rounded); } public List<ValidationError> validate() { final List<ValidationError> validationErrors = new ArrayList<ValidationError>(); if (contractor != null && (contractor.getId() == null || contractor.getId() == 0 || contractor.getId() == -1)) validationErrors.add(new ValidationError("contractor", "workOrder.contractor.null")); else if (contractor == null) validationErrors.add(new ValidationError("contractor", "workOrder.contractor.null")); return validationErrors; } @Override public String getStateDetails() { return "Work Order: " + getWorkOrderNumber(); } public Money getTotalWorkOrderQuantity() { Money totalWorkOrderQuantity; double qty = 0; for (final WorkOrderEstimate workOrderEstimate : workOrderEstimates) for (final WorkOrderActivity woa : workOrderEstimate.getWorkOrderActivities()) if (woa.getActivity() != null && woa.getActivity().getRevisionType() != null && woa.getActivity().getRevisionType().equals(RevisionType.REDUCED_QUANTITY)) qty -= woa.getApprovedQuantity(); else qty += woa.getApprovedQuantity(); totalWorkOrderQuantity = new Money(qty); return totalWorkOrderQuantity; } public Date getExpectedCompletionDate() { if (getContractPeriod() > 0) { final Date date = DateUtils.add(getWorkOrderDate(), Calendar.DAY_OF_MONTH, getContractPeriod()); expectedCompletionDate = date; } return expectedCompletionDate; } @Override public String toString() { return "WorkOrder ( Id : " + getId() + "Work Order No: " + workOrderNumber + ")"; } public String getPercentageSign() { return percentageSign; } public void setPercentageSign(final String percentageSign) { this.percentageSign = percentageSign; } public List<DocumentDetails> getDocumentDetails() { return documentDetails; } public void setDocumentDetails(final List<DocumentDetails> documentDetails) { this.documentDetails = documentDetails; } public String getCancellationReason() { return cancellationReason; } public void setCancellationReason(final String cancellationReason) { this.cancellationReason = cancellationReason; } public String getCancellationRemarks() { return cancellationRemarks; } public void setCancellationRemarks(final String cancellationRemarks) { this.cancellationRemarks = cancellationRemarks; } }