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

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.Valid;

import org.hibernate.annotations.SQLDelete;

import br.gov.al.saude.framework.core.generic.identidade.Identidade;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.rhd.model.view.ServidorDadoFuncionalView;
import br.gov.al.saude.rhd.model.view.ServidorView;
import br.gov.al.saude.rhd.model.view.UnidadeView;

@Entity
@Table(name = "rhd_servidor_avaliacao", schema = "sc_rhd")
@SQLDelete(sql="UPDATE sc_rhd.rhd_servidor_avaliacao SET seq_grupo_avaliacao = null WHERE num_ano = ? and seq_servidor_dadofuncional = ?")
public class ServidorAvaliacao implements Serializable, Identidade, Comparable<ServidorAvaliacao>  {

        private static final long serialVersionUID = 1L;

        private ServidorAvaliacaoId servidorAvaliacaoId;
        private ServidorDadoFuncionalView servidorDadoFuncional;
        private Cronograma cronograma;
        private String tipoEfetivoExercicio;
        private GrupoAvaliacao grupoAvaliacao;
        private Boolean participacaoAvaliado;
        private String descricaoJustificativa;
        private Boolean statusAvaliacao;
        private List<RevisaoAvaliacao> revisoes;
       
        public ServidorAvaliacao() {
                servidorDadoFuncional = new ServidorDadoFuncionalView(new ServidorView());
                cronograma = new Cronograma();
                participacaoAvaliado = false;
        }

        public ServidorAvaliacao(String tipoEfetivoExercicio, Boolean participacaoAvaliado, String descricaoJustificativa,
                                                         Long sequencialDadoFuncional, Long numeroMatriculaDadoFuncional, Integer numeroDigitoMatriculaDadoFuncional,
                                                         String nomeServidor, Long numeroAnoCronograma, Long sequencialPessoa) {
                super();
                this.tipoEfetivoExercicio = tipoEfetivoExercicio;
                this.participacaoAvaliado = participacaoAvaliado;
                this.descricaoJustificativa = descricaoJustificativa;
                this.cronograma = new Cronograma(numeroAnoCronograma);
                this.servidorAvaliacaoId = new ServidorAvaliacaoId(sequencialDadoFuncional, numeroAnoCronograma);
                this.servidorDadoFuncional = new ServidorDadoFuncionalView(sequencialDadoFuncional, numeroMatriculaDadoFuncional,
                                                                                                                                   numeroDigitoMatriculaDadoFuncional, nomeServidor, sequencialPessoa);
        }

        @Override
        public void setId(Object id) {
                this.servidorAvaliacaoId = (ServidorAvaliacaoId) id;
        }

        @Override
        @Transient
        public Object getId() {
                return this.servidorAvaliacaoId;
        }
       
        @Valid
        @EmbeddedId
        public ServidorAvaliacaoId getServidorAvaliacaoId() {
                return servidorAvaliacaoId;
        }
       
        public void setServidorAvaliacaoId(ServidorAvaliacaoId servidorAvaliacaoId) {
                this.servidorAvaliacaoId = servidorAvaliacaoId;
        }

        @ManyToOne
        @JoinColumn(name="seq_servidor_dadofuncional", referencedColumnName="seq_servidor_dadofuncional", insertable=false, updatable=false, nullable=false)
        public ServidorDadoFuncionalView getServidorDadoFuncional() {
                return servidorDadoFuncional;
        }
       
        public void setServidorDadoFuncional(ServidorDadoFuncionalView servidorDadoFuncional) {
                this.servidorDadoFuncional = servidorDadoFuncional;
        }

        @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;
        }

        @Column(name="tip_efetivo_exercicio", nullable=false)
        public String getTipoEfetivoExercicio() {
                return tipoEfetivoExercicio;
        }

        public void setTipoEfetivoExercicio(String tipoEfetivoExercicio) {
                this.tipoEfetivoExercicio = tipoEfetivoExercicio;
        }

        @ManyToOne
        @JoinColumn(name="seq_grupo_avaliacao")
        public GrupoAvaliacao getGrupoAvaliacao() {
                return grupoAvaliacao;
        }

        public void setGrupoAvaliacao(GrupoAvaliacao grupoAvaliacao) {
                this.grupoAvaliacao = grupoAvaliacao;
        }

        @OneToMany(mappedBy="servidorAvaliacao", fetch=FetchType.LAZY)
        public List<RevisaoAvaliacao> getRevisoes() {
                return VerificadorUtil.estaNulo(revisoes)? new ArrayList<RevisaoAvaliacao>(): revisoes;
        }

        public void setRevisoes(List<RevisaoAvaliacao> revisoes) {
                this.revisoes = revisoes;
        }
       
        @Column(name = "ind_participacao_avaliado")
        public Boolean getParticipacaoAvaliado() {
                return participacaoAvaliado;
        }
       
        public void setParticipacaoAvaliado(Boolean participacaoAvaliado) {
                this.participacaoAvaliado = participacaoAvaliado;
        }
       
        @Transient
        public String getEfetivoExercicioPorExtenso() {
                if(tipoEfetivoExercicio != null) {
                        char efetivoExercicio = tipoEfetivoExercicio.charAt(0);
                        switch (efetivoExercicio) {
                        case 'S':
                                return "Sim";
                        case 'N':
                                return "Não";
                        case 'P':
                                return "Pendente";
                        default:
                                break;
                        }
                }
                return null;
        }
       
        @Transient
        public String getEfetivoExercicio() {
                if(tipoEfetivoExercicio != null) {
                        return tipoEfetivoExercicio;
                }
                return null;
        }
       
        @Column(name="dsc_justificativa")
        public String getDescricaoJustificativa() {
                return descricaoJustificativa;
        }
       
        public void setDescricaoJustificativa(String descricaoJustificativa) {
                this.descricaoJustificativa = descricaoJustificativa;
        }

        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((servidorAvaliacaoId == null) ? 0 : servidorAvaliacaoId.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;
                ServidorAvaliacao other = (ServidorAvaliacao) obj;
                if (servidorAvaliacaoId == null) {
                        if (other.servidorAvaliacaoId != null)
                                return false;
                } else if (!servidorAvaliacaoId.equals(other.servidorAvaliacaoId))
                        return false;
                return true;
        }
       
        @Transient
        public String getNomeServidor() {
                return getServidorDadoFuncional().getServidorView() != null ? getServidorDadoFuncional().getServidorView().getNome() : "" ;
        }
       
        @Transient
        public String getCpfServidor() {
                return getServidorDadoFuncional().getServidorView() != null ? getServidorDadoFuncional().getServidorView().getCpf() : "" ;
        }
       
        @Transient
        public String getMatriculaServidorConvertidaParaString() {
                return getServidorDadoFuncional() != null ? getServidorDadoFuncional().getNumeroMatricula().toString() : "" ;
        }
       
        @Transient
        public Long getMatriculaServidor() {
                return getServidorDadoFuncional() != null ? getServidorDadoFuncional().getNumeroMatricula() : null ;
        }
       
        @Transient
        public Integer getDigitoMatriculaServidor() {
                return getServidorDadoFuncional() != null ? getServidorDadoFuncional().getNumeroDigitoMatricula() : null ;
        }

        @Override
        public int compareTo(ServidorAvaliacao o) {
                return getNomeServidor().compareToIgnoreCase(o.getNomeServidor());
        }
       
        public void setStatusAvaliacao(Boolean statusAvaliacao) {
                this.statusAvaliacao = statusAvaliacao;
        }
       
        @Transient
        public Boolean getStatusAvaliacao() {
                return statusAvaliacao;
        }
       
        @Transient
        public String getParticipacaoAvaliadoPorExtenso() {
                return getParticipacaoAvaliado()? "Sim" : "Não";
        }
       
        @Transient
        public String getStatusAvaliacaoPorExtenso() {
                return getStatusAvaliacao() ? "Realizado" : "Pendente";
        }
       
        @Transient
        public Long getSequencialDadoFuncionalDoServidor() {
                return getServidorAvaliacaoId() != null ? getServidorAvaliacaoId().getSequencialDadoFuncionalServidor() : null;
        }
       
        @Transient
        public UnidadeView getUnidadeExercicioDadoFuncionalServidor() {
                return VerificadorUtil.naoEstaNulo(getServidorDadoFuncional()) ? getServidorDadoFuncional().getUnidadeExercicio() : null;
        }
       
        @Transient
        public Long getSequencialUnidadeExercicioDadoFuncionalServidor() {
                UnidadeView unidadeExercicio = getUnidadeExercicioDadoFuncionalServidor();
                return VerificadorUtil.naoEstaNulo(unidadeExercicio) ? unidadeExercicio.getSequencial() : null;
        }
       
        @Transient
        public Long getNumeroAnoCronograma() {
                return VerificadorUtil.naoEstaNulo(getCronograma()) ? getCronograma().getNumeroAno() : null;
        }
       
}