Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.gov.al.saude.rhd.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
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 br.gov.al.saude.framework.core.generic.identidade.Identidade;
import br.gov.al.saude.framework.core.interfaces.Alterar;
import br.gov.al.saude.framework.core.interfaces.Cadastrar;
import br.gov.al.saude.framework.core.util.DataUtils;

@Entity
@Table(name = "rhd_cronograma_etapa", schema = "sc_rhd")
public class CronogramaEtapa implements Serializable, Identidade, Comparable<CronogramaEtapa> {
       
        private static final long serialVersionUID = 1L;
       
        private CronogramaEtapaId cronogramaEtapaId = new CronogramaEtapaId();
        private Etapa etapa = new Etapa();
        private Cronograma cronograma = new Cronograma();
        private Date dataInicialEtapa;
        private Date dataFinalEtapa;
       
        @Valid
        @EmbeddedId
        public CronogramaEtapaId getCronogramaEtapaId() {
                return cronogramaEtapaId;
        }

        public void setCronogramaEtapaId(CronogramaEtapaId cronogramaEtapaId) {
                this.cronogramaEtapaId = cronogramaEtapaId;
        }
       
        @ManyToOne
        @JoinColumn(name = "cod_etapa", referencedColumnName = "cod_etapa", insertable = false, updatable = false, nullable = false)
        public Etapa getEtapa() {
                return etapa;
        }

        public void setEtapa(Etapa etapa) {
                this.etapa = etapa;
        }
       
        @ManyToOne
        @JoinColumn(name = "num_ano", referencedColumnName = "num_ano", insertable = false, updatable = false, nullable = false)
        public Cronograma getCronograma() {
                return cronograma;
        }

        public void setCronograma(Cronograma cronograma) {
                this.cronograma = cronograma;
        }

        @Temporal(TemporalType.DATE)
        @NotNull(message="Obrigatório informar a data inicial da etapa.", groups={Cadastrar.class, Alterar.class})
        @Column(name="dat_inicial_etapa", nullable=false)
        public Date getDataInicialEtapa() {
                return dataInicialEtapa;
        }

        public void setDataInicialEtapa(Date dataInicialEtapa) {
                this.dataInicialEtapa = dataInicialEtapa;
        }
       
        @Temporal(TemporalType.DATE)
        @NotNull(message="Obrigatório informar a data final da etapa.", groups={Cadastrar.class, Alterar.class})      
        @Column(name="dat_final_etapa", nullable=false)
        public Date getDataFinalEtapa() {
                return dataFinalEtapa;
        }

        public void setDataFinalEtapa(Date dataFinalEtapa) {
                this.dataFinalEtapa = dataFinalEtapa;
        }
       
        @Override
        @Transient
        public Object getId() {
                return cronogramaEtapaId;
        }

        @Override
        public void setId(Object id) {
                this.cronogramaEtapaId = (CronogramaEtapaId) id;
        }

        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result
                                + ((cronogramaEtapaId == null) ? 0 : cronogramaEtapaId.hashCode());
                result = prime * result
                                + ((dataFinalEtapa == null) ? 0 : dataFinalEtapa.hashCode());
                result = prime * result
                                + ((dataInicialEtapa == null) ? 0 : dataInicialEtapa.hashCode());
                return result;
        }

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                CronogramaEtapa other = (CronogramaEtapa) obj;
                if (cronogramaEtapaId == null) {
                        if (other.cronogramaEtapaId != null)
                                return false;
                } else if (!cronogramaEtapaId.equals(other.cronogramaEtapaId))
                        return false;
                if (dataFinalEtapa == null) {
                        if (other.dataFinalEtapa != null)
                                return false;
                } else if (!dataFinalEtapa.equals(other.dataFinalEtapa))
                        return false;
                if (dataInicialEtapa == null) {
                        if (other.dataInicialEtapa != null)
                                return false;
                } else if (!dataInicialEtapa.equals(other.dataInicialEtapa))
                        return false;
                return true;
        }

        @Override
        public int compareTo(CronogramaEtapa cronogramaEtapa) {
                return this.dataInicialEtapa.compareTo(cronogramaEtapa.getDataInicialEtapa());
        }
       
        @Transient
        private Date recuperarDataAtual() {
                return DataUtils.converterStringParaData(DataUtils.converterDataParaString(new Date()));
        }
       
        @Transient
        public Boolean isDataEtapaConcluida() {
                return isDataEstaVigente().equals(Boolean.FALSE) && this.getDataFinalEtapa().before(recuperarDataAtual());
        }
       
        @Transient
        public Boolean isDataEtapaFutura() {
                return isDataEstaVigente().equals(Boolean.FALSE) && this.getDataInicialEtapa().after(recuperarDataAtual());
        }
       
        @Transient
        public Boolean isDataEstaVigente() {
                Date dataAtual = recuperarDataAtual();
                return (this.getDataInicialEtapa().before(dataAtual) || this.getDataInicialEtapa().equals(dataAtual)) &&
                                (this.getDataFinalEtapa().after(dataAtual) || this.getDataFinalEtapa().equals(dataAtual));
        }
       
}