Subversion Repositories Integrator Subversion

Rev

Rev 507 | 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.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Size;

import org.hibernate.annotations.ForeignKey;

import br.com.ec.core.generic.identidade.Identidade;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;

@Entity
@Table(name="sec_produto_loja", schema="sc_sec")
public class ProdutoLoja implements Serializable, Identidade {

        private static final long serialVersionUID = 1L;

        private ProdutoLojaId produtoLojaId;
        private Produto produto;
        private Loja loja;
        private Integer quantidadeEstoque;
        private Integer quantidadeEstoqueContagem;
//      private Integer quantidadeEstoqueUltimaContagem;
        private Date dataContagem;
        private Date dataContagemPreparacao;
        private Usuario usuarioUltimaContagem;
        private Usuario usuarioUltimaContagemPreparacao;
        private String localizacao;
        private Boolean indicadorContagemSolicitada = false;
        private Boolean retirarTransferenciaAutomatica;
       
        public ProdutoLoja() {
                this.produtoLojaId = new ProdutoLojaId();
        }
       
        public ProdutoLoja(ProdutoLojaId produtoLojaId) {
                this.produtoLojaId = produtoLojaId;
        }

        public ProdutoLoja(Produto produto, Loja loja) {
                produtoLojaId = new ProdutoLojaId();
                setProduto(produto);
                setLoja(loja);
        }

        @Override
        @Transient
        public Object getId() {
                return getProdutoLojaId();
        }
        @Override
        public void setId(Object id) {
                this.produtoLojaId = (ProdutoLojaId) id;
        }
       
        @EmbeddedId
        public ProdutoLojaId getProdutoLojaId() {
                return produtoLojaId;
        }
        public void setProdutoLojaId(ProdutoLojaId produtoLojaId) {
                this.produtoLojaId = produtoLojaId;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_produtoloja_produto")
        @JoinColumn(name = "seq_produto", insertable=false, updatable=false, nullable = false)
        public Produto getProduto() {
                return produto;
        }
        public void setProduto(Produto produto) {
                if (VerificadorUtil.naoEstaNulo(produto)) {
                        produtoLojaId.setSequencialProduto(produto.getSequencial());
                }
                this.produto = produto;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_produtoloja_loja")
        @JoinColumn(name = "seq_loja", insertable=false, updatable=false, nullable = false)
        public Loja getLoja() {
                return loja;
        }
        public void setLoja(Loja loja) {
                if (VerificadorUtil.naoEstaNulo(loja)) {
                        produtoLojaId.setSequencialLoja(loja.getSequencial());
                }
                this.loja = loja;
        }
       
        @Column(name="qtd_estoque")
        public Integer getQuantidadeEstoque() {
                return quantidadeEstoque;
        }
        public void setQuantidadeEstoque(Integer quantidadeEstoque) {
                this.quantidadeEstoque = quantidadeEstoque;
        }
       
        @Column(name="qtd_estoque_contagem")
        public Integer getQuantidadeEstoqueContagem() {
                return quantidadeEstoqueContagem;
        }
        public void setQuantidadeEstoqueContagem(Integer quantidadeEstoqueContagem) {
                this.quantidadeEstoqueContagem = quantidadeEstoqueContagem;
        }
       
        @Column(name="dat_contagem")
        public Date getDataContagem() {
                return dataContagem;
        }
        public void setDataContagem(Date dataContagem) {
                this.dataContagem = dataContagem;
        }
       
        @Column(name="dth_contagem_preparacao")
        public Date getDataContagemPreparacao() {
                return dataContagemPreparacao;
        }
        public void setDataContagemPreparacao(Date dataContagemPreparacao) {
                this.dataContagemPreparacao = dataContagemPreparacao;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_produtoloja_usuario")
        @JoinColumn(name = "seq_usuario_contagem", nullable = false)
        public Usuario getUsuarioUltimaContagem() {
                return usuarioUltimaContagem;
        }
        public void setUsuarioUltimaContagem(Usuario usuarioUltimaContagem) {
                this.usuarioUltimaContagem = usuarioUltimaContagem;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_produtoloja_usuariopreparacao")
        @JoinColumn(name = "seq_usuario_contagem_preparacao", nullable = false)
        public Usuario getUsuarioUltimaContagemPreparacao() {
                return usuarioUltimaContagemPreparacao;
        }
        public void setUsuarioUltimaContagemPreparacao(Usuario usuarioUltimaContagemPreparacao) {
                this.usuarioUltimaContagemPreparacao = usuarioUltimaContagemPreparacao;
        }
       
        @Column(name="dsc_localizacao")
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Localização")
        public String getLocalizacao() {
                return localizacao;
        }
        public void setLocalizacao(String localizacao) {
                this.localizacao = StringUtil.setarUpperCaseComTrim(localizacao);
        }
       
        @Column(name="ind_contagem_solicitada")
        public Boolean getIndicadorContagemSolicitada() {
                return indicadorContagemSolicitada;
        }
        public void setIndicadorContagemSolicitada(Boolean indicadorContagemSolicitada) {
                this.indicadorContagemSolicitada = indicadorContagemSolicitada;
        }
       
        @Column(name="ind_retirar_transferencia_auto")
        public Boolean getRetirarTransferenciaAutomatica() {
                return retirarTransferenciaAutomatica;
        }
        public void setRetirarTransferenciaAutomatica(Boolean retirarTransferenciaAutomatica) {
                this.retirarTransferenciaAutomatica = retirarTransferenciaAutomatica;
        }
       
        @Transient
        public Long getSequencialDoProduto() {
                return VerificadorUtil.naoEstaNulo(produto)? produto.getSequencial() : null;
        }
       
        @Transient
        public Long getSequencialDaLoja() {
                return VerificadorUtil.naoEstaNulo(loja)? loja.getSequencial() : null;
        }

        @Transient
        public Modelo getModeloDoProduto() {
                return VerificadorUtil.naoEstaNulo(produto)? VerificadorUtil.naoEstaNulo(produto.getModelo())? produto.getModelo() : null : null;
        }
       
        @Transient
        public String getNomeDoUsuarioUltimaContagem() {
                return VerificadorUtil.naoEstaNulo(getUsuarioUltimaContagem())? getUsuarioUltimaContagem().getNomeDaPessoa() : null;
        }
       
        @Transient
        public String getNomeDoUsuarioUltimaContagemPreparacao() {
                return VerificadorUtil.naoEstaNulo(getUsuarioUltimaContagemPreparacao())? getUsuarioUltimaContagemPreparacao().getNomeDaPessoa() : null;
        }
       
        @Transient
        public Boolean contagemFoiIniciada() {
                return getDataContagemPreparacao().after(getDataContagem());
        }
       
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((produtoLojaId == null) ? 0 : produtoLojaId.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;
                ProdutoLoja other = (ProdutoLoja) obj;
                if (produtoLojaId == null) {
                        if (other.produtoLojaId != null)
                                return false;
                } else if (!produtoLojaId.equals(other.produtoLojaId))
                        return false;
                return true;
        }
       
}