package br.com.ec.domain.model;
import java.io.Serializable;
import java.util.Date;
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.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.ForeignKey;
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.ParametrosVendaVivoDTO;
import br.com.ec.domain.model.tipos.TipoStatusDigitalizacao;
@
Entity
@Table
(name=
"sec_venda_vivo", schema=
"sc_sec")
public class VendaVivo
implements Serializable,
Comparable<VendaVivo
> {
private static final long serialVersionUID = 1L
;
private Long sequencial
;
private LinhaVivo linhaVivo =
new LinhaVivo
();
private Loja loja
;
private Vendedor vendedor
;
private ProdutoVivo produtoVivo
;
private ProdutoVivo produtoVivoAnterior
;
private Date dataVenda
;
private Double valorAssinatura
;
private Double valorComissao
;
private Double valorRecebido
;
private Date dataValidacao
;
private Date dataRecebido
;
private Date dataBaixa
;
private Date dataDigitalizacao
;
private String protocoloGED
;
private String tipoStatusDigitalizacao
; // Conferindo, Com pendências, Em contestação, Sem pendências
private Date dataStatus
;
private String observacao
;
private Boolean indicadorMigracao
;
private Boolean indicadorPortabilidade
;
private Boolean indicadorCadastradoVivoGo
;
private String justificativaParaExcluir
;
public VendaVivo
() {}
public VendaVivo
(Loja loja
) {
this.
loja = loja
;
}
public VendaVivo
(ParametrosVendaVivoDTO parametrosVenda
) {
this.
linhaVivo.
setNumero(parametrosVenda.
getNumero());
this.
loja = parametrosVenda.
getLoja();
this.
vendedor = parametrosVenda.
getVendedor();
this.
observacao = StringUtil.
setarUpperCaseComTrim(parametrosVenda.
getObservacao());
this.
produtoVivo = parametrosVenda.
getProdutoVivo();
this.
produtoVivoAnterior = parametrosVenda.
getProdutoVivoAnterior();
}
@Id
@SequenceGenerator
(name =
"sq_vendavivo")
@GeneratedValue
(strategy = GenerationType.
IDENTITY)
@Column
(name=
"seq_venda_vivo", nullable=
false)
public Long getSequencial
() {
return sequencial
;
}
public void setSequencial
(Long sequencial
) {
this.
sequencial = sequencial
;
}
@ManyToOne
@ForeignKey
(name=
"fk_vendavivo_linhavivo")
@NotNull
(message =
"Informe a linha", groups =
{Cadastrar.
class, Alterar.
class})
@JoinColumn
(name =
"seq_linha_vivo", nullable =
false)
public LinhaVivo getLinhaVivo
() {
return linhaVivo
;
}
public void setLinhaVivo
(LinhaVivo linhaVivo
) {
this.
linhaVivo = linhaVivo
;
}
@ManyToOne
@ForeignKey
(name=
"fk_vendavivo_loja")
@NotNull
(message =
"Informe a loja", groups =
{Cadastrar.
class, Alterar.
class})
@JoinColumn
(name =
"seq_loja", nullable =
false)
public Loja getLoja
() {
return loja
;
}
public void setLoja
(Loja loja
) {
this.
loja = loja
;
}
@ManyToOne
@ForeignKey
(name=
"fk_vendavivo_vendedor")
@NotNull
(message =
"Informe o vendedor", groups =
{Cadastrar.
class, Alterar.
class})
@JoinColumn
(name =
"seq_vendedor", nullable =
true)
public Vendedor getVendedor
() {
return vendedor
;
}
public void setVendedor
(Vendedor vendedor
) {
this.
vendedor = vendedor
;
}
@ManyToOne
@ForeignKey
(name=
"fk_vendavivo_produtovivo")
@NotNull
(message =
"Informe o produto", groups =
{Cadastrar.
class, Alterar.
class})
@JoinColumn
(name =
"seq_produto_vivo", nullable =
true)
public ProdutoVivo getProdutoVivo
() {
return produtoVivo
;
}
public void setProdutoVivo
(ProdutoVivo produtoVivo
) {
this.
produtoVivo = produtoVivo
;
}
@ManyToOne
@ForeignKey
(name=
"fk_vendavivo_produtovivoanterior")
@JoinColumn
(name =
"seq_produto_vivo_anterior", nullable =
true)
public ProdutoVivo getProdutoVivoAnterior
() {
return produtoVivoAnterior
;
}
public void setProdutoVivoAnterior
(ProdutoVivo produtoVivoAnterior
) {
this.
produtoVivoAnterior = produtoVivoAnterior
;
}
@Column
(name=
"dth_venda")
@NotNull
(message =
"Informe a data da venda", groups =
{Cadastrar.
class, Alterar.
class})
public Date getDataVenda
() {
return dataVenda
;
}
public void setDataVenda
(Date dataVenda
) {
this.
dataVenda = dataVenda
;
}
@Column
(name=
"val_assinatura")
public Double getValorAssinatura
() {
return valorAssinatura
;
}
public void setValorAssinatura
(Double valorAssinatura
) {
this.
valorAssinatura = valorAssinatura
;
}
@Column
(name=
"val_comissao")
public Double getValorComissao
() {
return valorComissao
;
}
public void setValorComissao
(Double valorComissao
) {
this.
valorComissao = valorComissao
;
}
@Column
(name=
"val_recebido")
public Double getValorRecebido
() {
return valorRecebido
;
}
public void setValorRecebido
(Double valorRecebido
) {
this.
valorRecebido = valorRecebido
;
}
@Column
(name=
"dat_validacao")
public Date getDataValidacao
() {
return dataValidacao
;
}
public void setDataValidacao
(Date dataValidacao
) {
this.
dataValidacao = dataValidacao
;
}
@Column
(name=
"dat_recebido")
public Date getDataRecebido
() {
return dataRecebido
;
}
public void setDataRecebido
(Date dataRecebido
) {
this.
dataRecebido = dataRecebido
;
}
@Column
(name=
"dat_baixa")
public Date getDataBaixa
() {
return dataBaixa
;
}
public void setDataBaixa
(Date dataBaixa
) {
this.
dataBaixa = dataBaixa
;
}
@Column
(name=
"dat_digitalizacao", nullable=
false)
public Date getDataDigitalizacao
() {
return dataDigitalizacao
;
}
public void setDataDigitalizacao
(Date dataDigitalizacao
) {
this.
dataDigitalizacao = dataDigitalizacao
;
}
@Column
(name=
"dsc_protocolo_ged", nullable=
false)
@Size
(max =
10, message =
"Limite de caracteres ultrapassado: Protocolo GED")
public String getProtocoloGED
() {
return protocoloGED
;
}
public void setProtocoloGED
(String protocoloGED
) {
this.
protocoloGED = protocoloGED
;
}
@Column
(name=
"tip_status", nullable=
false)
public String getTipoStatusDigitalizacao
() {
return tipoStatusDigitalizacao
;
}
public void setTipoStatusDigitalizacao
(String tipoStatusDigitalizacao
) {
this.
tipoStatusDigitalizacao = tipoStatusDigitalizacao
;
}
@Column
(name=
"dth_status", nullable=
false)
public Date getDataStatus
() {
return dataStatus
;
}
public void setDataStatus
(Date dataStatus
) {
this.
dataStatus = dataStatus
;
}
@Column
(name=
"dsc_observacao")
@Size
(max =
500, message =
"Limite de caracteres ultrapassado: Observação")
public String getObservacao
() {
return observacao
;
}
public void setObservacao
(String observacao
) {
this.
observacao = StringUtil.
setarUpperCaseComTrim(observacao
);
}
@Column
(name=
"ind_migracao")
@NotNull
(message =
"Informe o indicador de migração", groups =
{Cadastrar.
class, Alterar.
class})
public Boolean getIndicadorMigracao
() {
return indicadorMigracao
;
}
public void setIndicadorMigracao
(Boolean indicadorMigracao
) {
this.
indicadorMigracao = indicadorMigracao
;
}
@Column
(name=
"ind_portabilidade")
@NotNull
(message =
"Informe o indicador de portabilidade", groups =
{Cadastrar.
class, Alterar.
class})
public Boolean getIndicadorPortabilidade
() {
return indicadorPortabilidade
;
}
public void setIndicadorPortabilidade
(Boolean indicadorPortabilidade
) {
this.
indicadorPortabilidade = indicadorPortabilidade
;
}
@Column
(name=
"ind_cadastrovivogo")
@NotNull
(message =
"Informe o indicador de cadastro Vivo Go", groups =
{Cadastrar.
class, Alterar.
class})
public Boolean getIndicadorCadastradoVivoGo
() {
return indicadorCadastradoVivoGo
;
}
public void setIndicadorCadastradoVivoGo
(Boolean indicadorCadastradoVivoGo
) {
this.
indicadorCadastradoVivoGo = indicadorCadastradoVivoGo
;
}
@Transient
public String getJustificativaParaExcluir
() {
return justificativaParaExcluir
;
}
public void setJustificativaParaExcluir
(String justificativaParaExcluir
) {
this.
justificativaParaExcluir = StringUtil.
setarUpperCaseComTrim(justificativaParaExcluir
);
}
@Transient
public String getNumeroDaLinha
() {
return VerificadorUtil.
naoEstaNulo(linhaVivo
)? linhaVivo.
getNumero() :
null;
}
@Transient
public void setNumeroDaLinha
(String numero
) {
if (VerificadorUtil.
naoEstaNulo(linhaVivo
)) {
linhaVivo.
setNumero(numero
);
}
}
@Transient
public Cliente getClienteDaLinha
() {
return VerificadorUtil.
naoEstaNulo(linhaVivo
)? linhaVivo.
getCliente() :
null;
}
@Transient
public String getNomeDoClienteDaLinha
() {
return VerificadorUtil.
naoEstaNulo(getClienteDaLinha
())? getClienteDaLinha
().
getNome() :
"";
}
@Transient
public String getCpfDoClienteDaLinha
() {
return VerificadorUtil.
naoEstaNulo(getClienteDaLinha
())? getClienteDaLinha
().
getCpfCnpjFormatado() :
"";
}
@Transient
public Long getSequencialDaLoja
() {
return VerificadorUtil.
naoEstaNulo(loja
)? loja.
getSequencial() :
null;
}
@Transient
public Long getSequencialDoVendedor
() {
return VerificadorUtil.
naoEstaNulo(vendedor
)? vendedor.
getSequencial() :
null;
}
@Transient
public String getNomeDoVendedor
() {
return VerificadorUtil.
naoEstaNulo(vendedor
)? vendedor.
getNomeDaPessoa() :
null;
}
@
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;
VendaVivo other =
(VendaVivo
) obj
;
if (sequencial ==
null) {
if (other.
sequencial !=
null)
return false;
} else if (!sequencial.
equals(other.
sequencial))
return false;
return true;
}
@
Override
public int compareTo
(VendaVivo vendaVivo
) {
return vendaVivo.
getDataVenda().
compareTo(this.
dataVenda);
}
@Transient
public Long getSequencialDaLinha
() {
return VerificadorUtil.
naoEstaNulo(getLinhaVivo
())? getLinhaVivo
().
getSequencial() :
null;
}
@Transient
public String getTipoStatusDigitalizacaoDescricao
() {
return VerificadorUtil.
naoEstaNulo(getTipoStatusDigitalizacao
()) ? TipoStatusDigitalizacao.
parse(getTipoStatusDigitalizacao
()).
getDescricao() :
"";
}
@Transient
public Boolean naoVerificado
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipoStatusDigitalizacao
()) ? getTipoStatusDigitalizacao
().
equals(TipoStatusDigitalizacao.
CONFERINDO.
getValor()) :
false;
}
@Transient
public Boolean statusConfirmado
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipoStatusDigitalizacao
()) ? getTipoStatusDigitalizacao
().
equals(TipoStatusDigitalizacao.
CONFIRMADO.
getValor()) :
false;
}
@Transient
public Boolean emContestacao
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipoStatusDigitalizacao
()) ? getTipoStatusDigitalizacao
().
equals(TipoStatusDigitalizacao.
EM_CONTESTACAO.
getValor()) :
false;
}
@Transient
public Boolean verificadoComPendencia
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipoStatusDigitalizacao
()) ? getTipoStatusDigitalizacao
().
equals(TipoStatusDigitalizacao.
VERIFICADO_COM_PENDENCIAS.
getValor()) :
false;
}
@Transient
public Boolean confirmadoSemGED
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipoStatusDigitalizacao
()) ? getTipoStatusDigitalizacao
().
equals(TipoStatusDigitalizacao.
CONFIRMADO_SEM_GED.
getValor()) :
false;
}
@Transient
public Boolean cancelado
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipoStatusDigitalizacao
()) ? getTipoStatusDigitalizacao
().
equals(TipoStatusDigitalizacao.
CANCELADO.
getValor()) :
false;
}
}