Subversion Repositories Integrator Subversion

Rev

Rev 195 | Rev 305 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
106 espaco 1
package br.com.ec.domain.service.pedido.impl;
2
 
3
import java.io.ByteArrayOutputStream;
4
import java.io.FileNotFoundException;
5
import java.io.IOException;
6
import java.util.ArrayList;
7
import java.util.Date;
8
import java.util.HashMap;
9
import java.util.List;
10
 
11
import org.apache.poi.hssf.usermodel.HSSFSheet;
12
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
13
import org.apache.poi.ss.usermodel.Row;
14
import org.primefaces.model.DefaultStreamedContent;
15
import org.primefaces.model.StreamedContent;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.stereotype.Service;
18
 
19
import br.com.ec.controller.util.ExcelUtil;
195 espaco 20
import br.com.ec.core.consulta.ParametrosConsulta;
21
import br.com.ec.core.exception.NegocioException;
22
import br.com.ec.core.generic.AbstractService;
23
import br.com.ec.core.generic.GenericRepository;
24
import br.com.ec.core.util.ArquivoUtil;
25
import br.com.ec.core.util.DataUtils;
26
import br.com.ec.core.util.TipoExtensao;
27
import br.com.ec.core.util.VerificadorUtil;
28
import br.com.ec.core.validador.Validador;
106 espaco 29
import br.com.ec.domain.dto.RankingPedidoDTO;
30
import br.com.ec.domain.model.Cliente;
31
import br.com.ec.domain.model.Loja;
32
import br.com.ec.domain.model.Pedido;
33
import br.com.ec.domain.model.PedidoProduto;
34
import br.com.ec.domain.model.Produto;
237 espaco 35
import br.com.ec.domain.model.Venda;
106 espaco 36
import br.com.ec.domain.model.tipos.TipoSituacaoPedido;
37
import br.com.ec.domain.service.pedido.PedidoService;
38
import br.com.ec.domain.service.usuario.UsuarioService;
39
import br.com.ec.infrastructure.repository.PedidoRepository;
40
 
41
@Service
42
public class PedidoServiceImpl extends AbstractService<Pedido> implements PedidoService {
43
 
44
        private UsuarioService usuarioService;
45
        private PedidoRepository pedidoRepository;
46
 
47
        @Autowired
48
        public PedidoServiceImpl(Validador validador, UsuarioService usuarioService, PedidoRepository pedidoRepository) {
49
                super(validador);
50
                this.usuarioService = usuarioService;
51
                this.pedidoRepository = pedidoRepository;
52
        }
53
 
54
        @Override
55
        protected GenericRepository<Pedido> getRepository() {
56
                return pedidoRepository;
57
        }
58
 
59
        @Override
60
        public Pedido consultarPedidoCompleto(Pedido pedido) {
61
                return pedidoRepository.consultarPedidoCompleto(pedido);
62
        }
63
 
64
        @Override
65
        protected void regrasNegocioAlterar(Pedido pedido) {
66
                super.regrasNegocioAlterar(pedido);
67
                verificarParametros(pedido);
68
        }
69
 
70
        @Override
71
        public Pedido adicionarPedido(final Pedido pedido, final String senhaUsuario) {
72
                verificarParametros(pedido);
73
                pedido.setUsuarioPedido(usuarioService.consultarUsuarioPorSenha(senhaUsuario));
74
                pedido.setDataPedido(DataUtils.getDataAtual());
75
                pedido.setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
76
                List<PedidoProduto> produtos = pedido.getProdutos();
77
                if (produtos.isEmpty()) {
78
                        produtos = null;
79
                }
80
                pedido.setProdutos(null);
81
                cadastrar(pedido);
82
                pedido.setProdutos(produtos);
83
                alterar(pedido);
84
                return pedido;
85
        }
86
 
87
        private void verificarParametros(final Pedido pedido) {
88
                if (VerificadorUtil.estaNulo(pedido.getCliente()) &&
89
                                VerificadorUtil.estaNuloOuVazio(pedido.getContatoCliente())) {
90
                        throw new NegocioException("Informe o contato do cliente.");
91
                }
92
                if (VerificadorUtil.estaNulo(pedido.getProdutos())) {
93
                        pedido.setProdutos(new ArrayList<PedidoProduto>());
94
                }
95
                if (pedido.getProdutos().isEmpty() && (VerificadorUtil.estaNulo(pedido.getModelo()))) {
96
                        throw new NegocioException("Informe algum produto ou o modelo");
97
                }
98
                if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getProdutos())) {
99
                        if (pedido.getProdutos().size() == 1) {
100
                                Produto primeiroProduto = pedido.getProdutos().get(0).getProduto();
101
                                pedido.setModelo(primeiroProduto.getModelo());
102
                                pedido.setTipoProduto(primeiroProduto.getTipo());
103
                                pedido.setGenero(primeiroProduto.getGenero());
104
                                pedido.setEstiloProduto(primeiroProduto.getEstilo());
105
                                pedido.setCorProduto(primeiroProduto.getCor());
106
                        }
107
                }
108
                if (VerificadorUtil.estaNuloOuVazio(pedido.getTipoSituacao())) {
109
                        pedido.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
110
                }
111
        }
112
 
113
        @Override
114
        public List<RankingPedidoDTO> consultarRankingPedidosNaoAtendidos(String generoPedidos, Date dataInicial, Date dataFinal) {
115
                return pedidoRepository.consultarRankingPedidosNaoAtendidos(generoPedidos, dataInicial, dataFinal);
116
        }
117
 
118
        @Override
119
        public List<RankingPedidoDTO> consultarRankingPedidos(String generoPedidos, Date dataInicial, Date dataFinal) {
120
                return pedidoRepository.consultarRankingPedidos(generoPedidos, dataInicial, dataFinal);
121
        }
122
 
123
        @Override
124
        public Integer obterQuantidadePedidosPorSituacao(String tipoPedido, String tipoSituacaoPedido) {
125
                return pedidoRepository.obterQuantidadePedidosPorSituacao(tipoPedido, tipoSituacaoPedido);
126
        }
127
 
128
        @Override
129
        public Integer obterQuantidadePedidosPorSituacaoEePeriodo(String tipoPedido, String tipoSituacaoPedido, Date dataInicial, Date dataFinal) {
130
                return pedidoRepository.obterQuantidadePedidosPorSituacaoEePeriodo(tipoPedido, tipoSituacaoPedido, dataInicial, dataFinal);
131
        }
132
 
133
        @Override
134
        public void excluirHistoricosDoPedido(Pedido pedido) {
135
                pedidoRepository.excluirHistoricosDoPedido(pedido);
136
        }
137
 
138
        @Override
139
        public void solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(Loja lojaEntrada, Produto produto) {
140
                pedidoRepository.solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(lojaEntrada, produto);
141
        }
142
 
143
        @Override
144
        public List<PedidoProduto> consultarPedidosNaoAtendidos(Produto produto) {
145
                return pedidoRepository.consultarPedidosNaoAtendidos(produto);
146
        }
147
 
148
        @Override
149
        public List<Pedido> consultarPedidosDoProdutoOuModeloPendentes(Produto produto) {
150
                return pedidoRepository.consultarPedidosDoProdutoOuModeloPendentes(produto);
151
        }
152
 
153
        @Override
154
        public List<Pedido> consultarPedidosDoCliente(Cliente cliente) {
155
                return pedidoRepository.consultarPedidosDoCliente(cliente);
156
        }
157
 
158
        @Override
237 espaco 159
        public Pedido consultarPedidoCompletoDaVenda(Venda venda) {
160
                return pedidoRepository.consultarPedidoCompletoDaVenda(venda);
161
        }
162
 
163
        @Override
106 espaco 164
        public StreamedContent gerarArquivoExcel(ParametrosConsulta<Pedido> parametrosConsulta) {
165
                HSSFWorkbook wb = new HSSFWorkbook();
166
        HSSFSheet aba = ExcelUtil.criarAbas(wb, "PEDIDOS");
167
        ExcelUtil.configurarCabecalho(wb, aba);
168
 
169
        // CONSULTAR
170
        ArrayList<Pedido> pedidos = (ArrayList<Pedido>) pedidoRepository.consultarPassandoParametrosConsulta(parametrosConsulta, 0,
171
                        pedidoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta), null, null, new HashMap<String, Object>());
172
 
173
        // PREENCHER
174
        Integer numeroLinha = 1;
175
        for (Pedido pedido : pedidos) {
176
                Row linha = aba.createRow(numeroLinha);
177
                ExcelUtil.criarCelula(wb, aba, linha, 0, ExcelUtil.configurarCelulaTexto(wb), pedido.getSequencial().toString());
178
                StringBuilder produtos = new StringBuilder();
179
                for (PedidoProduto pedidoProduto : pedido.getProdutos()) {
180
                        produtos.append(pedidoProduto.getProduto().getDescricaoComModeloCompletaComCodigo());
181
                        produtos.append(", ");
182
                        produtos.append(pedidoProduto.getProduto().getDescricaoDoEstilo());
183
                        produtos.append("; ");
184
                }
185
                ExcelUtil.criarCelula(wb, aba, linha, 1, ExcelUtil.configurarCelulaTexto(wb), produtos.toString());
186
                ExcelUtil.criarCelula(wb, aba, linha, 2, ExcelUtil.configurarCelulaNumerico(wb), pedido.getObservacao());
187
                numeroLinha++;
188
        }
189
 
190
        try {
191
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
192
                wb.write(stream);
193
                stream.close();
194
                wb.close();
195
                System.out.println("Finalizado!");
196
                return new DefaultStreamedContent(ArquivoUtil.gerarInputStreamDeArquivo(stream.toByteArray()), TipoExtensao.EXCEL.getDescricao(), "pedidos.xls");
197
        } catch (FileNotFoundException e) {
198
                e.printStackTrace();
199
        } catch (IOException e) {
200
                e.printStackTrace();
201
        }
202
        return null;
203
        }
204
 
205
}