Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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