Subversion Repositories Integrator Subversion

Rev

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

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;
        }
       
}