Subversion Repositories Integrator Subversion

Rev

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

package br.com.ec.domain.service.impl;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.ExtratoEntregasDTO;
import br.com.ec.domain.model.Pedido;
import br.com.ec.domain.service.PedidoService;
import br.com.ec.domain.service.UsuarioService;
import br.com.ec.repository.PedidoRepository;

@Service
public class PedidoServiceImpl extends AbstractService<Pedido> implements PedidoService {
       
        private UsuarioService usuarioService;
        private PedidoRepository pedidoRepository;

        @Autowired
        public PedidoServiceImpl(Validador validador, UsuarioService usuarioService, PedidoRepository pedidoRepository) {
                super(validador);
                this.usuarioService = usuarioService;
                this.pedidoRepository = pedidoRepository;
        }

        @Override
        protected GenericRepository<Pedido> getRepository() {
                return pedidoRepository;
        }
       
        @Override
        public ExtratoEntregasDTO consultarExtratoEntregas(ExtratoEntregasDTO extratoEntregasDTO) {
                extratoEntregasDTO.setEntregasDTO(pedidoRepository.consultarEntregas(extratoEntregasDTO));
                return extratoEntregasDTO;
        }
       
        @Override
        public Integer obterQuantidadePedidosPorSituacaoEePeriodo(String tipoPedido, String tipoSituacaoPedido, Date dataInicial, Date dataFinal) {
                return pedidoRepository.obterQuantidadePedidosPorSituacaoEePeriodo(tipoPedido, tipoSituacaoPedido, dataInicial, dataFinal);
        }
       
        /*
        @Override
        protected void regrasNegocioAlterar(Pedido pedido) {
                super.regrasNegocioAlterar(pedido);
                verificarParametros(pedido);
        }
        */

        /*
        @Override
        public Pedido consultarPedidoCompleto(Pedido pedido) {
                return pedidoRepository.consultarPedidoCompleto(pedido);
        }
       
        @Override
        public Pedido adicionarPedido(final Pedido pedido, final String senhaUsuario) {
                verificarParametros(pedido);
                pedido.setUsuarioPedido(usuarioService.consultarUsuarioPorSenha(senhaUsuario));
                pedido.setDataPedido(DataUtils.getDataAtual());
                pedido.setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
                List<PedidoProduto> produtos = pedido.getProdutos();
                if (produtos.isEmpty()) {
                        produtos = null;
                }
                pedido.setProdutos(null);
                cadastrar(pedido);
                pedido.setProdutos(produtos);
                alterar(pedido);
                return pedido;
        }
       
        @Override
        public Long cadastrarPedidoVendaPersonalizada(Venda vendaCadastrada, ParametrosVendaDTO parametrosVendaDTO) {
                Boolean cadastrarPedido = false;
                for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
                        if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getTipoPersonalizacao())) {
                                cadastrarPedido = true;
                                break;
                        }
                        if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getEstampa())) {
                                cadastrarPedido = true;
                                break;
                        }
                }
                       
                if (cadastrarPedido) {
                        Pedido pedido = new Pedido();
                        pedido.setTipoPedido(TipoPedido.PERSONALIZACAO.getValor());
                        pedido.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
                        pedido.setDataPedido(DataUtils.getDataAtual());
                        pedido.setLoja(vendaCadastrada.getLoja());
                        if (VerificadorUtil.estaNulo(vendaCadastrada.getCliente())) {
                                pedido.setContatoCliente(vendaCadastrada.getObservacao());
                        }
                        pedido.setCliente(vendaCadastrada.getCliente());
                        pedido.setObservacao(vendaCadastrada.getObservacao());
                        pedido.setUsuarioPedido(usuarioService.consultarUsuarioPorPessoa(vendaCadastrada.getVendedor().getPessoa()));
                        pedido.setVenda(vendaCadastrada);
                        this.cadastrar(pedido);
                       
                        List<PedidoHistorico> historico = new ArrayList<PedidoHistorico>();
                        PedidoHistorico pedidoHistorico = new PedidoHistorico();
                        pedidoHistorico.setPedido(pedido);
                        pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
                        pedidoHistorico.setObservacao("VENDA: " + vendaCadastrada.getSequencial());
                        pedidoHistorico.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
                        pedidoHistorico.setUsuario(pedido.getUsuarioPedido());
                        historico.add(pedidoHistorico);
                        pedido.setHistorico(historico);
                       
                        List<PedidoProduto> pedidosProduto = new ArrayList<PedidoProduto>();
                        for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
                                if ((VerificadorUtil.naoEstaNuloOuVazio(lancamento.getTipoPersonalizacao())) ||
                                                (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getEstampa()))) {
                                        PedidoProduto pedidoProduto = new PedidoProduto();
                                        pedidoProduto.setPedido(pedido);
                                        pedidoProduto.setProduto(lancamento.getProduto());
                                        pedidoProduto.setValor(lancamento.getValorVenda());
                                        pedidoProduto.setEstampa(lancamento.getEstampa());
                                        pedidoProduto.setTipoPersonalizacao(lancamento.getTipoPersonalizacao());
                                        pedidoProduto.setObservacao(lancamento.getObservacao());
                                        pedidosProduto.add(pedidoProduto);
                                }
                        }
                        pedido.setProdutos(pedidosProduto);
                        this.alterar(pedido);
                        return pedido.getSequencial();
                }
                return null;
        }

        private void verificarParametros(final Pedido pedido) {
                if (VerificadorUtil.estaNulo(pedido.getCliente()) &&
                                VerificadorUtil.estaNuloOuVazio(pedido.getContatoCliente())) {
                        throw new NegocioException("Informe o contato do cliente.");
                }
                if (VerificadorUtil.estaNulo(pedido.getProdutos())) {
                        pedido.setProdutos(new ArrayList<PedidoProduto>());
                }
                if (pedido.getProdutos().isEmpty() && (VerificadorUtil.estaNulo(pedido.getModelo()))) {
                        throw new NegocioException("Informe algum produto ou o modelo");
                }
                if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getProdutos())) {
                        if (pedido.getProdutos().size() == 1) {
                                Produto primeiroProduto = pedido.getProdutos().get(0).getProduto();
                                pedido.setModelo(primeiroProduto.getModelo());
                                pedido.setTipoProduto(primeiroProduto.getTipo());
                                pedido.setGenero(primeiroProduto.getGenero());
                                pedido.setEstiloProduto(primeiroProduto.getEstilo());
                                pedido.setCorProduto(primeiroProduto.getCor());
                        }
                }
                if (VerificadorUtil.estaNuloOuVazio(pedido.getTipoSituacao())) {
                        pedido.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
                }
        }
       
        @Override
        public List<RankingPedidoDTO> consultarRankingPedidosNaoAtendidos(String generoPedidos, Date dataInicial, Date dataFinal) {
                return pedidoRepository.consultarRankingPedidosNaoAtendidos(generoPedidos, dataInicial, dataFinal);
        }
       
        @Override
        public List<RankingPedidoDTO> consultarRankingPedidos(String generoPedidos, Date dataInicial, Date dataFinal) {
                return pedidoRepository.consultarRankingPedidos(generoPedidos, dataInicial, dataFinal);
        }
       
        @Override
        public Integer obterQuantidadePedidosPorSituacao(String tipoPedido, String tipoSituacaoPedido) {
                return pedidoRepository.obterQuantidadePedidosPorSituacao(tipoPedido, tipoSituacaoPedido);
        }
       
        @Override
        public void excluirHistoricosDoPedido(Pedido pedido) {
                pedidoRepository.excluirHistoricosDoPedido(pedido);
        }
       
        @Override
        public void solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(Loja lojaEntrada, Produto produto) {
                pedidoRepository.solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(lojaEntrada, produto);
        }
       
        @Override
        public List<PedidoProduto> consultarPedidosNaoAtendidos(Produto produto) {
                return pedidoRepository.consultarPedidosNaoAtendidos(produto);
        }
       
        @Override
        public List<Pedido> consultarPedidosDoProdutoOuModeloPendentes(Produto produto) {
                return pedidoRepository.consultarPedidosDoProdutoOuModeloPendentes(produto);
        }
       
        @Override
        public List<Pedido> consultarPedidosDoCliente(Cliente cliente) {
                return pedidoRepository.consultarPedidosDoCliente(cliente);
        }
       
        @Override
        public Pedido consultarPedidoCompletoDaVenda(Venda venda) {
                return pedidoRepository.consultarPedidoCompletoDaVenda(venda);
        }
       
        @Override
        public StreamedContent gerarArquivoExcel(ParametrosConsulta<Pedido> parametrosConsulta) {
                HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet aba = ExcelUtil.criarAbas(wb, "PEDIDOS");
        ExcelUtil.configurarCabecalho(wb, aba);
       
        // CONSULTAR
        ArrayList<Pedido> pedidos = (ArrayList<Pedido>) pedidoRepository.consultarPassandoParametrosConsulta(parametrosConsulta, 0,
                        pedidoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta), null, null, new HashMap<String, Object>());
       
        // PREENCHER
        Integer numeroLinha = 1;
        for (Pedido pedido : pedidos) {
                Row linha = aba.createRow(numeroLinha);
                ExcelUtil.criarCelula(wb, aba, linha, 0, ExcelUtil.configurarCelulaTexto(wb), pedido.getSequencial().toString());
                StringBuilder produtos = new StringBuilder();
                for (PedidoProduto pedidoProduto : pedido.getProdutos()) {
                        produtos.append(pedidoProduto.getProduto().getDescricaoComModeloCompletaComCodigo());
                        produtos.append(", ");
                        produtos.append(pedidoProduto.getProduto().getDescricaoDoEstilo());
                        produtos.append("; ");
                }
                ExcelUtil.criarCelula(wb, aba, linha, 1, ExcelUtil.configurarCelulaTexto(wb), produtos.toString());
                ExcelUtil.criarCelula(wb, aba, linha, 2, ExcelUtil.configurarCelulaNumerico(wb), pedido.getObservacao());
                numeroLinha++;
        }
       
        try {
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                wb.write(stream);
                stream.close();
                wb.close();
                System.out.println("Finalizado!");
                return new DefaultStreamedContent(ArquivoUtil.gerarInputStreamDeArquivo(stream.toByteArray()), TipoExtensao.EXCEL.getDescricao(), "pedidos.xls");
        } catch (FileNotFoundException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        }
        return null;
        }
        */

}