Subversion Repositories Integrator Subversion

Rev

Rev 339 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.controller.managedbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;

import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.StreamedContent;
import org.springframework.context.annotation.Scope;

import br.com.ec.controller.managedbean.consultademanda.PedidoConsultaPorDemanda;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
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.dto.ParametrosConsultaPedidoDTO;
import br.com.ec.domain.dto.PedidoDTO;
import br.com.ec.domain.model.Cliente;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Pedido;
import br.com.ec.domain.model.PedidoHistorico;
import br.com.ec.domain.model.PedidoProduto;
import br.com.ec.domain.model.Produto;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.tipos.TipoPedido;
import br.com.ec.domain.model.tipos.TipoSituacaoPedido;
import br.com.ec.domain.model.tipos.TipoSituacaoPedidoResumido;
import br.com.ec.domain.service.cliente.ClienteService;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.pedido.PedidoService;
import br.com.ec.domain.service.produto.ProdutoService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandRelatorioStreamedContent;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.TipoOperacao;

@Named
@Scope("view")
public class PedidoBean extends AbstractBean<Pedido> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private PedidoConsultaPorDemanda lazy;
        private Loja lojaSelecionada;
        private String senhaUsuario;
        private String cpfCliente;
        private String codigoProduto;
        private Produto produtoSelecionado;
        private Double valorProdutoSelecionado;
        private Integer quantidadeProdutoSelecionado;
        private String observacaoProdutoSelecionado;
        private PedidoHistorico pedidoHistorico;
        private PedidoDTO pedidoParaImpressao;
       
        private PedidoService pedidoService;
        private ClienteService clienteService;
        private ProdutoService produtoService;
        private UsuarioService usuarioService;
        private LojaService lojaService;

        @Inject
        public PedidoBean(PedidoConsultaPorDemanda lazy, PedidoService pedidoService, ClienteService clienteService,
                        ProdutoService produtoService, UsuarioService usuarioService, LojaService lojaService) {
                this.lazy = lazy;
                this.pedidoService = pedidoService;
                this.clienteService = clienteService;
                this.produtoService = produtoService;
                this.usuarioService = usuarioService;
                this.lojaService = lojaService;
        }
       
        @Override
        public void preCarregamento() {
                limparEntidade();
                preencherLojaPeloParametro();
                limparParametros();
                prepararConsultaDemanda();
        }
       
        @Override
        public void preConsultar() {
                setTipoOperacao(TipoOperacao.CONSULTAR);
                prepararConsultaDemanda();
        }
       
        @Override
        public void preCadastrar() {
                super.preCadastrar();
                getEntidade().setLoja(getLojaSelecionada());
                entidade.setTipoPedido(TipoPedido.RESERVA.getValor());
        }

        private void preencherLojaPeloParametro() {
                if (VerificadorUtil.naoEstaNulo(getParametro("sequencialLoja"))) {
                        setLojaSelecionada(lojaService.consultarPorId(new Loja(new Long(getParametro("sequencialLoja").toString()))));
                        getEntidade().setLoja(getLojaSelecionada());
                }
        }
       
        @Override
        public void preAlterar(Pedido pedido) {
                pedido = pedidoService.consultarPedidoCompleto(pedido);
                super.preAlterar(pedido);
        }
       
        public void prepararAtendimento(Pedido pedido) {
                limparEntidade();
                setTipoOperacao(TipoOperacao.REALIZAR);
                pedido = pedidoService.consultarPedidoCompleto(pedido);
                setEntidade(pedido);
                PedidoHistorico pedidoHistorico = new PedidoHistorico();
                pedidoHistorico.setTipoSituacao(pedido.getTipoSituacao());
                pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
                pedidoHistorico.setPedido(pedido);
                setPedidoHistorico(pedidoHistorico);
                prepararImpressao(pedido);
        }
       
        @Override
        public void limparEntidade() {
                entidade = new Pedido();
                setSenhaUsuario("");
                setQuantidadeProdutoSelecionado(1);
        }
       
        public void limparParametros() {
                parametrosConsulta = new ParametrosConsultaPedidoDTO();
                parametrosConsulta.setEntidade(entidade);
                ((ParametrosConsultaPedidoDTO)parametrosConsulta).setAtendido(false);
        }

        @Override
        public GenericService<Pedido> getService() {
                return pedidoService;
        }
       
        @Override
        public Pedido getEntidade() {
                return entidade;
        }

        @Override
        public Pedido getId() {
                return getEntidade();
        }
       
        public PedidoConsultaPorDemanda getLazy() {
                return lazy;
        }
        public void setLazy(PedidoConsultaPorDemanda lazy) {
                this.lazy = lazy;
        }
        public void prepararConsultaDemanda() {
                lazy.setarParametrosConsulta(getParametrosConsulta());
        }
       
        public Loja getLojaSelecionada() {
                return lojaSelecionada;
        }
        public void setLojaSelecionada(Loja lojaSelecionada) {
                this.lojaSelecionada = lojaSelecionada;
        }
       
        public String getSenhaUsuario() {
                return senhaUsuario;
        }
        public void setSenhaUsuario(String senhaUsuario) {
                this.senhaUsuario = senhaUsuario;
        }
       
        public String getCpfCliente() {
                return VerificadorUtil.naoEstaNulo(cpfCliente)? cpfCliente.replace(".", "").replace("-", "") : cpfCliente;
        }
        public void setCpfCliente(String cpfCliente) {
                this.cpfCliente = cpfCliente;
        }
       
        public String getCodigoProduto() {
                return codigoProduto;
        }
        public void setCodigoProduto(String codigoProduto) {
                this.codigoProduto = codigoProduto;
        }
       
        public Produto getProdutoSelecionado() {
                return produtoSelecionado;
        }
        public void setProdutoSelecionado(Produto produtoSelecionado) {
                this.produtoSelecionado = produtoSelecionado;
        }
       
        public Double getValorProdutoSelecionado() {
                return valorProdutoSelecionado;
        }
        public void setValorProdutoSelecionado(Double valorProdutoSelecionado) {
                this.valorProdutoSelecionado = valorProdutoSelecionado;
        }
       
        public Integer getQuantidadeProdutoSelecionado() {
                return quantidadeProdutoSelecionado;
        }
        public void setQuantidadeProdutoSelecionado(Integer quantidadeProdutoSelecionado) {
                this.quantidadeProdutoSelecionado = quantidadeProdutoSelecionado;
        }
       
        public String getObservacaoProdutoSelecionado() {
                return observacaoProdutoSelecionado;
        }
        public void setObservacaoProdutoSelecionado(String observacaoProdutoSelecionado) {
                this.observacaoProdutoSelecionado = StringUtil.setarUpperCaseComTrim(observacaoProdutoSelecionado);
        }
       
        public PedidoHistorico getPedidoHistorico() {
                return pedidoHistorico;
        }
        public void setPedidoHistorico(PedidoHistorico pedidoHistorico) {
                this.pedidoHistorico = pedidoHistorico;
        }
       
        public TipoSituacaoPedido[] getTiposSituacaoPedido() {
                return TipoSituacaoPedido.values();
        }
       
        public TipoSituacaoPedidoResumido[] getTiposSituacaoPedidoResumido() {
                return TipoSituacaoPedidoResumido.values();
        }
       
        public TipoPedido[] getTiposPedido() {
                return TipoPedido.values();
        }
       
        public PedidoDTO getPedidoParaImpressao() {
                return pedidoParaImpressao;
        }
        public void setPedidoParaImpressao(PedidoDTO pedidoParaImpressao) {
                this.pedidoParaImpressao = pedidoParaImpressao;
        }
        public Long getSequencialDoPedidoParaImpressao() {
                return VerificadorUtil.naoEstaNulo(getPedidoParaImpressao())? getPedidoParaImpressao().getSequencial() : null;
        }
       
        /***************************************************************/
       
        @Override
        public void cadastrar() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                setEntidade(pedidoService.adicionarPedido(getEntidade(), senhaUsuario));
                                prepararImpressao(getEntidade());
                                LancadorMensagem.lancarSucesso("PEDIDO ADICIONADO COM SUCESSO: " + getEntidade().getSequencial());
                                limparEntidade();
                                getEntidade().setTipoPedido(TipoPedido.RESERVA.getValor());
                                getEntidade().setLoja(getLojaSelecionada());
                        }
                });
        }
       
        public PedidoDTO prepararImpressao(Pedido pedido) {
                PedidoDTO pedidoParaImpressao = new PedidoDTO();
                pedidoParaImpressao.preencher(pedido);
                setPedidoParaImpressao(pedidoParaImpressao);
                return pedidoParaImpressao;
        }
       
        @Override
        public void alterar() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                Usuario usuarioAtendimento = usuarioService.consultarUsuarioPorSenha(senhaUsuario);
                                usuarioService.naoPermitirPerfilLoja(usuarioAtendimento);
                               
                                getEntidade().setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
                                getEntidade().setUsuarioAtendimento(usuarioAtendimento);
                                if (VerificadorUtil.naoEstaNuloOuVazio(getEntidade().getProdutos())) {
                                        Produto primeiroProduto = getEntidade().getProdutos().get(0).getProduto();
                                        if (primeiroProduto.getCodigo().equals("000000") && getEntidade().getProdutos().size() > 1) {
                                                primeiroProduto = getEntidade().getProdutos().get(1).getProduto();
                                        }
                                        getEntidade().setModelo(primeiroProduto.getModelo());
                                        getEntidade().setGenero(primeiroProduto.getGenero());
                                }
                                alterar(getEntidade());
                        }
                });
        }
       
        public void atenderPedido() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                Usuario usuarioAtendimento = usuarioService.consultarUsuarioPorSenha(senhaUsuario);
                                usuarioService.naoPermitirPerfilLoja(usuarioAtendimento);
                               
                                getEntidade().setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
                                getEntidade().setTipoSituacao(getPedidoHistorico().getTipoSituacao());
                                getEntidade().setUsuarioAtendimento(usuarioAtendimento);
                                getPedidoHistorico().setUsuario(getEntidade().getUsuarioAtendimento());
                                if (VerificadorUtil.estaNulo(getEntidade().getHistorico())) {
                                        getEntidade().setHistorico(new ArrayList<PedidoHistorico>());
                                }
                                getEntidade().getHistorico().add(getPedidoHistorico());
                                pedidoService.alterar(getEntidade());
                                LancadorMensagem.lancarSucesso("ATENDIMENTO REALIZADO COM SUCESSO: " + getEntidade().getSequencial());
                                preConsultar();
                        }
                });
        }
       
        public void excluirPedido(final Pedido pedido) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                Pedido pedidoParaExcluir = pedidoService.consultarPorId(pedido);
                                pedidoService.excluirHistoricosDoPedido(pedidoParaExcluir);
                                pedidoService.excluir(pedidoParaExcluir);
                                LancadorMensagem.lancarSucesso("PEDIDO EXCLUÍDO COM SUCESSO!");
                        }
                });
        }
       
        public void selecionarCliente(final Cliente cliente) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                cliente.setAtivo(true);
                                clienteService.alterar(cliente);
                                getEntidade().setCliente(clienteService.consultarClientePorCpfCnpj(cliente.getCpfCnpj()));
                                getEntidade().setObservacao(getEntidade().getObservacao() + "\n" + getEntidade().getCliente().getEndereco());
                                setCpfCliente(null);
                                adicionandoParametroArgsConfirmandoAcao(true);
                        }
                });
        }
       
        public void retirarCliente() {
                getEntidade().setCliente(null);
        }
       
        public void consultarProduto() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                Produto produtoSelecionado = produtoService.consultarProdutoPorCodigoOuCodigoEAN(getCodigoProduto());
                                if (VerificadorUtil.naoEstaNulo(produtoSelecionado)) {
                                        setObservacaoProdutoSelecionado("");
                                        setQuantidadeProdutoSelecionado(1);
                                        setProdutoSelecionado(produtoSelecionado);
                                        if (VerificadorUtil.naoEstaNulo(produtoSelecionado.getValorVarejoPromocional())) {
                                                setValorProdutoSelecionado(produtoSelecionado.getValorVarejoPromocional());
                                        } else {
                                                setValorProdutoSelecionado(produtoSelecionado.getValorVarejo());
                                        }
                                }
                        }
                });
        }
       
        public void selecionarProduto() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                if (VerificadorUtil.estaNulo(getEntidade().getProdutos())) {
                                        getEntidade().setProdutos(new ArrayList<PedidoProduto>());
                                }
                                PedidoProduto pedidoProduto = new PedidoProduto();
                                pedidoProduto.setPedido(getEntidade());
                                pedidoProduto.setProduto(getProdutoSelecionado());
                                if (getEntidade().getProdutos().contains(pedidoProduto)) {
                                        throw new NegocioException("PRODUTO JÁ ADICIONADO");
                                }
                                pedidoProduto.setValor(getValorProdutoSelecionado());
                                pedidoProduto.setQuantidade(getQuantidadeProdutoSelecionado());
                                pedidoProduto.setObservacao(getObservacaoProdutoSelecionado());
                                getEntidade().getProdutos().add(pedidoProduto);
                                setCodigoProduto("");
                                getEntidade().setModelo(produtoSelecionado.getModelo());
                                getEntidade().setGenero(produtoSelecionado.getGenero());
                                LancadorMensagem.lancarSucesso("PRODUTO ADICIONADO COM SUCESSO");
                        }
                });
        }
       
        public void retirarProduto(final PedidoProduto pedidoProduto) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                getEntidade().getProdutos().remove(pedidoProduto);
                                setCodigoProduto("");
                                LancadorMensagem.lancarSucesso("PRODUTO RETIRADO COM SUCESSO");
                        }
                });
        }
       
        public void solicitarCompra() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                getEntidade().setDataSolicitadoParaComprar(DataUtils.getDataAtual());
                                pedidoService.alterar(getEntidade());
                                LancadorMensagem.lancarSucesso("PEDIDO SOLICITADO PARA COMPRAR");
                        }
                });
        }
       
        public void retirarSolicitacaoDeCompra() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                getEntidade().setDataSolicitadoParaComprar(null);
                                pedidoService.alterar(getEntidade());
                                LancadorMensagem.lancarSucesso("PEDIDO RETIRADO DA SOLICITAÇÃO DE COMPRA");
                        }
                });
        }
       
        public void iniciarPedidoPadrao() {
                entidade.setTipoPedido(TipoPedido.RESERVA.getValor());
        }
        public void iniciarPedidoAssistencia() {
                entidade.setTipoPedido(TipoPedido.ASSISTENCIA.getValor());
        }
       
        public StreamedContent downloadPlanilha() {
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() {
                                return pedidoService.gerarArquivoExcel(getParametrosConsulta());
//                              return RelatorioUtils.gerarArquivo(arquivo, "recibo", TipoExtensao.parse(extensao).getValue());
                        }
                });
        }
       
}