/*
* 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.measurementbook;
import org.egov.commons.EgwStatus;
import org.egov.infra.persistence.validator.annotation.DateFormat;
import org.egov.infra.persistence.validator.annotation.GreaterThan;
import org.egov.infra.persistence.validator.annotation.Required;
import org.egov.infra.persistence.validator.annotation.ValidateDate;
import org.egov.infra.validation.exception.ValidationError;
import org.egov.infra.workflow.entity.StateAware;
import org.egov.works.contractorbill.entity.ContractorBillRegister;
import org.egov.works.models.workorder.WorkOrder;
import org.egov.works.models.workorder.WorkOrderEstimate;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class MBHeader extends StateAware {
private static final long serialVersionUID = 121631467636260459L;
public enum MeasurementBookStatus {
NEW, CREATED, CHECKED, REJECTED, RESUBMITTED, CANCELLED, APPROVED
}
public enum Actions {
SAVE, SUBMIT_FOR_APPROVAL, REJECT, CANCEL, APPROVAL;
@Override
public String toString() {
return name().toLowerCase();
}
}
private Long id;
@Required(message = "mbheader.workorder.null")
private WorkOrder workOrder;
@Required(message = "mbheader.mbrefno.null")
@Length(max = 50, message = "mbheader.mbrefno.length")
private String mbRefNo;
@Length(max = 400, message = "mbheader.contractorComments.length")
private String contractorComments;
@Required(message = "mbheader.mbdate.null")
@ValidateDate(allowPast = true, dateFormat = "dd/MM/yyyy", message = "mbheader.mbDate.futuredate")
@DateFormat(message = "invalid.fieldvalue.mbDate")
private Date mbDate;
// @Required(message = "mbheader.mbabstract.null")
@Length(max = 400, message = "mbheader.mbabstract.length")
private String mbAbstract;
@Required(message = "mbheader.fromPageNo.null")
@GreaterThan(value = 0, message = "mbheader.fromPageNo.non.negative")
private Integer fromPageNo;
@Min(value = 0, message = "mbheader.toPageNo.non.negative")
private Integer toPageNo;
private WorkOrderEstimate workOrderEstimate;
private Integer approverUserId;
private ContractorBillRegister egBillregister;
@Valid
private List<MBDetails> mbDetails = new LinkedList<MBDetails>();
private String owner;
private List<String> mbActions = new ArrayList<String>();
private EgwStatus egwStatus;
private boolean isLegacyMB;
private BigDecimal mbAmount;
private Date approvedDate;
public List<ValidationError> validate() {
final List<ValidationError> validationErrors = new ArrayList<ValidationError>();
if (workOrder != null && (workOrder.getId() == null || workOrder.getId() == 0 || workOrder.getId() == -1))
validationErrors.add(new ValidationError("workOrder", "mbheader.workorder.null"));
if (fromPageNo != null && toPageNo != null && fromPageNo > toPageNo)
validationErrors.add(new ValidationError("toPageNo", "mbheader.toPageNo.invalid"));
if (mbDate != null && workOrder != null && workOrder.getWorkOrderDate() != null
&& mbDate.before(workOrder.getWorkOrderDate()))
validationErrors.add(new ValidationError("mbDate", "mbheader.mbDate.invalid"));
return validationErrors;
}
public void setWorkOrder(final WorkOrder workOrder) {
this.workOrder = workOrder;
}
public WorkOrder getWorkOrder() {
return workOrder;
}
public void setMbRefNo(final String mbRefNo) {
this.mbRefNo = mbRefNo;
}
public String getMbRefNo() {
return mbRefNo;
}
public void setMbDate(final Date mbDate) {
this.mbDate = mbDate;
}
public Date getMbDate() {
return mbDate;
}
public void setMbAbstract(final String mbAbstract) {
this.mbAbstract = mbAbstract;
}
public String getMbAbstract() {
return mbAbstract;
}
public Integer getFromPageNo() {
return fromPageNo;
}
public void setFromPageNo(final Integer fromPageNo) {
this.fromPageNo = fromPageNo;
}
public Integer getToPageNo() {
return toPageNo;
}
public void setToPageNo(final Integer toPageNo) {
this.toPageNo = toPageNo;
}
public String getContractorComments() {
return contractorComments;
}
public void setContractorComments(final String contractorComments) {
this.contractorComments = contractorComments;
}
public List<MBDetails> getMbDetails() {
return mbDetails;
}
public void setMbDetails(final List<MBDetails> mbDetails) {
this.mbDetails = mbDetails;
}
public void addMbDetails(final MBDetails mbDetails) {
this.mbDetails.add(mbDetails);
}
// to show in inbox
@Override
public String getStateDetails() {
return "MbHeader : " + getMbRefNo();
}
public ContractorBillRegister getEgBillregister() {
return egBillregister;
}
public void setEgBillregister(final ContractorBillRegister egBillregister) {
this.egBillregister = egBillregister;
}
public Integer getApproverUserId() {
return approverUserId;
}
public void setApproverUserId(final Integer approverUserId) {
this.approverUserId = approverUserId;
}
public WorkOrderEstimate getWorkOrderEstimate() {
return workOrderEstimate;
}
public void setWorkOrderEstimate(final WorkOrderEstimate workOrderEstimate) {
this.workOrderEstimate = workOrderEstimate;
}
public String getOwner() {
return owner;
}
public void setOwner(final String owner) {
this.owner = owner;
}
public List<String> getMbActions() {
return mbActions;
}
public void setMbActions(final List<String> mbActions) {
this.mbActions = mbActions;
}
public EgwStatus getEgwStatus() {
return egwStatus;
}
public void setEgwStatus(final EgwStatus egwStatus) {
this.egwStatus = egwStatus;
}
public boolean getIsLegacyMB() {
return isLegacyMB;
}
public void setIsLegacyMB(final boolean isLegacyMB) {
this.isLegacyMB = isLegacyMB;
}
public BigDecimal getMbAmount() {
return mbAmount;
}
public void setMbAmount(final BigDecimal mbAmount) {
this.mbAmount = mbAmount;
}
@Override
public String toString() {
return "MBHeader ( Id : " + getId() + "MB Ref No: " + mbRefNo + ")";
}
public BigDecimal getTotalMBAmount() {
double amount = 0.0;
BigDecimal resultAmount = BigDecimal.ZERO;
for (final MBDetails mbd : mbDetails) {
if (mbd.getWorkOrderActivity().getActivity().getNonSor() == null)
amount = mbd.getWorkOrderActivity().getApprovedRate() * mbd.getQuantity()
* mbd.getWorkOrderActivity().getConversionFactor();
else
amount = mbd.getWorkOrderActivity().getApprovedRate() * mbd.getQuantity();
resultAmount = resultAmount.add(BigDecimal.valueOf(amount));
}
return resultAmount;
}
public Date getApprovedDate() {
return approvedDate;
}
public void setApprovedDate(final Date approvedDate) {
this.approvedDate = approvedDate;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(final Long id) {
this.id = id;
}
}