Subversion Repositories Integrator Subversion

Rev

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

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

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

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
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.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.DocumentoUtils;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.framework.model.PessoaDocumentoView;
import br.gov.al.saude.framework.model.PessoaFisicaView;
import br.gov.al.saude.framework.model.UsuarioView;
import br.gov.al.saude.srv.model.enums.TipoSituacaoCadastral;

@Entity
@Table(name = "srv_servidor", schema = "sc_srv")
public class Servidor implements Serializable, Identidade {

        private static final long serialVersionUID = 1L;
        private PessoaFisicaView pessoa = new PessoaFisicaView();
        private String observacao;
        private String tipoSituacaoCadastral;
        private GrauInstrucao grauInstrucao;
        private Deficiencia deficiencia;
        private UsuarioView usuario = new UsuarioView();
        private UsuarioView usuarioAlteraSituacaoCadastral;
        private Nacionalidade nacionalidade;
        private Date dataHoraCadastro;
        private Date dataHoraAlteracao;
        private byte[] foto;
        private ServidorLocalizacaoArquivo servidorLocalizacaoArquivo;
       
        private Set<ServidorDadoFuncional> listaServidorDadoFuncional;
        private Set<ServidorQualificacao> listaServidorQualificacao;
        private Set<ServidorDependente> listaServidorDependente;
        private Set<ServidorContaBancaria> listaServidorContaBancaria;
       
        public Servidor(){
                tipoSituacaoCadastral = TipoSituacaoCadastral.PENDENTE.getValue();
                listaServidorDadoFuncional = new HashSet<ServidorDadoFuncional>();
                listaServidorQualificacao = new HashSet<ServidorQualificacao>();
                listaServidorDependente = new HashSet<ServidorDependente>();
                listaServidorContaBancaria = new HashSet<ServidorContaBancaria>();
        }
       
        @Id
        @OneToOne
        @JoinColumn(name="seq_pessoa_servidor", referencedColumnName="seq_pessoa")
        public PessoaFisicaView getPessoa() {
                return pessoa;
        }
        public void setPessoa(PessoaFisicaView pessoa) {
                this.pessoa = pessoa;
        }

       
        @Column(name="dsc_observacao")
        public String getObservacao() {
                return observacao;
        }
        public void setObservacao(String observacao) {
                this.observacao = observacao;
        }
       
        @Column(name="tip_situacao_cadastral", length=1, nullable=false)
        public String getTipoSituacaoCadastral() {
                return tipoSituacaoCadastral;
        }
        public void setTipoSituacaoCadastral(String tipoSituacaoCadastral) {
                this.tipoSituacaoCadastral = tipoSituacaoCadastral;
        }
        public void setTipoSituacaoCadastral(TipoSituacaoCadastral tipoSituacaoCadastral) {
                this.tipoSituacaoCadastral = tipoSituacaoCadastral.getValue();
        }
        @Transient
        public TipoSituacaoCadastral getSituacaoCadastral() {
                if(VerificadorUtil.naoEstaNulo(tipoSituacaoCadastral)) {
                        return TipoSituacaoCadastral.parse(tipoSituacaoCadastral);
                }
                return null;
        }
       
        @Transient
        public String getDescricaoTipoSituacaoCadastral() {
                return VerificadorUtil.estaNulo(this.getTipoSituacaoCadastral())?null:TipoSituacaoCadastral.parse(this.getTipoSituacaoCadastral()).getDescricao();
        }

        @ManyToOne
        @JoinColumn(name="cod_grau_instrucao", referencedColumnName="cod_grau_instrucao")
        @NotNull(message="Obrigatório informar o grau de instrução.", groups={Cadastrar.class, Alterar.class})
        public GrauInstrucao getGrauInstrucao() {
                return grauInstrucao;
        }
        public void setGrauInstrucao(GrauInstrucao grauInstrucao) {
                this.grauInstrucao = grauInstrucao;
        }

        @ManyToOne
        @JoinColumn(name="cod_deficiencia", referencedColumnName="cod_deficiencia")
        public Deficiencia getDeficiencia() {
                return deficiencia;
        }
        public void setDeficiencia(Deficiencia deficiencia) {
                this.deficiencia = deficiencia;
        }

        @ManyToOne
        @JoinColumn(name="seq_pessoa_usuario", referencedColumnName="seq_pessoa")
        public UsuarioView getUsuario() {
                return usuario;
        }
        public void setUsuario(UsuarioView usuario) {
                this.usuario = usuario;
        }

        @ManyToOne
        @JoinColumn(name="seq_pessoa_alterasitocadast", referencedColumnName="seq_pessoa")
        public UsuarioView getUsuarioAlteracaoSituacaoCadastral() {
                return usuarioAlteraSituacaoCadastral;
        }
        public void setUsuarioAlteracaoSituacaoCadastral(UsuarioView usuarioAlteraSituacaoCadastral) {
                this.usuarioAlteraSituacaoCadastral = usuarioAlteraSituacaoCadastral;
        }

        @ManyToOne
        @JoinColumn(name="cod_nacionalidade", referencedColumnName="cod_nacionalidade")
        @NotNull(message="Obrigatório informar a nacionalidade.", groups={Cadastrar.class, Alterar.class})
        public Nacionalidade getNacionalidade() {
                return nacionalidade;
        }
        public void setNacionalidade(Nacionalidade nacionalidade) {
                this.nacionalidade = nacionalidade;
        }

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name="dth_cadastro")
        public Date getDataHoraCadastro() {
                return dataHoraCadastro;
        }
        public void setDataHoraCadastro(Date dataHoraCadastro) {
                this.dataHoraCadastro = dataHoraCadastro;
        }

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name="dth_alteracao")
        public Date getDataHoraAlteracao() {
                return dataHoraAlteracao;
        }
        public void setDataHoraAlteracao(Date dataHoraAlteracao) {
                this.dataHoraAlteracao = dataHoraAlteracao;
        }

        @Column(name="obj_foto")
        public byte[] getFoto() {
                return foto;
        }

        public void setFoto(byte[] foto) {
                this.foto = foto;
        }

        @OneToOne(mappedBy="servidor", cascade=CascadeType.ALL, orphanRemoval = true)
        public ServidorLocalizacaoArquivo getServidorLocalizacaoArquivo() {
                return servidorLocalizacaoArquivo;
        }
        public void setServidorLocalizacaoArquivo(ServidorLocalizacaoArquivo servidorLocalizacaoArquivo) {
                this.servidorLocalizacaoArquivo = servidorLocalizacaoArquivo;
        }
       
        @Valid
        @NotEmpty(message="Obrigatório informar dado funcional.", groups={Cadastrar.class, Alterar.class})
        @OneToMany(mappedBy="servidor", cascade=CascadeType.ALL, orphanRemoval = true)
        public Set<ServidorDadoFuncional> getListaServidorDadoFuncional() {
                return listaServidorDadoFuncional;
        }
        public void setListaServidorDadoFuncional(Set<ServidorDadoFuncional> listaServidorDadoFuncional) {
                this.listaServidorDadoFuncional = listaServidorDadoFuncional;
        }

        @Valid
        @OneToMany(mappedBy="servidor", cascade=CascadeType.ALL, orphanRemoval = true)
        public Set<ServidorQualificacao> getListaServidorQualificacao() {
                return listaServidorQualificacao;
        }
        public void setListaServidorQualificacao(Set<ServidorQualificacao> listaServidorQualificacao) {
                this.listaServidorQualificacao = listaServidorQualificacao;
        }

        @Valid
        @OneToMany(mappedBy="servidor", cascade=CascadeType.ALL, orphanRemoval = true)
        public Set<ServidorDependente> getListaServidorDependente() {
                return listaServidorDependente;
        }
        public void setListaServidorDependente(Set<ServidorDependente> listaServidorDependente) {
                this.listaServidorDependente = listaServidorDependente;
        }

        @Valid
        @OneToMany(mappedBy="servidor", cascade=CascadeType.ALL, orphanRemoval = true) 
        public Set<ServidorContaBancaria> getListaServidorContaBancaria() {
                return listaServidorContaBancaria;
        }
        public void setListaServidorContaBancaria(Set<ServidorContaBancaria> listaServidorContaBancaria) {
                this.listaServidorContaBancaria = listaServidorContaBancaria;
        }
       
        @Transient
        public boolean isSituacaoCadastralHomologado(){
                return getTipoSituacaoCadastral().equals(TipoSituacaoCadastral.HOMOLOGADO.getValue());
        }
       
        @Transient
        public boolean isSituacaoCadastralPendente(){
                return getTipoSituacaoCadastral().equals(TipoSituacaoCadastral.PENDENTE.getValue());
        }
       
        @Transient
        public boolean isSituacaoCadastralValidado(){
                return getTipoSituacaoCadastral().equals(TipoSituacaoCadastral.VALIDADO.getValue());
        }

        @Transient
        @Override
        public Object getId() {
                return this.pessoa.getSequencialPessoa();
        }
        @Override
        public void setId(Object id) {
                this.pessoa.setSequencialPessoa((Long) id);
        }
       
        @Transient
        public Set<PessoaDocumentoView> getListaDocumentosDePessoa() {
                return (VerificadorUtil.naoEstaNulo(getPessoa())? getPessoa().getDocumentos(): null);
        }
       
        @Transient
        public Long getSequencialDaPessoa() {
                return (VerificadorUtil.naoEstaNulo(getPessoa())? getPessoa().getSequencialPessoa() : null);
        }
       
        @Transient
        public String getNomeDaPessoa() {
                return (VerificadorUtil.naoEstaNulo(getPessoa())? getPessoa().getNomePessoa(): null);
        }
       
        @Transient
        public String getNumeroCpfFormatado(){
                try {
                        return DocumentoUtils.adicionarMascaraCpf(getPessoa().getNumeroDocumento());
                } catch (Exception e) {
                        return null;
                }
        }

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

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (!(obj instanceof Servidor))
                        return false;
                Servidor other = (Servidor) obj;
                if (pessoa == null) {
                        if (other.pessoa != null)
                                return false;
                } else if (!pessoa.equals(other.pessoa))
                        return false;
                return true;
        }
}