Subversion Repositories Integrator Subversion

Rev

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 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.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.annotations.ForeignKey;

import br.edu.cesmac.core.generic.identidade.Identidade;
import br.edu.cesmac.core.interfaces.Alterar;
import br.edu.cesmac.core.interfaces.Cadastrar;
import br.edu.cesmac.core.util.StringUtil;
import br.edu.cesmac.core.util.VerificadorUtil;

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

        private static final long serialVersionUID = 1L;

        private PedidoProdutoId pedidoProdutoId;
        private Pedido pedido;
        private Produto produto;
        private Integer quantidade = 1;
        private Double valor;
        private String observacao;
       
        public PedidoProduto() {
                this.pedidoProdutoId = new PedidoProdutoId();
        }
       
        public PedidoProduto(PedidoProdutoId produtoPedidoId) {
                this.pedidoProdutoId = produtoPedidoId;
        }

        public PedidoProduto(Produto produto, Pedido pedido) {
                pedidoProdutoId = new PedidoProdutoId();
                setPedido(pedido);
                setProduto(produto);
        }

        @Override
        @Transient
        public Object getId() {
                return getProdutoPedidoId();
        }
        @Override
        public void setId(Object id) {
                this.pedidoProdutoId = (PedidoProdutoId) id;
        }
       
        @EmbeddedId
        public PedidoProdutoId getProdutoPedidoId() {
                return pedidoProdutoId;
        }
        public void setProdutoPedidoId(PedidoProdutoId produtoPedidoId) {
                this.pedidoProdutoId = produtoPedidoId;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_pedidoproduto_pedido")
        @JoinColumn(name = "seq_pedido", insertable=false, updatable=false, nullable = false)
        public Pedido getPedido() {
                return pedido;
        }
        public void setPedido(Pedido pedido) {
                if (VerificadorUtil.naoEstaNulo(pedido)) {
                        pedidoProdutoId.setSequencialPedido(pedido.getSequencial());
                }
                this.pedido = pedido;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_pedidoproduto_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)) {
                        pedidoProdutoId.setSequencialProduto(produto.getSequencial());
                }
                this.produto = produto;
        }
       
        @Column(name="qtd_produto")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Quantidade do produto pedido", groups = {Cadastrar.class, Alterar.class})
        public Integer getQuantidade() {
                return quantidade;
        }
        public void setQuantidade(Integer quantidade) {
                this.quantidade = quantidade;
        }
       
        @Column(name="val_venda")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Valor do produto pedido", groups = {Cadastrar.class, Alterar.class})
        public Double getValor() {
                return valor;
        }
        public void setValor(Double valor) {
                this.valor = valor;
        }
       
        @Column(name="dsc_observacao")
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Observação")
        public String getObservacao() {
                return observacao;
        }
        public void setObservacao(String observacao) {
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
        }
       
        @Transient
        public Long getSequencialDoPedido() {
                return VerificadorUtil.naoEstaNulo(pedido)? pedido.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 + ((pedidoProdutoId == null) ? 0 : pedidoProdutoId.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;
                PedidoProduto other = (PedidoProduto) obj;
                if (pedidoProdutoId == null) {
                        if (other.pedidoProdutoId != null)
                                return false;
                } else if (!pedidoProdutoId.equals(other.pedidoProdutoId))
                        return false;
                return true;
        }
       
}