Subversion Repositories Integrator Subversion

Rev

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

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

import static br.gov.al.saude.scs.constantes.ContantesScs.MensagensContantes.MSG_ERRO_OBRIGATORIO_INFORMAR_AH_DATA_EH_HORA;
import static br.gov.al.saude.scs.constantes.ContantesScs.MensagensContantes.MSG_OBRIGATORIO_INFORMAR_AH_TURMA;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
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.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.hibernate.annotations.ForeignKey;

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.VerificadorUtil;

@Entity
@Table(name = "scs_frequencia", schema = "sc_scs")
public class Frequencia implements Serializable, Identidade {
       
        private static final long serialVersionUID = 1L;
       
        private Long sequencial;
        private Turma turma;
        private Date data;
        private Boolean indicadorValidado;
        private Boolean indicadorAtivo;
        private Set<Presenca> presencas;
       
        @Id
        @GeneratedValue(generator="frequencia_generator", strategy=GenerationType.SEQUENCE)
        @SequenceGenerator(name="frequencia_generator", sequenceName="sq_frequencia", initialValue = 1, allocationSize = 1, schema="sc_scs")
        @Column(name="seq_frequencia", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @ManyToOne
        @ForeignKey(name = "fk_frequencia_turma")
        @JoinColumn(name = "seq_turma", referencedColumnName = "seq_turma", nullable = false)
        @NotNull(message=MSG_OBRIGATORIO_INFORMAR_AH_TURMA, groups={Cadastrar.class, Alterar.class})
        public Turma getTurma() {
                return turma;
        }
       
        public void setTurma(Turma turma) {
                this.turma = turma;
        }
       
        @Transient
        public Long getSequencialTurma() {
                return VerificadorUtil.naoEstaNulo(getTurma()) ? getTurma().getSequencial() : null;
        }
       
        @Transient
        public Object getDescricaoCapacitacao() {
                return VerificadorUtil.naoEstaNulo(getSequencialTurma()) ?
                           VerificadorUtil.naoEstaNulo(getTurma().getCapacitacao()) ?
                           getTurma().getCapacitacao().getDescricao() : null : null;
        }
       
        @Temporal(TemporalType.TIMESTAMP)
        @Column(name="dth_data", nullable = false)
        @NotNull(message=MSG_ERRO_OBRIGATORIO_INFORMAR_AH_DATA_EH_HORA, groups={Cadastrar.class, Alterar.class})
        public Date getData() {
                return data;
        }
       
        public void setData(Date data) {
                this.data = data;
        }
       
        @Column(name="ind_validado")
        public Boolean getIndicadorValidado() {
                return VerificadorUtil.naoEstaNulo(indicadorValidado) ? indicadorValidado : false;
        }
       
        public void setIndicadorValidado(Boolean indicadorValidado) {
                this.indicadorValidado = indicadorValidado;
        }
       
        @Transient
        public String getDescricaoIndicadorValidado(){
                return VerificadorUtil.naoEstaNulo(getIndicadorValidado()) ? getIndicadorValidado() ? "Sim" : "Não" : null;
        }
       
        @Column(name="ind_ativo", nullable = false)
        public Boolean getIndicadorAtivo() {
                return VerificadorUtil.naoEstaNulo(indicadorAtivo) ? indicadorAtivo : false;
        }

        public void setIndicadorAtivo(Boolean indicadorAtivo) {
                this.indicadorAtivo = indicadorAtivo;
        }
       
        @Transient
        public String getDescricaoIndicadorAtivo(){
                return VerificadorUtil.naoEstaNulo(getIndicadorAtivo()) ? getIndicadorAtivo() ? "Sim" : "Não" : null;
        }

        @Valid
        @OneToMany(mappedBy="frequencia", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<Presenca> getPresencas() {
                return presencas;
        }
       
        @Transient
        public List<Presenca> getPresencasAsListOrdenadaPorNomeParticipante(){
                List<Presenca> listaOrdenada = null;
                if(VerificadorUtil.naoEstaNulo(getPresencas())){
                        listaOrdenada = new ArrayList<Presenca>(getPresencas());
                        Collections.sort(listaOrdenada, new Comparator<Presenca>() {
                                @Override
                                public int compare(Presenca presenca, Presenca outraPresenca) {
                                        return presenca.getTurmaParticipante().getPessoa().getNomePessoa().compareTo(outraPresenca.getTurmaParticipante().getPessoa().getNomePessoa());
                                }
                        });
                }
                return listaOrdenada;
        }
       
        public void setPresencas(Set<Presenca> presencas) {
                this.presencas = presencas;
        }
       
        @Override
        @Transient
        public Object getId() {
                return sequencial;
        }

        @Override
        public void setId(Object id) {
                this.sequencial = (Long) id;
        }
       
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((sequencial == null) ? 0 : sequencial.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;
                Frequencia other = (Frequencia) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
       
}