Subversion Repositories Integrator Subversion

Rev

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;
305 espaco 29
import br.com.ec.domain.dto.ParametrosVendaDTO;
106 espaco 30
import br.com.ec.domain.dto.RankingPedidoDTO;
31
import br.com.ec.domain.model.Cliente;
305 espaco 32
import br.com.ec.domain.model.Lancamento;
106 espaco 33
import br.com.ec.domain.model.Loja;
34
import br.com.ec.domain.model.Pedido;
311 espaco 35
import br.com.ec.domain.model.PedidoHistorico;
106 espaco 36
import br.com.ec.domain.model.PedidoProduto;
37
import br.com.ec.domain.model.Produto;
237 espaco 38
import br.com.ec.domain.model.Venda;
305 espaco 39
import br.com.ec.domain.model.tipos.TipoPedido;
106 espaco 40
import br.com.ec.domain.model.tipos.TipoSituacaoPedido;
41
import br.com.ec.domain.service.pedido.PedidoService;
42
import br.com.ec.domain.service.usuario.UsuarioService;
43
import br.com.ec.infrastructure.repository.PedidoRepository;
44
 
45
@Service
46
public class PedidoServiceImpl extends AbstractService<Pedido> implements PedidoService {
47
 
48
        private UsuarioService usuarioService;
49
        private PedidoRepository pedidoRepository;
50
 
51
        @Autowired
52
        public PedidoServiceImpl(Validador validador, UsuarioService usuarioService, PedidoRepository pedidoRepository) {
53
                super(validador);
54
                this.usuarioService = usuarioService;
55
                this.pedidoRepository = pedidoRepository;
56
        }
57
 
58
        @Override
59
        protected GenericRepository<Pedido> getRepository() {
60
                return pedidoRepository;
61
        }
62
 
63
        @Override
64
        public Pedido consultarPedidoCompleto(Pedido pedido) {
65
                return pedidoRepository.consultarPedidoCompleto(pedido);
66
        }
67
 
68
        @Override
69
        protected void regrasNegocioAlterar(Pedido pedido) {
70
                super.regrasNegocioAlterar(pedido);
71
                verificarParametros(pedido);
72
        }
73
 
74
        @Override
75
        public Pedido adicionarPedido(final Pedido pedido, final String senhaUsuario) {
76
                verificarParametros(pedido);
77
                pedido.setUsuarioPedido(usuarioService.consultarUsuarioPorSenha(senhaUsuario));
78
                pedido.setDataPedido(DataUtils.getDataAtual());
79
                pedido.setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
80
                List<PedidoProduto> produtos = pedido.getProdutos();
81
                if (produtos.isEmpty()) {
82
                        produtos = null;
83
                }
84
                pedido.setProdutos(null);
85
                cadastrar(pedido);
86
                pedido.setProdutos(produtos);
87
                alterar(pedido);
88
                return pedido;
89
        }
305 espaco 90
 
91
        @Override
92
        public Long cadastrarPedidoVendaPersonalizada(Venda vendaCadastrada, ParametrosVendaDTO parametrosVendaDTO) {
311 espaco 93
                Boolean cadastrarPedido = false;
305 espaco 94
                for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
311 espaco 95
                        if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getTipoPersonalizacao())) {
96
                                cadastrarPedido = true;
97
                                break;
98
                        }
99
                        if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getEstampa())) {
100
                                cadastrarPedido = true;
101
                                break;
102
                        }
305 espaco 103
                }
311 espaco 104
 
105
                if (cadastrarPedido) {
106
                        Pedido pedido = new Pedido();
107
                        pedido.setTipoPedido(TipoPedido.PERSONALIZACAO.getValor());
108
                        pedido.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
109
                        pedido.setDataPedido(DataUtils.getDataAtual());
110
                        pedido.setLoja(vendaCadastrada.getLoja());
111
                        if (VerificadorUtil.estaNulo(vendaCadastrada.getCliente())) {
112
                                pedido.setContatoCliente(vendaCadastrada.getObservacao());
113
                        }
114
                        pedido.setCliente(vendaCadastrada.getCliente());
115
                        pedido.setObservacao(vendaCadastrada.getObservacao());
116
                        pedido.setUsuarioPedido(vendaCadastrada.getUsuario());
117
                        pedido.setVenda(vendaCadastrada);
118
                        this.cadastrar(pedido);
119
 
120
                        List<PedidoHistorico> historico = new ArrayList<PedidoHistorico>();
121
                        PedidoHistorico pedidoHistorico = new PedidoHistorico();
122
                        pedidoHistorico.setPedido(pedido);
123
                        pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
124
                        pedidoHistorico.setObservacao("VENDA: " + vendaCadastrada.getSequencial());
125
                        pedidoHistorico.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
126
                        pedidoHistorico.setUsuario(vendaCadastrada.getUsuario());
127
                        historico.add(pedidoHistorico);
128
                        pedido.setHistorico(historico);
129
 
130
                        List<PedidoProduto> pedidosProduto = new ArrayList<PedidoProduto>();
131
                        for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
132
                                if ((VerificadorUtil.naoEstaNuloOuVazio(lancamento.getTipoPersonalizacao())) ||
133
                                                (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getEstampa()))) {
134
                                        PedidoProduto pedidoProduto = new PedidoProduto();
135
                                        pedidoProduto.setPedido(pedido);
136
                                        pedidoProduto.setProduto(lancamento.getProduto());
137
                                        pedidoProduto.setValor(lancamento.getValorVarejo());
138
                                        pedidoProduto.setEstampa(lancamento.getEstampa());
139
                                        pedidoProduto.setTipoPersonalizacao(lancamento.getTipoPersonalizacao());
140
                                        pedidoProduto.setObservacao(lancamento.getObservacao());
141
                                        pedidosProduto.add(pedidoProduto);
142
                                }
143
                        }
144
                        pedido.setProdutos(pedidosProduto);
145
                        this.alterar(pedido);
146
                        return pedido.getSequencial();
147
                }
148
                return null;
305 espaco 149
        }
106 espaco 150
 
151
        private void verificarParametros(final Pedido pedido) {
152
                if (VerificadorUtil.estaNulo(pedido.getCliente()) &&
153
                                VerificadorUtil.estaNuloOuVazio(pedido.getContatoCliente())) {
154
                        throw new NegocioException("Informe o contato do cliente.");
155
                }
156
                if (VerificadorUtil.estaNulo(pedido.getProdutos())) {
157
                        pedido.setProdutos(new ArrayList<PedidoProduto>());
158
                }
159
                if (pedido.getProdutos().isEmpty() && (VerificadorUtil.estaNulo(pedido.getModelo()))) {
160
                        throw new NegocioException("Informe algum produto ou o modelo");
161
                }
162
                if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getProdutos())) {
163
                        if (pedido.getProdutos().size() == 1) {
164
                                Produto primeiroProduto = pedido.getProdutos().get(0).getProduto();
165
                                pedido.setModelo(primeiroProduto.getModelo());
166
                                pedido.setTipoProduto(primeiroProduto.getTipo());
167
                                pedido.setGenero(primeiroProduto.getGenero());
168
                                pedido.setEstiloProduto(primeiroProduto.getEstilo());
169
                                pedido.setCorProduto(primeiroProduto.getCor());
170
                        }
171
                }
172
                if (VerificadorUtil.estaNuloOuVazio(pedido.getTipoSituacao())) {
173
                        pedido.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
174
                }
175
        }
176
 
177
        @Override
178
        public List<RankingPedidoDTO> consultarRankingPedidosNaoAtendidos(String generoPedidos, Date dataInicial, Date dataFinal) {
179
                return pedidoRepository.consultarRankingPedidosNaoAtendidos(generoPedidos, dataInicial, dataFinal);
180
        }
181
 
182
        @Override
183
        public List<RankingPedidoDTO> consultarRankingPedidos(String generoPedidos, Date dataInicial, Date dataFinal) {
184
                return pedidoRepository.consultarRankingPedidos(generoPedidos, dataInicial, dataFinal);
185
        }
186
 
187
        @Override
188
        public Integer obterQuantidadePedidosPorSituacao(String tipoPedido, String tipoSituacaoPedido) {
189
                return pedidoRepository.obterQuantidadePedidosPorSituacao(tipoPedido, tipoSituacaoPedido);
190
        }
191
 
192
        @Override
193
        public Integer obterQuantidadePedidosPorSituacaoEePeriodo(String tipoPedido, String tipoSituacaoPedido, Date dataInicial, Date dataFinal) {
194
                return pedidoRepository.obterQuantidadePedidosPorSituacaoEePeriodo(tipoPedido, tipoSituacaoPedido, dataInicial, dataFinal);
195
        }
196
 
197
        @Override
198
        public void excluirHistoricosDoPedido(Pedido pedido) {
199
                pedidoRepository.excluirHistoricosDoPedido(pedido);
200
        }
201
 
202
        @Override
203
        public void solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(Loja lojaEntrada, Produto produto) {
204
                pedidoRepository.solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(lojaEntrada, produto);
205
        }
206
 
207
        @Override
208
        public List<PedidoProduto> consultarPedidosNaoAtendidos(Produto produto) {
209
                return pedidoRepository.consultarPedidosNaoAtendidos(produto);
210
        }
211
 
212
        @Override
213
        public List<Pedido> consultarPedidosDoProdutoOuModeloPendentes(Produto produto) {
214
                return pedidoRepository.consultarPedidosDoProdutoOuModeloPendentes(produto);
215
        }
216
 
217
        @Override
218
        public List<Pedido> consultarPedidosDoCliente(Cliente cliente) {
219
                return pedidoRepository.consultarPedidosDoCliente(cliente);
220
        }
221
 
222
        @Override
237 espaco 223
        public Pedido consultarPedidoCompletoDaVenda(Venda venda) {
224
                return pedidoRepository.consultarPedidoCompletoDaVenda(venda);
225
        }
226
 
227
        @Override
106 espaco 228
        public StreamedContent gerarArquivoExcel(ParametrosConsulta<Pedido> parametrosConsulta) {
229
                HSSFWorkbook wb = new HSSFWorkbook();
230
        HSSFSheet aba = ExcelUtil.criarAbas(wb, "PEDIDOS");
231
        ExcelUtil.configurarCabecalho(wb, aba);
232
 
233
        // CONSULTAR
234
        ArrayList<Pedido> pedidos = (ArrayList<Pedido>) pedidoRepository.consultarPassandoParametrosConsulta(parametrosConsulta, 0,
235
                        pedidoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta), null, null, new HashMap<String, Object>());
236
 
237
        // PREENCHER
238
        Integer numeroLinha = 1;
239
        for (Pedido pedido : pedidos) {
240
                Row linha = aba.createRow(numeroLinha);
241
                ExcelUtil.criarCelula(wb, aba, linha, 0, ExcelUtil.configurarCelulaTexto(wb), pedido.getSequencial().toString());
242
                StringBuilder produtos = new StringBuilder();
243
                for (PedidoProduto pedidoProduto : pedido.getProdutos()) {
244
                        produtos.append(pedidoProduto.getProduto().getDescricaoComModeloCompletaComCodigo());
245
                        produtos.append(", ");
246
                        produtos.append(pedidoProduto.getProduto().getDescricaoDoEstilo());
247
                        produtos.append("; ");
248
                }
249
                ExcelUtil.criarCelula(wb, aba, linha, 1, ExcelUtil.configurarCelulaTexto(wb), produtos.toString());
250
                ExcelUtil.criarCelula(wb, aba, linha, 2, ExcelUtil.configurarCelulaNumerico(wb), pedido.getObservacao());
251
                numeroLinha++;
252
        }
253
 
254
        try {
255
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
256
                wb.write(stream);
257
                stream.close();
258
                wb.close();
259
                System.out.println("Finalizado!");
260
                return new DefaultStreamedContent(ArquivoUtil.gerarInputStreamDeArquivo(stream.toByteArray()), TipoExtensao.EXCEL.getDescricao(), "pedidos.xls");
261
        } catch (FileNotFoundException e) {
262
                e.printStackTrace();
263
        } catch (IOException e) {
264
                e.printStackTrace();
265
        }
266
        return null;
267
        }
268
 
269
}