Subversion Repositories Integrator Subversion

Rev

Rev 346 | 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 org.hibernate.annotations.ForeignKey;

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.model.tipos.TipoPedido;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.model.tipos.TipoSituacaoPedido;

@Entity
@Table(name="sec_pedido", schema="sc_sec")
public class Pedido implements Serializable {
         
        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private Loja loja;
        private Date dataPedido;
        private Usuario usuarioPedido;
       
        private String tipoSituacao;
        private String tipoProduto;
        private String tipoPedido;
       
        /*
        private Cliente cliente;
        private String contatoCliente;
        private Modelo modelo;
        private Venda venda;
       
        private String genero;
       
        private String estiloProduto;
        private String corProduto;
       
        private String observacao;
        private Usuario usuarioAtendimento;
        */

        private Date dataUltimaAlteracaoSituacao;
        /*
       
        private Date dataSolicitadoParaComprar;
       
        private List<PedidoHistorico> historico;
        private List<PedidoProduto> produtos;
       
        */

        private Date dataEntrega;
        private Double kilometragemEntrega;
       
//      private String observacaoMaterialRecolhido;
//      private String descricaoServico;
       
        @Id
        @SequenceGenerator(name = "sq_pedido")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="seq_pedido", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_pedido_loja")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Loja do pedido", groups = {Cadastrar.class, Alterar.class})
        @JoinColumn(name = "seq_loja", referencedColumnName="seq_loja", nullable=false)
        public Loja getLoja() {
                return loja;
        }
        public void setLoja(Loja loja) {
                this.loja = loja;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_pedido_usuario")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Usuário do pedido", groups = {Cadastrar.class, Alterar.class})
        @JoinColumn(name = "seq_usuario_pedido", nullable=false)
        public Usuario getUsuarioPedido() {
                return usuarioPedido;
        }
        public void setUsuarioPedido(Usuario usuarioPedido) {
                this.usuarioPedido = usuarioPedido;
        }
        /*
        @ManyToOne
        @ForeignKey(name="fk_pedido_usuarioatend")
        @JoinColumn(name = "seq_usuario_atendimento", nullable=true)
        public Usuario getUsuarioAtendimento() {
                return usuarioAtendimento;
        }
        public void setUsuarioAtendimento(Usuario usuarioAtendimento) {
                this.usuarioAtendimento = usuarioAtendimento;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_pedido_cliente")
        @JoinColumn(name = "seq_cliente", referencedColumnName="seq_cliente", nullable=true)
        public Cliente getCliente() {
                return cliente;
        }
        public void setCliente(Cliente cliente) {
                this.cliente = cliente;
        }
       
        @Column(name="dsc_contato_cliente")
        @Size(max = 200, message = "Limite de caracteres ultrapassado: Contato do Cliente")
        public String getContatoCliente() {
                return contatoCliente;
        }
        public void setContatoCliente(String contatoCliente) {
                this.contatoCliente = StringUtil.setarUpperCaseComTrim(contatoCliente);
        }
       
        @ManyToOne
        @ForeignKey(name="fk_pedido_modelo")
        @JoinColumn(name = "seq_modelo", referencedColumnName="seq_modelo", nullable=true)
        public Modelo getModelo() {
                return modelo;
        }
        public void setModelo(Modelo modelo) {
                this.modelo = modelo;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_pedido_venda")
        @JoinColumn(name = "seq_venda", referencedColumnName="seq_venda", nullable=true)
        public Venda getVenda() {
                return venda;
        }
        public void setVenda(Venda venda) {
                this.venda = venda;
        }
       
        @Column(name="tip_genero_produto")
        public String getGenero() {
                return genero;
        }
        public void setGenero(String genero) {
                this.genero = genero;
        }
       
        @Column(name="tip_estilo_produto")
        public String getEstiloProduto() {
                return estiloProduto;
        }
        public void setEstiloProduto(String estiloProduto) {
                this.estiloProduto = estiloProduto;
        }
       
        @Column(name="tip_cor_produto")
        public String getCorProduto() {
                return corProduto;
        }
        public void setCorProduto(String corProduto) {
                this.corProduto = corProduto;
        }
       
        @Column(name="obs_pedido")
        @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);
        }
        */

       
        @Column(name="tip_tipo_produto")
        public String getTipoProduto() {
                return tipoProduto;
        }
        public void setTipoProduto(String tipoProduto) {
                this.tipoProduto = tipoProduto;
        }
       
        @Column(name="tip_situacao")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Situação do pedido", groups = {Cadastrar.class, Alterar.class})
        public String getTipoSituacao() {
                return tipoSituacao;
        }
        public void setTipoSituacao(String tipoSituacao) {
                this.tipoSituacao = tipoSituacao;
        }
       
        @Column(name="dth_pedido", nullable=false)
        @NotNull(message = "Parâmetro obrigatório não preenchido: Data do pedido", groups = {Cadastrar.class, Alterar.class})
        public Date getDataPedido() {
                return dataPedido;
        }
        public void setDataPedido(Date dataPedido) {
                this.dataPedido = dataPedido;
        }

        @Column(name="dth_alteracao_situacao")
        public Date getDataUltimaAlteracaoSituacao() {
                return dataUltimaAlteracaoSituacao;
        }
        public void setDataUltimaAlteracaoSituacao(Date dataUltimaAlteracaoSituacao) {
                this.dataUltimaAlteracaoSituacao = dataUltimaAlteracaoSituacao;
        }
       
        /*
        @Column(name="dth_solicitacao_compra")
        public Date getDataSolicitadoParaComprar() {
                return dataSolicitadoParaComprar;
        }
        public void setDataSolicitadoParaComprar(Date dataSolicitadoParaComprar) {
                this.dataSolicitadoParaComprar = dataSolicitadoParaComprar;
        }
        */

       
        @Column(name="tip_pedido")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Tipo do pedido", groups = {Cadastrar.class, Alterar.class})
        public String getTipoPedido() {
                return tipoPedido;
        }
        public void setTipoPedido(String tipoPedido) {
                this.tipoPedido = tipoPedido;
        }
       
        @Column(name="dth_entrega")
        public Date getDataEntrega() {
                return dataEntrega;
        }
        public void setDataEntrega(Date dataEntrega) {
                this.dataEntrega = dataEntrega;
        }
       
        @Column(name="val_kilometragem_entrega")
        public Double getKilometragemEntrega() {
                return kilometragemEntrega;
        }
        public void setKilometragemEntrega(Double kilometragemEntrega) {
                this.kilometragemEntrega = kilometragemEntrega;
        }
       
        /*
        @OneToMany(mappedBy="pedido", cascade=CascadeType.ALL, orphanRemoval=true)
        public List<PedidoHistorico> getHistorico() {
                return historico;
        }
        public void setHistorico(List<PedidoHistorico> historico) {
                this.historico = historico;
        }
       
        @OneToMany(mappedBy="pedido", cascade=CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval=true)
        public List<PedidoProduto> getProdutos() {
                return produtos;
        }
        public void setProdutos(List<PedidoProduto> produtos) {
                this.produtos = produtos;
        }
        */

       
        @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;
                Pedido other = (Pedido) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
       
        @Transient
        public Boolean foiAtendido() {
                return TipoSituacaoPedido.INVALIDO.getValor().equals(tipoSituacao) ||
                                TipoSituacaoPedido.FINALIZADO.getValor().equals(tipoSituacao) ||
                                TipoSituacaoPedido.FINALIZADO_COM_VENDAS.getValor().equals(tipoSituacao);
        }
       
        @Transient
        public String getDescricaoDaSituacao() {
                return TipoSituacaoPedido.parse(getTipoSituacao()).getDescricao();
        }
       
        @Transient
        public String getDescricaoDoTipoProduto() {
                return VerificadorUtil.naoEstaNulo(tipoProduto)? TipoProduto.parse(tipoProduto).getDescricao() : "";
        }
       
        @Transient
        public String getDescricaoDoTipoPedido() {
                return VerificadorUtil.naoEstaNulo(tipoPedido)? TipoPedido.parse(tipoPedido).getDescricao() : "";
        }
       
        @Transient
        public Boolean pedidoEhReserva() {
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.RESERVA.getValor()) : false;
        }
       
        @Transient
        public Boolean pedidoEhTroca() {
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.TROCA.getValor()) : false;
        }
       
        @Transient
        public Boolean pedidoEhAssistencia() {
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.ASSISTENCIA.getValor()) : false;
        }
       
        @Transient
        public Boolean pedidoEhPersonalizacao() {
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.PERSONALIZACAO.getValor()) : false;
        }
       
        /*
        @Transient
        public String getDescricaoDoModelo() {
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getDescricao() : "";
        }
       
        @Transient
        public String getDescricaoDoEstiloProduto() {
                return VerificadorUtil.naoEstaNulo(estiloProduto)? TipoEstiloProduto.parse(estiloProduto).getDescricao() : "";
        }
       
        @Transient
        public String getDescricaoDaCorProduto() {
                return VerificadorUtil.naoEstaNulo(corProduto)? TipoCorProduto.parse(corProduto).getDescricao() : "";
        }
       
        @Transient
        public String getDescricaoDoGeneroProduto() {
                return VerificadorUtil.naoEstaNulo(genero)? TipoGenero.parse(genero).getDescricao() : "";
        }
       
        @Transient
        public String getNomeDoCliente() {
                return VerificadorUtil.naoEstaNulo(cliente)? cliente.getNome() : "";
        }
       
        @Transient
        public String getContatoDoCliente() {
                return VerificadorUtil.naoEstaNulo(cliente)? cliente.getContato() : "";
        }
       
        @Transient
        public String getTelefoneEeContatoDoCliente() {
                return VerificadorUtil.naoEstaNulo(cliente)?
                                VerificadorUtil.naoEstaNuloOuVazio(cliente.getTelefone())? cliente.getTelefone()  + " " + cliente.getContato():
                                        VerificadorUtil.naoEstaNuloOuVazio(cliente.getContato())? cliente.getContato() : "" : "";
        }
       
        @Transient
        public String getInformacoesBasicasDoCliente() {
                return VerificadorUtil.naoEstaNulo(cliente)? getNomeDoCliente() + " " + getContatoCliente(): getContatoCliente();
        }
        */

        /*
        @Transient
        public String getDescricaoComModeloCompleta() {
                String descricaoCompleta = "";
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
                        descricaoCompleta = getDescricaoDoModelo() + " - ";
                }
                return descricaoCompleta + getDescricao();
        }
        */

        /*
        @Transient
        public Long getSequencialDoModelo() {
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
        }
       
        @Transient
        public Long getSequencialDaLoja() {
                return VerificadorUtil.naoEstaNulo(loja)? loja.getSequencial() : null;
        }
       
        @Transient
        public String getDescricaoDaLoja() {
                return VerificadorUtil.naoEstaNulo(loja)? loja.getDescricao() : null;
        }
       
        @Transient
        public Integer getQuantidadeDiasPedido() {
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataPedido());
        }
       
        @Transient
        public Integer getQuantidadeDiasAtendimento() {
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaAlteracaoSituacao());
        }
       
        @Transient
        public String getImagemCronometroPedido() {
                Integer quantidadeDias = getQuantidadeDiasPedido();
                if (quantidadeDias < 15) {
                        return "cronometro_verde_sembg";
                }
                if (quantidadeDias < 30) {
                        return "cronometro_amarelo_sembg";
                }
                return "cronometro_vermelho_sembg";
        }
       
        @Transient
        public String getCorSituacaoPedido() {
                return TipoSituacaoPedido.parse(getTipoSituacao()).getCor();
        }
       
        @Transient
        public String getCorPedido() {
                Integer quantidadeDias = getQuantidadeDiasPedido();
                if (quantidadeDias < 15) {
                        return "green";
                }
                return "red";
        }
       
        @Transient
        public String getCorPedidoAtendimento() {
                Integer quantidadeDias = getQuantidadeDiasAtendimento();
                if (quantidadeDias < 15) {
                        return "green";
                }
                return "red";
        }
       
        @Transient
        public Double getValorTotalProdutos() {
                Double total = 0.0;
                if (VerificadorUtil.naoEstaNuloOuVazio(getProdutos())) {
                        for (PedidoProduto pedidoProduto : getProdutos()) {
                                if (VerificadorUtil.naoEstaNulo(pedidoProduto.getValor())) {
                                        total = total + (pedidoProduto.getValor() * pedidoProduto.getQuantidade());
                                }
                        }
                }
                return total;
        }
       
        @Transient
        public List<PedidoHistorico> getHistoricoOrdenado() {
                List<PedidoHistorico> historicoOrdenado = null;
                if (VerificadorUtil.naoEstaNulo(getHistorico())) {
                        historicoOrdenado = new ArrayList<PedidoHistorico>(getHistorico());
                        Collections.sort(historicoOrdenado, new Comparator<PedidoHistorico>() {
                                public int compare(PedidoHistorico p1, PedidoHistorico p2) {
                                        return p1.getDataHistorico().compareTo(p2.getDataHistorico());
                                };
                        });
                }
                return historicoOrdenado;
        }
        */

}