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.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
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.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

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;
import br.gov.al.saude.rhd.model.view.UnidadeView;
import br.gov.al.saude.scg.model.view.PessoaFisicaView;

@Entity
@Table(name = "rhd_grupo_avaliacao", schema = "sc_rhd")
public class GrupoAvaliacao implements Serializable, Identidade {
       
        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private String descricao;
        private String tipoSituacao;
        private String observacao;
        private UnidadeView unidade;
        private PessoaFisicaView avaliador;
        private Cronograma cronograma;
        private Set<ServidorAvaliacao> servidoresAvaliados;
       
        @Id
        @Column(name="seq_grupo_avaliacao", nullable=false)
        @GeneratedValue(generator = "GRUPO_AVALICAO_GENERATOR", strategy = GenerationType.SEQUENCE)
        @SequenceGenerator(name = "GRUPO_AVALICAO_GENERATOR", sequenceName = "SQ_GRUPOAVALIAC", initialValue = 1, allocationSize = 1)
        public Long getSequencial() {
                return sequencial;
        }

        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @NotNull(message="Obrigatório informar descrição", groups={Cadastrar.class, Alterar.class})
        @NotEmpty(message="Obrigatório informar descrição", groups={Cadastrar.class, Alterar.class})
        @Column(name="dsc_grupo_avaliacao", nullable=false)
        public String getDescricao() {
                return descricao;
        }

        public void setDescricao(String descricao) {
                this.descricao = descricao;
        }
       
        @Column(name="tip_situacao_grupo", nullable=false)
        public String getTipoSituacao() {
                return tipoSituacao;
        }
       
        @Transient
        public String getDescricaoTipoSituacao() {
                if(VerificadorUtil.naoEstaNuloOuVazio(getTipoSituacao())){
                        switch (getTipoSituacao().charAt(0)) {
                                case 'A':
                                        return "Aprovado";
                                case 'P':
                                        return "Pendente";
                                case 'N':
                                        return "Não aprovado";
                        }
                }
                return null;
        }

        public void setTipoSituacao(String tipoSituacao) {
                this.tipoSituacao = tipoSituacao;
        }
       
        @Column(name="dsc_observacao")
        public String getObservacao() {
                return observacao;
        }

        public void setObservacao(String observacao) {
                this.observacao = observacao;
        }
       
        @ManyToOne
        @JoinColumn(name="cod_unidade_cadastro", nullable=false)
        public UnidadeView getUnidade() {
                return unidade;
        }
       
        @Transient
        public String getDescricaoUnidade(){
                return VerificadorUtil.naoEstaNulo(unidade) ? unidade.getDescricao() : null;
        }

        public void setUnidade(UnidadeView unidade) {
                this.unidade = unidade;
        }
       
        @NotNull(message="Obrigatório informar avaliados", groups={Cadastrar.class, Alterar.class})
        @NotEmpty(message="Obrigatório informar avaliados", groups={Cadastrar.class, Alterar.class})
        @OneToMany(mappedBy="grupoAvaliacao", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE}, orphanRemoval=true)
        public Set<ServidorAvaliacao> getServidoresAvaliados() {
                return servidoresAvaliados;
        }

        @Transient
        public List<ServidorAvaliacao> getServidorAvaliacaosAsListOrdenado(){
                List<ServidorAvaliacao> servidoresAvaliadosOrdenados = null;
                if(VerificadorUtil.naoEstaNulo(getServidoresAvaliados())){
                        servidoresAvaliadosOrdenados = new ArrayList<ServidorAvaliacao>(getServidoresAvaliados());
                        Collections.sort(servidoresAvaliadosOrdenados, new Comparator<ServidorAvaliacao>() {
                                public int compare(ServidorAvaliacao o1, ServidorAvaliacao o2) {
                                        return o1.getServidorDadoFuncional().getServidorView().getNome().compareTo(o2.getServidorDadoFuncional().getServidorView().getNome());
                                };
                        });
                }
                return servidoresAvaliadosOrdenados;
        }
       
        public void setServidoresAvaliados(Set<ServidorAvaliacao> servidoresAvaliados) {
                this.servidoresAvaliados = servidoresAvaliados;
        }
       
        @NotNull(message="Obrigatório informar avaliador", groups={Cadastrar.class, Alterar.class})
        @ManyToOne
        @JoinColumn(name="seq_pessoa_avaliador", referencedColumnName="seq_pessoa")
        public PessoaFisicaView getAvaliador() {
                return avaliador;
        }
       
        @Transient
        public String getNomeAvaliador(){
                return VerificadorUtil.naoEstaNulo(avaliador) ? avaliador.getNomePessoa() : null;
        }
       
        public void setAvaliador(PessoaFisicaView servidorAvaliador) {
                this.avaliador = servidorAvaliador;
        }
       
        @ManyToOne
        @JoinColumn(name="num_ano", referencedColumnName="num_ano")
        public Cronograma getCronograma() {
                return cronograma;
        }
       
        public void setCronograma(Cronograma cronograma) {
                this.cronograma = cronograma;
        }
       
        @Transient
        public String getSituacaoPorExtenso() {
                if("A".equals(tipoSituacao))
                        return "Aprovado";
                if("N".equals(tipoSituacao))
                        return "Não Aprovado";
                if("P".equals(tipoSituacao))
                        return "Pendente";
                return null;
        }
       
        @Override
        @Transient
        public Object getId() {
                return this.sequencial;
        }

        @Override
        public void setId(Object id) {
                this.sequencial = (Long) id;
        }
       
        public void adicionarServidorAvaliacao(ServidorAvaliacao servidorAvaliacao) {
                if (servidoresAvaliados == null) {
                        servidoresAvaliados = new HashSet<ServidorAvaliacao>();
                }
                servidoresAvaliados.add(servidorAvaliacao);
        }
       
        public void removerServidorAvaliacao(ServidorAvaliacao servidorAvaliacao) {
                if (servidoresAvaliados != null) {
                        servidoresAvaliados.remove(servidorAvaliacao);
                }
        }

        @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;
                GrupoAvaliacao other = (GrupoAvaliacao) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
}