Subversion Repositories Integrator Subversion

Rev

Rev 468 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.model;

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

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.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

import br.com.ec.core.interfaces.Alterar;
import br.com.ec.core.interfaces.Cadastrar;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.PessoaDTO;
import br.com.ec.domain.model.nfe.TipoNotaFiscalInscricaoEstadual;
import br.com.ec.domain.model.tipos.TipoDependentes;
import br.com.ec.domain.model.tipos.TipoEscolaridade;
import br.com.ec.domain.model.tipos.TipoEstadoCivil;
import br.com.ec.domain.model.tipos.TipoPessoa;
import br.com.ec.domain.model.tipos.TipoRacaCor;
import br.com.ec.domain.model.tipos.TipoSexo;
import br.com.ec.web.converters.FormatarUtil;

@Entity
@Table(name="sec_pessoa", schema="sc_sec")
public class Pessoa implements Serializable {

        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private String nome;
        private String tipoPessoa;
        private String cpfCnpj;
        private String email;
        private String telefone;
        private String contato;
        private String observacao;
       
        //      PESSOA FÍSICA
        private String sexo;
        private String rg;
        private Date rgDataExpedicao;
        private String rgOrgaoEmissor;
        private Date dataNascimento;
        private String nacionalidade;
        private String localNascimento;
        private String ufNascimento;
        private String nomePai;
        private String nomeMae;
        private String tipoEstadoCivil;
        private String tipoRacaCor;
        private String tipoEscolaridade;
       
        private Boolean pessoaDeficienteMotora;
        private Boolean pessoaDeficienteVisual;
        private Boolean pessoaDeficienteAuditiva;
        private Boolean pessoaReabilitado;
        private String pessoaDeficienteObservacao;
       
        private String tipoDependendes;
        private String dadosDependentes;
        private Boolean dependentesFinsIRRF;
        private Boolean dependentesFinsSalarioFamilia;
       
        //      PESSOA JURÍDICA
        private String nomeFantasia;
        private String razaoSocial;
        private String inscricaoEstadual;
        private String tipoInscricaoEstadual;
        private String inscricaoMunicipal;
        private String tipoRegimeTributario;
       
        //      CLIENTE
        private Boolean indicadorNovidades;
       
        private Boolean cadastroFinalizado;
        private boolean ativo;
       
        private List<Endereco> enderecos;
        private List<PessoaPapel> papeis;
        private Funcionario funcionario;
       
        public Pessoa() {
//              setTipoPessoa(TipoPessoa.FISICA_F.getValor());
//              setInscricaoEstadualIsento(false);
                /*
                setPapeis(new HashSet<PessoaPapel>());
                setEnderecos(new HashSet<Endereco>());
                setDadosBancarios(new HashSet<DadosBancarios>());
                */

        }
       
        public Pessoa(PessoaDTO pessoaDTO) {
                this.sequencial = pessoaDTO.getSequencial();
                this.nome = pessoaDTO.getNome();
                this.tipoPessoa = pessoaDTO.getTipoPessoa();
                this.cpfCnpj = pessoaDTO.getCpfCnpj();
                this.email = pessoaDTO.getEmail();
                this.telefone = pessoaDTO.getTelefone();
                this.contato = pessoaDTO.getContato();
                this.observacao = pessoaDTO.getObservacao();
       
        //      PESSOA FÍSICA
                this.sexo = pessoaDTO.getSexo();
                this.rg = pessoaDTO.getRg();
                this.rgDataExpedicao = pessoaDTO.getRgDataExpedicao();
                this.rgOrgaoEmissor = pessoaDTO.getRgOrgaoEmissor();
                this.dataNascimento = pessoaDTO.getDataNascimento();
                this.nacionalidade = pessoaDTO.getNacionalidade();
                this.localNascimento = pessoaDTO.getLocalNascimento();
                this.ufNascimento = pessoaDTO.getUfNascimento();
                this.nomePai = pessoaDTO.getNomePai();
                this.nomeMae = pessoaDTO.getNomeMae();
                this.tipoEstadoCivil = pessoaDTO.getTipoEstadoCivil();
                this.tipoRacaCor = pessoaDTO.getTipoRacaCor();
                this.tipoEscolaridade = pessoaDTO.getTipoEscolaridade();
        }
       
        //      PESSOA JURÍDICA
                /*
                this.nomeFantasia = pessoaDTO.getN;
                this.razaoSocial = pessoaDTO.;
                this.inscricaoEstadual = pessoaDTO.;
                this.inscricaoEstadualIsento = pessoaDTO.;
                this.inscricaoMunicipal = pessoaDTO.;
                this.tipoRegimeTributario = pessoaDTO.;
                */

       
        public Pessoa(Long sequencialPessoa) {
                this.sequencial = sequencialPessoa;
        }

        @Id
        @SequenceGenerator(name = "sq_pessoa")
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="seq_pessoa", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @Column(name="dsc_nome")
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Nome")
        @NotEmpty(message="Obrigatório informar o nome", groups={Cadastrar.class, Alterar.class})
        public String getNome() {
                return nome;
        }
        public void setNome(String nome) {
                this.nome = StringUtil.setarUpperCaseComTrim(nome);
        }
       
        @Column(name="tip_pessoa")
        public String getTipoPessoa() {
                return tipoPessoa;
        }
        public void setTipoPessoa(String tipoPessoa) {
                this.tipoPessoa = tipoPessoa;
        }
        @Transient
        public String getDescricaoDoTipoDaPessoa() {
                return VerificadorUtil.naoEstaNulo(getTipoPessoa())? TipoPessoa.parse(getTipoPessoa()).getDescricao() : null;
        }
       
        @Column(name="dsc_cpf_cnpj")
        @Size(max = 20, message = "Limite de caracteres ultrapassado: CPF/CNPJ")
        public String getCpfCnpj() {
                return cpfCnpj;
        }
        public void setCpfCnpj(String cpfCnpj) {
                this.cpfCnpj = cpfCnpj;
        }
       
        @Column(name="dsc_email")
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Email")
        public String getEmail() {
                return email;
        }
        public void setEmail(String email) {
                this.email = StringUtil.setarLowerCase(email);
        }
       
        @Column(name="dsc_telefone")
        @Size(max = 11, message = "Limite de caracteres ultrapassado: Telefone")
        public String getTelefone() {
                return telefone;
        }
        public void setTelefone(String telefone) {
                this.telefone = telefone;
        }
       
        @Column(name="dsc_contato")
        public String getContato() {
                return contato;
        }
        public void setContato(String contato) {
                this.contato = contato;
        }
       
        @Column(name="dsc_observacao")
        @Size(max = 240, message = "Limite de caracteres ultrapassado: Observação")
        public String getObservacao() {
                return observacao;
        }
        public void setObservacao(String observacao) {
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
        }
        /*
        @Valid
        @OneToMany(mappedBy="pessoa", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<PessoaPapel> getPapeis() {
                return papeis;
        }
        public void setPapeis(Set<PessoaPapel> papeis) {
                this.papeis = papeis;
        }
        */

        @Column(name="tip_sexo")
        public String getSexo() {
                return sexo;
        }
        public void setSexo(String sexo) {
                this.sexo = sexo;
        }
        @Transient
        public String getDescricaoDoSexo() {
                return VerificadorUtil.naoEstaNulo(getSexo())? TipoSexo.parse(getSexo()).getDescricao() : null;
        }

        @Column(name="dsc_rg")
        @Size(max = 20, message = "Limite de caracteres ultrapassado: RG")
        public String getRg() {
                return rg;
        }
        public void setRg(String rg) {
                this.rg = rg;
        }
       
        @Column(name="dsc_rg_orgaoemissor")
        @Size(max = 10, message = "Limite de caracteres ultrapassado: Orgão Emissor do RG")
        public String getRgOrgaoEmissor() {
                return rgOrgaoEmissor;
        }
        public void setRgOrgaoEmissor(String rgOrgaoEmissor) {
                this.rgOrgaoEmissor = StringUtil.setarUpperCaseComTrim(rgOrgaoEmissor);
        }
       
        @Column(name="dsc_rg_dataexpedicao")
        public Date getRgDataExpedicao() {
                return rgDataExpedicao;
        }
        public void setRgDataExpedicao(Date rgDataExpedicao) {
                this.rgDataExpedicao = rgDataExpedicao;
        }
        @Transient
        public String getRgDataExpedicaoFormatada() {
                return VerificadorUtil.naoEstaNulo(getRgDataExpedicao())? FormatarUtil.retornarDataFormatada(getRgDataExpedicao()) : "";
        }
       
        @Column(name="dat_nascimento")
        public Date getDataNascimento() {
                return dataNascimento;
        }
        public void setDataNascimento(Date dataNascimento) {
                this.dataNascimento = dataNascimento;
        }
        @Transient
        public String getDataNascimentoFormatada() {
                return VerificadorUtil.naoEstaNulo(getDataNascimento())? FormatarUtil.retornarDataFormatada(getDataNascimento()) : "";
        }
       
        @Column(name="dsc_nacionalidade")
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Nacionalidade")
        public String getNacionalidade() {
                return nacionalidade;
        }
        public void setNacionalidade(String nacionalidade) {
                this.nacionalidade = StringUtil.setarUpperCaseComTrim(nacionalidade);
        }
       
        @Column(name="dsc_nascimento_local")
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Local do Nascimento")
        public String getLocalNascimento() {
                return localNascimento;
        }
        public void setLocalNascimento(String localNascimento) {
                this.localNascimento = StringUtil.setarUpperCaseComTrim(localNascimento);
        }
       
        @Column(name="dsc_nascimento_uf")
        @Size(max = 2, message = "Limite de caracteres ultrapassado: UF do Nascimento")
        public String getUfNascimento() {
                return ufNascimento;
        }
        public void setUfNascimento(String ufNascimento) {
                this.ufNascimento = StringUtil.setarUpperCaseComTrim(ufNascimento);
        }
       
        @Column(name="dsc_nome_pai")
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Nome do Pai")
        public String getNomePai() {
                return nomePai;
        }
        public void setNomePai(String nomePai) {
                this.nomePai = StringUtil.setarUpperCaseComTrim(nomePai);
        }
       
        @Column(name="dsc_nome_mae")
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Nome da Mãe")
        public String getNomeMae() {
                return nomeMae;
        }
        public void setNomeMae(String nomeMae) {
                this.nomeMae = StringUtil.setarUpperCaseComTrim(nomeMae);
        }
       
        @Column(name="tip_estado_civil")
        public String getTipoEstadoCivil() {
                return tipoEstadoCivil;
        }
        public void setTipoEstadoCivil(String tipoEstadoCivil) {
                this.tipoEstadoCivil = tipoEstadoCivil;
        }
        @Transient
        public String getDescricaoDoEstadoCivil() {
                return VerificadorUtil.naoEstaNulo(getTipoEstadoCivil())? TipoEstadoCivil.parse(getTipoEstadoCivil()).getDescricao() : null;
        }
       
        @Column(name="tip_raca_cor")
        public String getTipoRacaCor() {
                return tipoRacaCor;
        }
        public void setTipoRacaCor(String tipoRacaCor) {
                this.tipoRacaCor = tipoRacaCor;
        }
        @Transient
        public String getDescricaoDaRacaCor() {
                return VerificadorUtil.naoEstaNulo(getTipoRacaCor())? TipoRacaCor.parse(getTipoRacaCor()).getDescricao() : null;
        }
       
        @Column(name="tip_escolaridade")
        public String getTipoEscolaridade() {
                return tipoEscolaridade;
        }
        public void setTipoEscolaridade(String tipoEscolaridade) {
                this.tipoEscolaridade = tipoEscolaridade;
        }
        @Transient
        public String getDescricaoDaEscolaridade() {
                return VerificadorUtil.naoEstaNulo(getTipoEscolaridade())? TipoEscolaridade.parse(getTipoEscolaridade()).getDescricao() : null;
        }
       
        @Column(name="ind_deficiente_motora")
        public Boolean getPessoaDeficienteMotora() {
                return pessoaDeficienteMotora;
        }
        public void setPessoaDeficienteMotora(Boolean pessoaDeficienteMotora) {
                this.pessoaDeficienteMotora = pessoaDeficienteMotora;
        }
       
        @Column(name="ind_deficiente_visual")
        public Boolean getPessoaDeficienteVisual() {
                return pessoaDeficienteVisual;
        }
        public void setPessoaDeficienteVisual(Boolean pessoaDeficienteVisual) {
                this.pessoaDeficienteVisual = pessoaDeficienteVisual;
        }
       
        @Column(name="ind_deficiente_auditiva")
        public Boolean getPessoaDeficienteAuditiva() {
                return pessoaDeficienteAuditiva;
        }
        public void setPessoaDeficienteAuditiva(Boolean pessoaDeficienteAuditiva) {
                this.pessoaDeficienteAuditiva = pessoaDeficienteAuditiva;
        }
       
        @Column(name="ind_reabilitado")
        public Boolean getPessoaReabilitado() {
                return pessoaReabilitado;
        }
        public void setPessoaReabilitado(Boolean pessoaReabilitado) {
                this.pessoaReabilitado = pessoaReabilitado;
        }
       
        @Column(name="dsc_deficiente_observacao")
        @Size(max = 200, message = "Limite de caracteres ultrapassado: OBSERVAÇÕES DA DEFICIÊNCIA")
        public String getPessoaDeficienteObservacao() {
                return pessoaDeficienteObservacao;
        }
        public void setPessoaDeficienteObservacao(String pessoaDeficienteObservacao) {
                this.pessoaDeficienteObservacao = StringUtil.setarUpperCaseComTrim(pessoaDeficienteObservacao);;
        }
       
        @Column(name="tip_dependentes")
        public String getTipoDependendes() {
                return tipoDependendes;
        }
        public void setTipoDependendes(String tipoDependendes) {
                this.tipoDependendes = tipoDependendes;
        }
        @Transient
        public String getDescricaoTipoDependentes() {
                return VerificadorUtil.naoEstaNulo(getTipoDependendes())? TipoDependentes.parse(getTipoDependendes()).getDescricao() : null;
        }
       
        @Column(name="dsc_dados_dependentes")
        @Size(max = 400, message = "Limite de caracteres ultrapassado: DADOS DOS DEPENDENTES")
        public String getDadosDependentes() {
                return dadosDependentes;
        }
        public void setDadosDependentes(String dadosDependentes) {
                this.dadosDependentes = StringUtil.setarUpperCaseComTrim(dadosDependentes);
        }
       
        @Column(name="ind_dependentes_irrf")
        public Boolean getDependentesFinsIRRF() {
                return dependentesFinsIRRF;
        }
        public void setDependentesFinsIRRF(Boolean dependentesFinsIRRF) {
                this.dependentesFinsIRRF = dependentesFinsIRRF;
        }
       
        @Column(name="ind_dependentes_salariofamilia")
        public Boolean getDependentesFinsSalarioFamilia() {
                return dependentesFinsSalarioFamilia;
        }
        public void setDependentesFinsSalarioFamilia(Boolean dependentesFinsSalarioFamilia) {
                this.dependentesFinsSalarioFamilia = dependentesFinsSalarioFamilia;
        }

        @Column(name="dsc_nome_fantasia")
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Nome Fantasia")
        public String getNomeFantasia() {
                return nomeFantasia;
        }
        public void setNomeFantasia(String nomeFantasia) {
                this.nomeFantasia = StringUtil.setarUpperCaseComTrim(nomeFantasia);
        }
       
        @Column(name="dsc_razao_social")
        @Size(max = 240, message = "Limite de caracteres ultrapassado: Razão Social")
        public String getRazaoSocial() {
                return razaoSocial;
        }
        public void setRazaoSocial(String razaoSocial) {
                this.razaoSocial = StringUtil.setarUpperCaseComTrim(razaoSocial);
        }
       
        @Column(name="dsc_inscricao_estadual")
        @Size(max = 15, message = "Limite de caracteres ultrapassado: Inscrição Estadual")
        public String getInscricaoEstadual() {
                return inscricaoEstadual;
        }
        public void setInscricaoEstadual(String inscricaoEstadual) {
                this.inscricaoEstadual = inscricaoEstadual;
        }
       
        @Column(name="tip_inscricao_estadual")
        public String getTipoInscricaoEstadual() {
                return tipoInscricaoEstadual;
        }
        public void setTipoInscricaoEstadual(String tipoInscricaoEstadual) {
                this.tipoInscricaoEstadual = tipoInscricaoEstadual;
        }
        @Transient
        public String getNomenclaturaTipoInscricaoEstadual() {
                return VerificadorUtil.naoEstaNulo(getTipoInscricaoEstadual())? TipoNotaFiscalInscricaoEstadual.parse(getTipoInscricaoEstadual()).getNomenclaturaNotaFiscal() : "";
        }
       
        @Column(name="dsc_inscricao_municipal")
        @Size(max = 15, message = "Limite de caracteres ultrapassado: Inscrição Municipal")
        public String getInscricaoMunicipal() {
                return inscricaoMunicipal;
        }
        public void setInscricaoMunicipal(String inscricaoMunicipal) {
                this.inscricaoMunicipal = inscricaoMunicipal;
        }
       
        @Column(name="tip_regime_tributario")
        public String getTipoRegimeTributario() {
                return tipoRegimeTributario;
        }
        public void setTipoRegimeTributario(String tipoRegimeTributario) {
                this.tipoRegimeTributario = tipoRegimeTributario;
        }
        /*
        @ManyToOne
        @ForeignKey(name="fk_pessoa_modelo")
        @JoinColumn(name = "seq_modelo_cliente", nullable=true)
        public Modelo getModeloCliente() {
                return modeloCliente;
        }
        public void setModeloCliente(Modelo modeloCliente) {
                this.modeloCliente = modeloCliente;
        }
        */

        @Column(name="ind_novidades")
        public Boolean getIndicadorNovidades() {
                return indicadorNovidades;
        }
        public void setIndicadorNovidades(Boolean indicadorNovidades) {
                this.indicadorNovidades = indicadorNovidades;
        }
        /*
        @Valid
        @OneToMany(mappedBy="pessoa", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<DadosBancarios> getDadosBancarios() {
                return dadosBancarios;
        }
       
        public void setDadosBancarios(Set<DadosBancarios> dadosBancarios) {
                this.dadosBancarios = dadosBancarios;
        }
        */

       
        @Column(name="ind_cadastro_finalizado", nullable=false)
        public Boolean getCadastroFinalizado() {
                return cadastroFinalizado;
        }
        public void setCadastroFinalizado(Boolean cadastroFinalizado) {
                this.cadastroFinalizado = cadastroFinalizado;
        }
       
        @Column(name="ind_ativo", nullable=false)
        public Boolean getAtivo() {
                return ativo;
        }
       
        public void setAtivo(Boolean ativo) {
                this.ativo = ativo;
        }
       
        @OneToMany(mappedBy="pessoa", cascade=CascadeType.ALL, fetch=FetchType.LAZY, orphanRemoval=true)
        public List<Endereco> getEnderecos() {
                return enderecos;
        }
        public void setEnderecos(List<Endereco> enderecos) {
                this.enderecos = enderecos;
        }
       
        @OneToMany(mappedBy="pessoa", cascade=CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval=true)
        public List<PessoaPapel> getPapeis() {
                return papeis;
        }
        public void setPapeis(List<PessoaPapel> papeis) {
                this.papeis = papeis;
        }
       
        @Transient
        public Funcionario getFuncionario() {
                return funcionario;
        }
        public void setFuncionario(Funcionario funcionario) {
                this.funcionario = funcionario;
        }
       
        /*******************************************************/

        @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;
                Pessoa other = (Pessoa) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
       
        @Transient
        public Boolean ehTipoPessoaFisica() {
                return getTipoPessoa().equals(TipoPessoa.FISICA_F.getValor());
        }
       
        @Transient
        public Boolean ehTipoPessoaJuridica() {
                return getTipoPessoa().equals(TipoPessoa.JURIDICA_J.getValor());
        }
       
        @Transient
        public String getCpfCnpjFormatado() {
                return VerificadorUtil.naoEstaNulo(getCpfCnpj())? FormatarUtil.retornarCpfCnpjFormatado(getCpfCnpj()) : "";
        }
       
        @Transient
        public Endereco getEnderecoPrincipal() {
                ArrayList<Endereco> enderecos = new ArrayList<>(getEnderecos());
                return VerificadorUtil.isListaNulaOuVazia(enderecos)? null : enderecos.get(0);
        }

        @Transient
        public Boolean getEstadoCivilEhSolteiro() {
                return VerificadorUtil.naoEstaNulo(getTipoEstadoCivil())? getTipoEstadoCivil().equals(TipoEstadoCivil.SOLTEIRO_S.getValor()) : false;
        }
        @Transient
        public Boolean getEstadoCivilEhCasado() {
                return VerificadorUtil.naoEstaNulo(getTipoEstadoCivil())? getTipoEstadoCivil().equals(TipoEstadoCivil.CASADO_C.getValor()) : false;
        }
        @Transient
        public Boolean getEstadoCivilEhDivorciado() {
                return VerificadorUtil.naoEstaNulo(getTipoEstadoCivil())? getTipoEstadoCivil().equals(TipoEstadoCivil.DIVORCIADO_D.getValor()) : false;
        }
        @Transient
        public Boolean getEstadoCivilEhViuvo() {
                return VerificadorUtil.naoEstaNulo(getTipoEstadoCivil())? getTipoEstadoCivil().equals(TipoEstadoCivil.VIUVO_V.getValor()) : false;
        }
        @Transient
        public Boolean getEstadoCivilEhUniaoEstavel() {
                return VerificadorUtil.naoEstaNulo(getTipoEstadoCivil())? getTipoEstadoCivil().equals(TipoEstadoCivil.UNIAO_ESTAVEL_U.getValor()) : false;
        }
        @Transient
        public Boolean getEstadoCivilEhOutros() {
                return VerificadorUtil.naoEstaNulo(getTipoEstadoCivil())? getTipoEstadoCivil().equals(TipoEstadoCivil.OUTROS_O.getValor()) : false;
        }
       
        @Transient
        public Boolean getSexoEhMasculino() {
                return VerificadorUtil.naoEstaNulo(getSexo())? getSexo().equals(TipoSexo.MASCULINO.getValor()) : false;
        }
        @Transient
        public Boolean getSexoEhFeminino() {
                return VerificadorUtil.naoEstaNulo(getSexo())? getSexo().equals(TipoSexo.FEMININO.getValor()) : false;
        }
       
        @Transient
        public Boolean getRacaCorEhIndigena() {
                return VerificadorUtil.naoEstaNulo(getTipoRacaCor())? getTipoRacaCor().equals(TipoRacaCor.INDIGENA.getValor()) : false;
        }
        @Transient
        public Boolean getRacaCorEhBranca() {
                return VerificadorUtil.naoEstaNulo(getTipoRacaCor())? getTipoRacaCor().equals(TipoRacaCor.BRANCA.getValor()) : false;
        }
        @Transient
        public Boolean getRacaCorEhNegra() {
                return VerificadorUtil.naoEstaNulo(getTipoRacaCor())? getTipoRacaCor().equals(TipoRacaCor.NEGRA.getValor()) : false;
        }
        @Transient
        public Boolean getRacaCorEhAmarela() {
                return VerificadorUtil.naoEstaNulo(getTipoRacaCor())? getTipoRacaCor().equals(TipoRacaCor.AMARELA.getValor()) : false;
        }
        @Transient
        public Boolean getRacaCorEhParda() {
                return VerificadorUtil.naoEstaNulo(getTipoRacaCor())? getTipoRacaCor().equals(TipoRacaCor.PARDA.getValor()) : false;
        }
        @Transient
        public Boolean getRacaCorEhNaoInformada() {
                return VerificadorUtil.naoEstaNulo(getTipoRacaCor())? getTipoRacaCor().equals(TipoRacaCor.NAO_INFORMADA.getValor()) : false;
        }

        @Transient
        public Endereco primeiroEndereco() {
                if (!VerificadorUtil.isListaNulaOuVazia(getEnderecos())) {
                        return getEnderecos().get(0);
                }
                return null;
        }

        @Transient
        public void atualizarEndereco(Endereco endereco) {
                if (VerificadorUtil.isListaNulaOuVazia(getEnderecos())) {
                        List<Endereco> enderecos = new ArrayList<Endereco>();
                        endereco.setPessoa(this);
                        enderecos.add(endereco);
                        setEnderecos(enderecos);
                } else {
                        int localizacao = getEnderecos().indexOf(endereco);
                        if (localizacao > -1) {
                                getEnderecos().remove(localizacao);
                        }
                        getEnderecos().add(endereco);
                }
        }
       
}