Subversion Repositories Integrator Subversion

Rev

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