Subversion Repositories Integrator Subversion

Rev

Rev 538 | Go to most recent revision | 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.generic.identidade.Identidade;
import br.com.ec.core.interfaces.Alterar;
import br.com.ec.core.interfaces.Cadastrar;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.tipos.TipoDevolucao;
import br.com.ec.domain.model.tipos.TipoEstoqueAuditoria;
import br.com.ec.domain.model.tipos.TipoEstoqueAuditoriaVerificacao;
import br.com.ec.domain.model.tipos.TipoProduto;

@Entity
@Table(name="sec_estoque_auditoria", schema="sc_sec")
public class EstoqueAuditoria implements Serializable, Identidade {
         
        private static final long serialVersionUID = 1L;
       
        private Long sequencial;
        private Usuario usuario;
        private Produto produto;
        private Loja loja;
//      private Cliente cliente;
        private Integer quantidadeEstoqueAnterior;
        private Integer quantidadeEstoqueNovo;
        private String observacao;
        private String auditoria;
        private Date dataAtualizacao;
        private String tipoEstoqueAuditoria;
        private String tipoVerificacao;
        private Usuario usuarioVerificacao;
       
        private Long sequencialVenda;
        private Long sequencialPedido;
        private Pedido pedidoParaVincular;
        private Date dataVenda;
        private Loja lojaVenda;
        private String tipoDevolucao;
        private Double valorDevolvido;
        private String dadosBancarios;
        private String numeroNotaFiscal;
        private String numeroLote;
        private Boolean ehDevolucaoMesmoProduto;
       
        public EstoqueAuditoria() {
                setEhDevolucaoMesmoProduto(false);
                setValorDevolvido(new Double(0.0));
        }

        @Override
        @Transient
        public Object getId() {
                return this.getSequencial();
        }
        @Override
        public void setId(Object id) {
                this.sequencial = (Long) id;
        }

        @Id
        @SequenceGenerator(name = "sq_estoqueaudit")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="seq_estoque_auditoria", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_estoqueaudit_usuario")
        @JoinColumn(name = "seq_usuario", nullable=true)
        public Usuario getUsuario() {
                return usuario;
        }
        public void setUsuario(Usuario usuario) {
                this.usuario = usuario;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_estoqueaudit_usuarioverificacao")
        @JoinColumn(name = "seq_usuario_verificacao", nullable=true)
        public Usuario getUsuarioVerificacao() {
                return usuarioVerificacao;
        }
        public void setUsuarioVerificacao(Usuario usuarioVerificacao) {
                this.usuarioVerificacao = usuarioVerificacao;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_estoqueaudit_produto")
        @JoinColumn(name = "seq_produto", nullable=true)
        public Produto getProduto() {
                return produto;
        }
        public void setProduto(Produto produto) {
                this.produto = produto;
        }

        @ManyToOne
        @ForeignKey(name="fk_estoqueaudit_loja")
        @JoinColumn(name = "seq_loja", nullable=true)
        public Loja getLoja() {
                return loja;
        }
        public void setLoja(Loja loja) {
                this.loja = loja;
        }
       
        /*
        @ManyToOne
        @ForeignKey(name="fk_estoqueaudit_cliente")
        @JoinColumn(name = "seq_cliente", nullable=true)
        public Cliente getCliente() {
                return cliente;
        }
        public void setCliente(Cliente cliente) {
                this.cliente = cliente;
        }
        */

       
        @Column(name="qtd_estoque_anterior")
        public Integer getQuantidadeEstoqueAnterior() {
                return quantidadeEstoqueAnterior;
        }
        public void setQuantidadeEstoqueAnterior(Integer quantidadeEstoqueAnterior) {
                this.quantidadeEstoqueAnterior = quantidadeEstoqueAnterior;
        }

        @Column(name="qtd_estoque_novo")
        public Integer getQuantidadeEstoqueNovo() {
                return quantidadeEstoqueNovo;
        }
        public void setQuantidadeEstoqueNovo(Integer quantidadeEstoqueNovo) {
                this.quantidadeEstoqueNovo = quantidadeEstoqueNovo;
        }
       
        @Column(name="dsc_observacao")
        @Size(max = 400, message = "Limite de caracteres ultrapassado: Observação")
        public String getObservacao() {
                return observacao;
        }
        public void setObservacao(String observacao) {
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
        }
       
        @Column(name="dsc_auditoria")
        @Size(max = 400, message = "Limite de caracteres ultrapassado: Descrição da Auditoria")
        public String getAuditoria() {
                return auditoria;
        }
        public void setAuditoria(String auditoria) {
                this.auditoria = StringUtil.setarUpperCaseComTrim(auditoria);
        }
       
        @NotNull(message="Obrigatório informar a data do ocorrido", groups={Cadastrar.class, Alterar.class})
        @Column(name="dth_atualizacao", nullable=false)
        public Date getDataAtualizacao() {
                return dataAtualizacao;
        }
        public void setDataAtualizacao(Date dataAtualizacao) {
                this.dataAtualizacao = dataAtualizacao;
        }
       
        @Column(name="tip_estoque_auditoria")
        public String getTipoEstoqueAuditoria() {
                return tipoEstoqueAuditoria;
        }
        public void setTipoEstoqueAuditoria(String tipoEstoqueAuditoria) {
                this.tipoEstoqueAuditoria = tipoEstoqueAuditoria;
        }
       
        @Column(name="tip_verificacao", nullable=false)
        public String getTipoVerificacao() {
                return tipoVerificacao;
        }
        public void setTipoVerificacao(String tipoVerificacao) {
                this.tipoVerificacao = tipoVerificacao;
        }
       
        @Transient
        public Long getSequencialVenda() {
                return sequencialVenda;
        }
        public void setSequencialVenda(Long sequencialVenda) {
                this.sequencialVenda = sequencialVenda;
        }
       
        @Transient
        public Long getSequencialPedido() {
                return sequencialPedido;
        }
        public void setSequencialPedido(Long sequencialPedido) {
                this.sequencialPedido = sequencialPedido;
        }
       
        @Transient
        public Pedido getPedidoParaVincular() {
                return pedidoParaVincular;
        }
        public void setPedidoParaVincular(Pedido pedidoParaVincular) {
                this.pedidoParaVincular = pedidoParaVincular;
        }
       
        @Transient
        public Date getDataVenda() {
                return dataVenda;
        }
        public void setDataVenda(Date dataVenda) {
                this.dataVenda = dataVenda;
        }
       
        @Transient
        public Loja getLojaVenda() {
                return lojaVenda;
        }
        public void setLojaVenda(Loja lojaVenda) {
                this.lojaVenda = lojaVenda;
        }
       
        @Transient
        public String getTipoDevolucao() {
                return tipoDevolucao;
        }
        public void setTipoDevolucao(String tipoDevolucao) {
                this.tipoDevolucao = tipoDevolucao;
        }
       
        @Transient
        public Double getValorDevolvido() {
                return valorDevolvido;
        }
        public void setValorDevolvido(Double valorDevolvido) {
                this.valorDevolvido = valorDevolvido;
        }
       
        @Transient
        public String getDadosBancarios() {
                return dadosBancarios;
        }
        public void setDadosBancarios(String dadosBancarios) {
                this.dadosBancarios = StringUtil.setarUpperCaseComTrim(dadosBancarios);
        }
       
        @Transient
        public String getNumeroNotaFiscal() {
                return numeroNotaFiscal;
        }
        public void setNumeroNotaFiscal(String numeroNotaFiscal) {
                this.numeroNotaFiscal = numeroNotaFiscal;
        }
       
        @Transient
        public String getNumeroLote() {
                return numeroLote;
        }
        public void setNumeroLote(String numeroLote) {
                this.numeroLote = numeroLote;
        }
       
        @Transient
        public Boolean getEhDevolucaoMesmoProduto() {
                return ehDevolucaoMesmoProduto;
        }
        public void setEhDevolucaoMesmoProduto(Boolean ehDevolucaoMesmoProduto) {
                this.ehDevolucaoMesmoProduto = ehDevolucaoMesmoProduto;
        }
       
        @Transient
        public Boolean aumentouEstoque() {
                if (VerificadorUtil.naoEstaNulo(getQuantidadeEstoqueAnterior()) && VerificadorUtil.naoEstaNulo(getQuantidadeEstoqueNovo())) {
                        return getQuantidadeEstoqueAnterior() < getQuantidadeEstoqueNovo();
                }
                return null;
        }
       
        @Transient
        public String getTipoEstoqueAuditoriaDescricao() {
                return VerificadorUtil.naoEstaNulo(getTipoEstoqueAuditoria()) ? TipoEstoqueAuditoria.parse(getTipoEstoqueAuditoria()).getDescricao() : "";
        }
       
        @Transient
        public Long getSequencialDaLoja() {
                return VerificadorUtil.naoEstaNulo(getLoja()) ? getLoja().getSequencial() : null;
        }
       
        @Transient
        public Boolean naoVerificado() {
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoVerificacao()) ? getTipoVerificacao().equals(TipoEstoqueAuditoriaVerificacao.NAO_VERIFICADO.getValor()) : false;
        }
       
        @Transient
        public Boolean verificadoSemPendencia() {
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoVerificacao()) ? getTipoVerificacao().equals(TipoEstoqueAuditoriaVerificacao.VERIFICADO_SEM_PENDENCIA.getValor()) : false;
        }
       
        @Transient
        public Boolean verificadoComPendencia() {
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoVerificacao()) ? getTipoVerificacao().equals(TipoEstoqueAuditoriaVerificacao.VERIFICADO_COM_PENDENCIA.getValor()) : false;
        }
       
        @Transient
        public Boolean ehTipoDevolucaoPorTransferencia() {
                return VerificadorUtil.naoEstaNuloOuVazio(getTipoDevolucao()) ? getTipoDevolucao().equals(TipoDevolucao.TRANSFERENCIA.getValor()) : false;
        }
       
        @Transient
        public String nomeDoUsuario() {
                return VerificadorUtil.naoEstaNulo(getUsuario())? getUsuario().getNomeDaPessoa() : null;
        }
       
        /*
        @Transient
        public String nomeDoCliente() {
                return VerificadorUtil.naoEstaNulo(getCliente())? getCliente().getNome() : null;
        }
       
        @Transient
        public String cpfCnpjDoCliente() {
                return VerificadorUtil.naoEstaNulo(getCliente())? getCliente().getCpfCnpjFormatado() : null;
        }
        */

       
        @Transient
        public Integer getQuantidadeDiasDaAtualizacao() {
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataAtualizacao());
        }
       
        @Transient
        public String descricaoCompletaProduto() {
                StringBuilder descricaoCompleta = new StringBuilder();
                if (VerificadorUtil.naoEstaNulo(getProduto())) {
                        descricaoCompleta.append(getProduto().getCodigo());
                        descricaoCompleta.append(" - ");
                        if (this.getProduto().getTipo().equals(TipoProduto.CAPA.getValor())) {
                                descricaoCompleta.append("CAPA");
                        }
                        if (!this.getProduto().getTipo().equals(TipoProduto.ACESSORIO.getValor())) {
                                descricaoCompleta.append(" ");
                                descricaoCompleta.append(this.getProduto().getDescricaoDoModelo());
                        }
                        if (VerificadorUtil.naoEstaNuloOuVazio(this.getProduto().getEstilo())) {
                                descricaoCompleta.append(" ");
                                descricaoCompleta.append(this.getProduto().getDescricaoDoEstilo());
                        }
                        descricaoCompleta.append(" ");
                        if (this.getProduto().getDescricao().length() > 50) {
                                descricaoCompleta.append(this.getProduto().getDescricao().substring(0, 50));
                        } else {
                                descricaoCompleta.append(this.getProduto().getDescricao());
                        }
                        if (VerificadorUtil.naoEstaNuloOuVazio(this.getProduto().getCor())) {
                                descricaoCompleta.append(" (");
                                descricaoCompleta.append(this.getProduto().getDescricaoDaCor());
                                descricaoCompleta.append(")");
                        }
                }
                return descricaoCompleta.toString();
        }
       
        @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;
                EstoqueAuditoria other = (EstoqueAuditoria) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }

        @Transient
        public String getDescricaoDaLoja() {
                return VerificadorUtil.naoEstaNuloOuVazio(getLoja())? getLoja().getDescricao() : "";
        }

}