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 javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MapsId;
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.VerificadorUtil;
import br.com.ec.domain.dto.TransferenciaProdutoDTO;

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

        private static final long serialVersionUID = 1L;

        private TransferenciaProdutoId transferenciaProdutoId;
        private Transferencia transferencia;
        private Produto produto;
        private Usuario usuarioSaida;
        private Usuario usuarioEntrada;
        private Integer quantidadeTransferir;
        private Boolean indicadorRecebido;
        private String observacao;
        private Boolean indicadorAlterarEstoque;
       
        public TransferenciaProduto() {
                this.indicadorAlterarEstoque = true;
                this.transferenciaProdutoId = new TransferenciaProdutoId();
        }
       
        public TransferenciaProduto(TransferenciaProdutoId transferenciaProdutoId) {
                this.indicadorAlterarEstoque = true;
                this.transferenciaProdutoId = transferenciaProdutoId;
        }
       
        public TransferenciaProduto(Produto produto, Loja loja) {
                this.indicadorAlterarEstoque = true;
                this.transferenciaProdutoId = new TransferenciaProdutoId();
                setTransferencia(transferencia);
                setProduto(produto);
        }
       
        public TransferenciaProduto(Long sequencialProduto, Long sequencialTransferencia) {
                this.indicadorAlterarEstoque = true;
                this.transferenciaProdutoId = new TransferenciaProdutoId();
                this.transferenciaProdutoId.setSequencialProduto(sequencialProduto);
                this.transferenciaProdutoId.setSequencialTransferencia(sequencialTransferencia);
        }

        public TransferenciaProduto(TransferenciaProdutoDTO transferenciaProdutoDTO) {
                this.transferenciaProdutoId = new TransferenciaProdutoId();
                this.transferenciaProdutoId.setSequencialProduto(transferenciaProdutoDTO.getSequencialDoProduto());
                this.transferenciaProdutoId.setSequencialTransferencia(transferenciaProdutoDTO.getSequencialDaTransferencia());
                this.transferencia = new Transferencia(transferenciaProdutoDTO.getTransferenciaDTO());
                this.produto = new Produto(transferenciaProdutoDTO.getSequencialDoProduto());
                this.quantidadeTransferir = transferenciaProdutoDTO.getQuantidadeTransferir();
                this.indicadorRecebido = transferenciaProdutoDTO.getIndicadorRecebido();
                this.indicadorAlterarEstoque = transferenciaProdutoDTO.getIndicadorAlterarEstoque();
                if (VerificadorUtil.naoEstaNulo(transferenciaProdutoDTO.getUsuarioSaidaDTO())) {
                        this.usuarioSaida = new Usuario(transferenciaProdutoDTO.getUsuarioSaidaDTO());
                }
                if (VerificadorUtil.naoEstaNulo(transferenciaProdutoDTO.getUsuarioEntradaDTO())) {
                        this.usuarioEntrada = new Usuario(transferenciaProdutoDTO.getUsuarioEntradaDTO());
                }
        }

        @Override
        @Transient
        public Object getId() {
                return getTransferenciaProdutoId();
        }
        @Override
        public void setId(Object id) {
                this.transferenciaProdutoId = (TransferenciaProdutoId) id;
        }
       
        @EmbeddedId
        public TransferenciaProdutoId getTransferenciaProdutoId() {
                return transferenciaProdutoId;
        }
        public void setTransferenciaProdutoId(TransferenciaProdutoId transferenciaProdutoId) {
                this.transferenciaProdutoId = transferenciaProdutoId;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transfproduto_transferencia")
        @MapsId(value="sequencialTransferencia")
        @JoinColumn(name = "seq_transferencia", referencedColumnName="seq_transferencia", insertable=false, updatable=false, nullable = false)
        public Transferencia getTransferencia() {
                return transferencia;
        }
        public void setTransferencia(Transferencia transferencia) {
                if (VerificadorUtil.naoEstaNulo(transferencia)) {
                        transferenciaProdutoId.setSequencialTransferencia(transferencia.getSequencial());
                }
                this.transferencia = transferencia;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transfproduto_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)) {
                        transferenciaProdutoId.setSequencialProduto(produto.getSequencial());
                }
                this.produto = produto;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transfproduto_usuairo_saida")
        @JoinColumn(name = "seq_usuario_saida", nullable = true)
        public Usuario getUsuarioSaida() {
                return usuarioSaida;
        }
        public void setUsuarioSaida(Usuario usuarioSaida) {
                this.usuarioSaida = usuarioSaida;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transfproduto_usuairo_entrada")
        @JoinColumn(name = "seq_usuario_entrada", nullable = true)
        public Usuario getUsuarioEntrada() {
                return usuarioEntrada;
        }
        public void setUsuarioEntrada(Usuario usuarioEntrada) {
                this.usuarioEntrada = usuarioEntrada;
        }
       
        @Column(name="qtd_transferir")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Quantidade para transferência", groups = {Cadastrar.class, Alterar.class})
        public Integer getQuantidadeTransferir() {
                return quantidadeTransferir;
        }
        public void setQuantidadeTransferir(Integer quantidadeTransferir) {
                this.quantidadeTransferir = quantidadeTransferir;
        }
       
        @Column(name="ind_recebido")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Indicador de Recebido", groups = {Cadastrar.class, Alterar.class})
        public Boolean getIndicadorRecebido() {
                return indicadorRecebido;
        }
        public void setIndicadorRecebido(Boolean indicadorRecebido) {
                this.indicadorRecebido = indicadorRecebido;
        }
       
        @Column(name="dsc_observacao")
        @Size(max = 200, message = "Limite de caracteres ultrapassado: Observação")
        public String getObservacao() {
                return observacao;
        }
        public void setObservacao(String observacao) {
                this.observacao = observacao;
        }
       
        @Column(name="ind_alterar_estoque")
        public Boolean getIndicadorAlterarEstoque() {
                return indicadorAlterarEstoque;
        }
        public void setIndicadorAlterarEstoque(Boolean indicadorAlterarEstoque) {
                this.indicadorAlterarEstoque = indicadorAlterarEstoque;
        }
       
        @Transient
        public Long getSequencialDoTransferencia() {
                return VerificadorUtil.naoEstaNulo(transferencia)? transferencia.getSequencial() : null;
        }
       
        @Transient
        public Long getSequencialDoProduto() {
                return VerificadorUtil.naoEstaNulo(produto)? produto.getSequencial() : null;
        }
       
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((transferenciaProdutoId == null) ? 0 : transferenciaProdutoId.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;
                TransferenciaProduto other = (TransferenciaProduto) obj;
                if (transferenciaProdutoId == null) {
                        if (other.transferenciaProdutoId != null)
                                return false;
                } else if (!transferenciaProdutoId.equals(other.transferenciaProdutoId))
                        return false;
                return true;
        }
       
}