Subversion Repositories Integrator Subversion

Rev

Rev 182 | Details | Compare with Previous | Last modification | View Log | RSS feed

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