package banco.modelo;
import java.io.Serializable;
import java.math.BigDecimal;
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.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.validator.constraints.NotEmpty;
import aplicacao.helper.PadraoHelper;
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa implements Serializable{
private static final long serialVersionUID = 5104439984829411483L;
public static String CLIENTE = "CLIENTE";
public static String FORNECEDOR = "FORNECEDOR";
public static String FUNCIONARIO = "FUNCIONARIO";
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column
private boolean ativo = true;
@Column
@NotEmpty(message="Informe o nome (fantasia).")
private String nomeFantasia;
@Column
private String razaoSocial;
@Column
@NotEmpty(message="Informe o CPF/CNPJ.")
private String cpfCnpj;
@Column
private String rgInscricaoEst;
@Column
private String foneFax = "";
@Column
private String celular = "";
@Column
private String email;
@Column
private String cep;
@Column
@NotEmpty(message="Informe a cidade.")
private String cidade;
@Column
@NotEmpty(message="Informe o bairro.")
private String bairro;
@Column
@NotEmpty(message="Informe a rua.")
private String rua;
@Column
@NotEmpty(message="Informe o n�mero.")
private String numero;
@Column
private String complemento;
@Column
private boolean tipoCliente;
@Column
private boolean tipoFornecedor;
@Column
private boolean tipoFuncionario;
@OneToMany(mappedBy="cliente", cascade=CascadeType.ALL, orphanRemoval=true)
private List<Veiculo> listaVeiculo = new ArrayList<Veiculo>();
@OneToMany(cascade=CascadeType.ALL, mappedBy="pessoa", orphanRemoval=true)
private List<ForneceProduto> listaProduto = new ArrayList<ForneceProduto>();
@Column
private String serie = "";
@Column(precision=14, scale=2)
private BigDecimal salario;
@Column
@Temporal(value = TemporalType.DATE)
private Date dataUltimoPagto;
@Column
private String carteiraNum = "";
@ManyToOne
private TipoFuncionario tipo;
public String getStatus(){
if(ativo)
return PadraoHelper.ATIVO;
else
return PadraoHelper.DESATIVADO;
}
public String getNome(){
return (razaoSocial == null || razaoSocial.isEmpty()) ? nomeFantasia : razaoSocial;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public boolean getAtivo() {
return ativo;
}
public void setAtivo(boolean ativo) {
this.ativo = ativo;
}
public String getNomeFantasia() {
return nomeFantasia;
}
public void setNomeFantasia(String nomeFantasia) {
this.nomeFantasia = nomeFantasia;
}
public String getRazaoSocial() {
return razaoSocial;
}
public void setRazaoSocial(String razaoSocial) {
this.razaoSocial = razaoSocial;
}
public String getCpfCnpj() {
return cpfCnpj;
}
public void setCpfCnpj(String cpfCnpj) {
this.cpfCnpj = cpfCnpj;
}
public String getRgInscricaoEst() {
return rgInscricaoEst;
}
public void setRgInscricaoEst(String rgInscricaoEst) {
this.rgInscricaoEst = rgInscricaoEst;
}
public String getFoneFax() {
return foneFax;
}
public void setFoneFax(String foneFax) {
this.foneFax = foneFax;
}
public String getCelular() {
return celular;
}
public void setCelular(String celular) {
this.celular = celular;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getRua() {
return rua;
}
public void setRua(String rua) {
this.rua = rua;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getComplemento() {
return complemento;
}
public void setComplemento(String complemento) {
this.complemento = complemento;
}
public boolean getTipoCliente() {
return tipoCliente;
}
public void setTipoCliente(boolean tipoCliente) {
this.tipoCliente = tipoCliente;
}
public boolean getTipoFornecedor() {
return tipoFornecedor;
}
public void setTipoFornecedor(boolean tipoFornecedor) {
this.tipoFornecedor = tipoFornecedor;
}
public boolean getTipoFuncionario() {
return tipoFuncionario;
}
public void setTipoFuncionario(boolean tipoFuncionario) {
this.tipoFuncionario = tipoFuncionario;
}
public List<Veiculo> getListaVeiculo() {
return listaVeiculo;
}
public void setListaVeiculo(List<Veiculo> listaVeiculo) {
this.listaVeiculo = listaVeiculo;
}
public List<ForneceProduto> getListaProduto() {
return listaProduto;
}
public void setListaProduto(List<ForneceProduto> listaProduto) {
this.listaProduto = listaProduto;
}
public String getSerie() {
return serie;
}
public void setSerie(String serie) {
this.serie = serie;
}
public BigDecimal getSalario() {
return salario;
}
public void setSalario(BigDecimal salario) {
this.salario = salario;
}
public Date getDataUltimoPagto() {
return dataUltimoPagto;
}
public void setDataUltimoPagto(Date dataUltimoPagto) {
this.dataUltimoPagto = dataUltimoPagto;
}
public String getCarteiraNum() {
return carteiraNum;
}
public void setCarteiraNum(String carteiraNum) {
this.carteiraNum = carteiraNum;
}
public TipoFuncionario getTipo() {
return tipo;
}
public void setTipo(TipoFuncionario tipo) {
this.tipo = tipo;
}
public String getTipoPessoa(){
String tipo = "";
if(getTipoCliente())
tipo = "Cliente";
if(getTipoFornecedor()){
if(!tipo.isEmpty())
tipo += ", ";
tipo += "Fornecedor";
}
if(getTipoFuncionario()){
if(!tipo.isEmpty())
tipo += ", ";
tipo += "Funcion�rio";
}
return tipo;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.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 (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}