/*
* 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.wtms.application.entity;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.OrderBy;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.egov.commons.EgwStatus;
import org.egov.commons.entity.ChairPerson;
import org.egov.commons.entity.Source;
import org.egov.infra.filestore.entity.FileStoreMapper;
import org.egov.infra.workflow.entity.StateAware;
import org.egov.wtms.masters.entity.ApplicationType;
import org.egov.wtms.masters.entity.ConnectionCategory;
import org.egov.wtms.masters.entity.PipeSize;
import org.egov.wtms.masters.entity.PropertyType;
import org.egov.wtms.masters.entity.UsageType;
import org.egov.wtms.masters.entity.WaterSource;
import org.egov.wtms.masters.entity.enums.ConnectionStatus;
import org.egov.wtms.masters.entity.enums.ConnectionType;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.SafeHtml;
@Entity
@Table(name = "egwtr_connectiondetails")
@SequenceGenerator(name = WaterConnectionDetails.SEQ_CONNECTIONDETAILS, sequenceName = WaterConnectionDetails.SEQ_CONNECTIONDETAILS, allocationSize = 1)
public class WaterConnectionDetails extends StateAware {
private static final long serialVersionUID = -4667948558401042849L;
public static final String SEQ_CONNECTIONDETAILS = "SEQ_EGWTR_CONNECTIONDETAILS";
public enum WorkFlowState {
CREATED, CHECKED, APPROVED, REJECTED, CANCELLED;
}
@Id
@GeneratedValue(generator = SEQ_CONNECTIONDETAILS, strategy = GenerationType.SEQUENCE)
private Long id;
@ManyToOne
@NotNull
@JoinColumn(name = "applicationtype", nullable = false)
private ApplicationType applicationType;
@ManyToOne
@JoinColumn(name = "statusid", nullable = false)
private EgwStatus status;
@ManyToOne(cascade = CascadeType.ALL)
@Valid
@NotNull
@JoinColumn(name = "connection", nullable = false)
private WaterConnection connection;
@Valid
@OneToOne(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private ExistingConnectionDetails existingConnection;
@SafeHtml
private String applicationNumber;
@Temporal(value = TemporalType.DATE)
private Date applicationDate;
@Temporal(value = TemporalType.DATE)
private Date disposalDate;
@NotNull
@Enumerated(EnumType.STRING)
private ConnectionType connectionType;
@ManyToOne
@NotNull
@JoinColumn(name = "category", nullable = false)
private ConnectionCategory category;
@ManyToOne
@NotNull
@JoinColumn(name = "usageType", nullable = false)
private UsageType usageType;
@ManyToOne
@NotNull
@JoinColumn(name = "propertyType", nullable = false)
private PropertyType propertyType;
@ManyToOne
@NotNull
@JoinColumn(name = "waterSource", nullable = false)
private WaterSource waterSource;
@ManyToOne
@NotNull
@JoinColumn(name = "pipeSize", nullable = false)
private PipeSize pipeSize;
private Long sumpCapacity;
private Integer numberOfPerson;
@Length(max = 1024)
private String connectionReason;
private Integer numberOfRooms;
@Length(max = 150)
private String bplCardHolderName;
@NotNull
@Enumerated(EnumType.STRING)
private ConnectionStatus connectionStatus;
@SafeHtml
@Length(min = 3, max = 50)
private String approvalNumber;
@Temporal(value = TemporalType.DATE)
private Date approvalDate;
@Temporal(value = TemporalType.DATE)
private Date workOrderDate;
private String workOrderNumber;
private double donationCharges;
private Boolean legacy = false;
@Temporal(value = TemporalType.DATE)
private Date executionDate;
@Temporal(value = TemporalType.DATE)
private Date closeApprovalDate;
@Temporal(value = TemporalType.DATE)
private Date reconnectionApprovalDate;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "filestoreid")
private FileStoreMapper fileStore;
@ManyToOne
@JoinColumn(name = "chairPerson")
private ChairPerson chairPerson;
private Boolean isHistory = false;
@Valid
@OneToOne(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private FieldInspectionDetails fieldInspectionDetails;
@OrderBy("id")
@OneToMany(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<ApplicationDocuments> applicationDocs = new ArrayList<ApplicationDocuments>(0);
@OrderBy("id")
@OneToMany(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<WaterDemandConnection> waterDemandConnection = new ArrayList<WaterDemandConnection>(0);
@OrderBy("id")
@OneToMany(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<ConnectionEstimationDetails> estimationDetails = new ArrayList<ConnectionEstimationDetails>(0);
@OrderBy("id")
@OneToMany(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<LegacyReceipts> legacyReceipts = new ArrayList<LegacyReceipts>(0);
@OrderBy("id desc")
@OneToMany(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<MeterReadingConnectionDetails> meterConnection = new ArrayList<MeterReadingConnectionDetails>(0);
@OrderBy("ID DESC")
@OneToMany(mappedBy = "waterConnectionDetails", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<NonMeteredConnBillDetails> nonmeteredBillDetails = new HashSet<NonMeteredConnBillDetails>(0);
private String closeConnectionType;
private String previousApplicationType;
@Length(max = 1024)
private String closeconnectionreason;
@Length(max = 1024)
private String reConnectionReason;
@Transient
private String meesevaApplicationNumber;
@Enumerated(EnumType.STRING)
private Source source;
@Transient
private Long approvalDepartment;
@Transient
private String approvalComent;
@Transient
private List<DemandDetail> demandDetailBeanList = new ArrayList<DemandDetail>(0);
public List<MeterReadingConnectionDetails> getMeterConnection() {
return meterConnection;
}
public void setMeterConnection(final List<MeterReadingConnectionDetails> meterConnection) {
this.meterConnection = meterConnection;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(final Long id) {
this.id = id;
}
@Override
public String myLinkId() {
return applicationNumber != null ? applicationNumber : connection.getConsumerCode();
}
public String getPreviousApplicationType() {
return previousApplicationType;
}
public void setPreviousApplicationType(final String previousApplicationType) {
this.previousApplicationType = previousApplicationType;
}
public ApplicationType getApplicationType() {
return applicationType;
}
public void setApplicationType(final ApplicationType applicationType) {
this.applicationType = applicationType;
}
public WaterConnection getConnection() {
return connection;
}
public void setConnection(final WaterConnection connection) {
this.connection = connection;
}
public String getApplicationNumber() {
return applicationNumber;
}
public void setApplicationNumber(final String applicationNumber) {
this.applicationNumber = applicationNumber;
}
public Date getApplicationDate() {
return applicationDate;
}
public void setApplicationDate(final Date applicationDate) {
this.applicationDate = applicationDate;
}
public Date getDisposalDate() {
return disposalDate;
}
public void setDisposalDate(final Date disposalDate) {
this.disposalDate = disposalDate;
}
public ConnectionType getConnectionType() {
return connectionType;
}
public void setConnectionType(final ConnectionType connectionType) {
this.connectionType = connectionType;
}
public ConnectionCategory getCategory() {
return category;
}
public void setCategory(final ConnectionCategory category) {
this.category = category;
}
public UsageType getUsageType() {
return usageType;
}
public void setUsageType(final UsageType usageType) {
this.usageType = usageType;
}
public PropertyType getPropertyType() {
return propertyType;
}
public void setPropertyType(final PropertyType propertyType) {
this.propertyType = propertyType;
}
public WaterSource getWaterSource() {
return waterSource;
}
public void setWaterSource(final WaterSource waterSource) {
this.waterSource = waterSource;
}
public PipeSize getPipeSize() {
return pipeSize;
}
public void setPipeSize(final PipeSize pipeSize) {
this.pipeSize = pipeSize;
}
public Long getSumpCapacity() {
return sumpCapacity;
}
public void setSumpCapacity(final Long sumpCapacity) {
this.sumpCapacity = sumpCapacity;
}
public Integer getNumberOfPerson() {
return numberOfPerson;
}
public void setNumberOfPerson(final Integer numberOfPerson) {
this.numberOfPerson = numberOfPerson;
}
public ConnectionStatus getConnectionStatus() {
return connectionStatus;
}
public void setConnectionStatus(final ConnectionStatus connectionStatus) {
this.connectionStatus = connectionStatus;
}
public String getApprovalNumber() {
return approvalNumber;
}
public void setApprovalNumber(final String approvalNumber) {
this.approvalNumber = approvalNumber;
}
public Date getApprovalDate() {
return approvalDate;
}
public void setApprovalDate(final Date approvalDate) {
this.approvalDate = approvalDate;
}
public String getConnectionReason() {
return connectionReason;
}
public void setConnectionReason(final String connectionReason) {
this.connectionReason = connectionReason;
}
public Integer getNumberOfRooms() {
return numberOfRooms;
}
public void setNumberOfRooms(final Integer numberOfRooms) {
this.numberOfRooms = numberOfRooms;
}
public FieldInspectionDetails getFieldInspectionDetails() {
return fieldInspectionDetails;
}
public void setFieldInspectionDetails(final FieldInspectionDetails fieldInspectionDetails) {
this.fieldInspectionDetails = fieldInspectionDetails;
}
public List<LegacyReceipts> getLegacyReceipts() {
return legacyReceipts;
}
public void setLegacyReceipts(final List<LegacyReceipts> legacyReceipts) {
this.legacyReceipts = legacyReceipts;
}
public List<ApplicationDocuments> getApplicationDocs() {
return applicationDocs;
}
public List<WaterDemandConnection> getWaterDemandConnection() {
return waterDemandConnection;
}
public void setWaterDemandConnection(final List<WaterDemandConnection> waterDemandConnection) {
this.waterDemandConnection = waterDemandConnection;
}
public void addWaterDemandConnection(final WaterDemandConnection waterDemandConnection) {
getWaterDemandConnection().add(waterDemandConnection);
}
public void setApplicationDocs(final List<ApplicationDocuments> applicationDocs) {
this.applicationDocs = applicationDocs;
}
public List<ConnectionEstimationDetails> getEstimationDetails() {
return estimationDetails;
}
public void setEstimationDetails(final List<ConnectionEstimationDetails> estimationDetails) {
this.estimationDetails = estimationDetails;
}
public EgwStatus getStatus() {
return status;
}
public void setStatus(final EgwStatus status) {
this.status = status;
}
@Override
public String getStateDetails() {
final SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
return String.format("Application Number %s with application date %s.",
applicationNumber != null ? applicationNumber : connection.getConsumerCode(),
applicationDate != null ? formatter.format(applicationDate) : formatter.format(new Date()));
}
public String getBplCardHolderName() {
return bplCardHolderName;
}
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 void setBplCardHolderName(final String bplCardHolderName) {
this.bplCardHolderName = bplCardHolderName;
}
public ExistingConnectionDetails getExistingConnection() {
return existingConnection;
}
public void setExistingConnection(final ExistingConnectionDetails existingConnection) {
this.existingConnection = existingConnection;
}
public FileStoreMapper getFileStore() {
return fileStore;
}
public void setFileStore(final FileStoreMapper fileStore) {
this.fileStore = fileStore;
}
public ChairPerson getChairPerson() {
return chairPerson;
}
public void setChairPerson(final ChairPerson chairPerson) {
this.chairPerson = chairPerson;
}
public double getDonationCharges() {
return donationCharges;
}
public void setDonationCharges(final double donationCharges) {
this.donationCharges = donationCharges;
}
public Date getExecutionDate() {
return executionDate;
}
public void setExecutionDate(final Date executionDate) {
this.executionDate = executionDate;
}
public Boolean getLegacy() {
return legacy;
}
public void setLegacy(final Boolean legacy) {
this.legacy = legacy;
}
public Boolean getIsHistory() {
return isHistory;
}
public void setIsHistory(final Boolean isHistory) {
this.isHistory = isHistory;
}
public Set<NonMeteredConnBillDetails> getNonmeteredBillDetails() {
return nonmeteredBillDetails;
}
public void setNonmeteredBillDetails(final Set<NonMeteredConnBillDetails> nonmeteredBillDetails) {
this.nonmeteredBillDetails = nonmeteredBillDetails;
}
public String getCloseConnectionType() {
return closeConnectionType;
}
public void setCloseConnectionType(final String closeConnectionType) {
this.closeConnectionType = closeConnectionType;
}
public String getCloseconnectionreason() {
return closeconnectionreason;
}
public void setCloseconnectionreason(final String closeconnectionreason) {
this.closeconnectionreason = closeconnectionreason;
}
public String getReConnectionReason() {
return reConnectionReason;
}
public void setReConnectionReason(final String reConnectionReason) {
this.reConnectionReason = reConnectionReason;
}
public Date getCloseApprovalDate() {
return closeApprovalDate;
}
public void setCloseApprovalDate(final Date closeApprovalDate) {
this.closeApprovalDate = closeApprovalDate;
}
public Date getReconnectionApprovalDate() {
return reconnectionApprovalDate;
}
public void setReconnectionApprovalDate(final Date reconnectionApprovalDate) {
this.reconnectionApprovalDate = reconnectionApprovalDate;
}
public String getMeesevaApplicationNumber() {
return meesevaApplicationNumber;
}
public void setMeesevaApplicationNumber(final String meesevaApplicationNumber) {
this.meesevaApplicationNumber = meesevaApplicationNumber;
}
public Source getSource() {
return source;
}
public void setSource(final Source source) {
this.source = source;
}
public Long getApprovalDepartment() {
return approvalDepartment;
}
public void setApprovalDepartment(final Long approvalDepartment) {
this.approvalDepartment = approvalDepartment;
}
public String getApprovalComent() {
return approvalComent;
}
public void setApprovalComent(final String approvalComent) {
this.approvalComent = approvalComent;
}
public List<DemandDetail> getDemandDetailBeanList() {
return demandDetailBeanList;
}
public void setDemandDetailBeanList(final List<DemandDetail> demandDetailBeanList) {
this.demandDetailBeanList = demandDetailBeanList;
}
}