package br.com.ec.domain.model;
import java.io.Serializable;
import java.util.ArrayList;
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.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.Valid;
import javax.validation.constraints.Size;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.validator.constraints.NotEmpty;
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.edu.cesmac.core.interfaces.Alterar;
import br.edu.cesmac.core.interfaces.Cadastrar;
import br.edu.cesmac.core.util.StringUtil;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.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
;
private Set<PessoaPapel
> papeis
;
// 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
;
// PESSOA JURÍDICA
private String nomeFantasia
;
private String razaoSocial
;
private String inscricaoEstadual
;
private Boolean inscricaoEstadualIsento
;
private String inscricaoMunicipal
;
private String tipoRegimeTributario
;
// CLIENTE
private Modelo modeloCliente
;
private Boolean indicadorNovidades
;
private Set<Endereco
> enderecos
;
private Set<DadosBancarios
> dadosBancarios
;
private boolean ativo
;
public Pessoa
() {
// setTipoPessoa(TipoPessoa.FISICA_F.getValor());
// setInscricaoEstadualIsento(false);
setPapeis
(new HashSet<PessoaPapel
>());
setEnderecos
(new HashSet<Endereco
>());
setDadosBancarios
(new HashSet<DadosBancarios
>());
}
@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 = 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
;
}
@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 = 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 = 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
) {
UfNascimento = 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=
"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 = 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=
"ind_inscricao_estadual_isento")
public Boolean getInscricaoEstadualIsento
() {
return inscricaoEstadualIsento
;
}
public void setInscricaoEstadualIsento
(Boolean inscricaoEstadualIsento
) {
this.
inscricaoEstadualIsento = inscricaoEstadualIsento
;
}
@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<Endereco
> getEnderecos
() {
return enderecos
;
}
public void setEnderecos
(Set<Endereco
> enderecos
) {
this.
enderecos = enderecos
;
}
@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_ativo", nullable=
false)
public Boolean getAtivo
() {
return ativo
;
}
public void setAtivo
(Boolean ativo
) {
this.
ativo = ativo
;
}
/*******************************************************/
@
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;
}
}