Subversion Repositories Integrator Subversion

Rev

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

Rev Author Line No. Line
229 espaco 1
package br.com.ec.repository.jpa;
2
 
561 blopes 3
import java.util.ArrayList;
229 espaco 4
import java.util.Date;
261 espaco 5
import java.util.List;
229 espaco 6
 
230 espaco 7
import javax.persistence.Query;
229 espaco 8
import javax.persistence.TypedQuery;
9
 
10
import org.springframework.stereotype.Repository;
11
 
12
import br.com.ec.core.util.DataUtils;
230 espaco 13
import br.com.ec.core.util.VerificadorUtil;
450 blopes 14
import br.com.ec.domain.dto.AuditoriaVendaDTO;
261 espaco 15
import br.com.ec.domain.dto.FormaPagamentoDTO;
264 espaco 16
import br.com.ec.domain.dto.LojaDTO;
561 blopes 17
import br.com.ec.domain.dto.ModeloDTO;
18
import br.com.ec.domain.dto.RankingComprasTransferenciasEstiloDTO;
19
import br.com.ec.domain.dto.RankingComprasTransferenciasEstiloPorLojaDTO;
20
import br.com.ec.domain.dto.RankingModeloDTO;
582 blopes 21
import br.com.ec.domain.dto.RankingProdutoDTO;
583 blopes 22
import br.com.ec.domain.dto.RankingProdutoDTONovo;
631 blopes 23
import br.com.ec.domain.dto.VendaDTO;
561 blopes 24
import br.com.ec.domain.dto.consulta.ParametrosConsultaModelosMaisVendidosDTO;
25
import br.com.ec.domain.dto.consulta.ParametrosConsultaPorPeriodoDTO;
582 blopes 26
import br.com.ec.domain.dto.consulta.ParametrosConsultaProdutosVendidosDTO;
230 espaco 27
import br.com.ec.domain.dto.consulta.ParametrosConsultaVendasDTO;
259 espaco 28
import br.com.ec.domain.model.Venda;
561 blopes 29
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
30
import br.com.ec.domain.model.tipos.TipoGenero;
31
import br.com.ec.domain.model.tipos.TipoOrdenacaoMaisVendidos;
32
import br.com.ec.domain.model.tipos.TipoProduto;
261 espaco 33
import br.com.ec.domain.shared.ConstantesSEC;
229 espaco 34
import br.com.ec.repository.SistemaAbstractRepository;
35
import br.com.ec.repository.VendaRepository;
36
 
37
@Repository
38
public class VendaRepositoryJpaImpl extends SistemaAbstractRepository<Venda> implements VendaRepository {
39
 
40
        @Override
41
        protected String getColunaOrdenadora() {
42
                return "dataVenda";
43
        }
44
 
45
        @Override
296 espaco 46
        public Integer obterQuantidadeDeVendas(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
229 espaco 47
                StringBuilder sql = new StringBuilder();
296 espaco 48
                sql.append("SELECT COUNT(*) FROM Venda e ");
230 espaco 49
                sql.append("WHERE 1=1 ");
50
                setarStringParametrosConsulta(sql, parametrosConsultaVendasDTO);
229 espaco 51
                try {
230 espaco 52
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
53
                        setarQueryParametrosConsulta(query, parametrosConsultaVendasDTO);
54
                        return query.getSingleResult().intValue();
229 espaco 55
                } catch(Exception ex) {
56
                        ex.printStackTrace();
57
                        return null;
58
                }
59
        }
60
 
230 espaco 61
        @Override
296 espaco 62
        public Double obterValorTotalBrutoDeVendas(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
230 espaco 63
                StringBuilder sql = new StringBuilder();
296 espaco 64
                sql.append("SELECT SUM(l.valorVenda) FROM Venda e ");
65
                sql.append("LEFT JOIN e.listaLancamentos l ");
230 espaco 66
                sql.append("WHERE l.ativo IS TRUE ");
705 blopes 67
                StringBuilder sqlLojas = new StringBuilder();
68
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getLojasSelecionadasDTO())) {
69
                        sqlLojas.append("AND e.loja.sequencial IN (");
70
                        for (LojaDTO loja : parametrosConsultaVendasDTO.getLojasSelecionadasDTO()) {
71
                                sqlLojas.append(loja.getSequencial() + ",");
72
                        }
73
                        sqlLojas.append(") ");
74
                }
75
                sql.append(new StringBuilder(sqlLojas.toString().replace(",)", ")")));
76
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getVendedorSelecionado())) {
77
                        sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
78
                }
230 espaco 79
                setarStringParametrosConsulta(sql, parametrosConsultaVendasDTO);
80
                try {
81
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
82
                        setarQueryParametrosConsulta(query, parametrosConsultaVendasDTO);
705 blopes 83
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getVendedorSelecionado())) {
84
                                query.setParameter("sequencialVendedor", parametrosConsultaVendasDTO.getVendedorSelecionado().getSequencial());
85
                        }
230 espaco 86
                        Double total = query.getSingleResult();
87
                        if (VerificadorUtil.estaNulo(total)) {
88
                                return new Double(0.0);
89
                        }
90
                        return total;
91
                } catch(Exception ex) {
92
                        ex.printStackTrace();
93
                        return null;
94
                }
95
        }
96
 
97
        @Override
98
        public Double obterValorDeCuponsUtilizadosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
99
                StringBuilder sql = new StringBuilder();
268 espaco 100
                sql.append("SELECT SUM(vp.valorPagamento) FROM VendaFormaPagamento vp ");
296 espaco 101
                sql.append("LEFT JOIN vp.venda e ");
694 blopes 102
                sql.append("WHERE vp.formaPagamento.codigo IN (");
103
                sql.append(ConstantesSEC.FormasDePagamento.FORMAPAGAMENTO_CUPOM);
104
                sql.append(", ");
105
                sql.append(ConstantesSEC.FormasDePagamento.FORMAPAGAMENTO_CASHBACK_28);
106
                sql.append(") ");
659 blopes 107
                parametrosConsultaVendasDTO.setIndicadorComissionado(null);
705 blopes 108
                parametrosConsultaVendasDTO.setTipoProduto(null);
230 espaco 109
                setarStringParametrosConsulta(sql, parametrosConsultaVendasDTO);
110
                try {
111
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
112
                        setarQueryParametrosConsulta(query, parametrosConsultaVendasDTO);
113
                        Double total = query.getSingleResult();
114
                        if (VerificadorUtil.estaNulo(total)) {
115
                                return new Double(0.0);
116
                        }
117
                        return total;
118
                } catch(Exception ex) {
119
                        ex.printStackTrace();
120
                        return null;
121
                }
122
        }
123
 
265 espaco 124
        @Override
125
        public Double obterValorDeMaquinetasPorPessoa(Long sequencialPessoaMaquineta, Date dataInicio, Date dataFim) {
126
                StringBuilder sql = new StringBuilder();
268 espaco 127
                sql.append("SELECT SUM(vp.valorPagamento) FROM VendaFormaPagamento vp ");
296 espaco 128
                sql.append("LEFT JOIN vp.venda e ");
268 espaco 129
                sql.append("WHERE vp.formaPagamento.codigo IN :formasDePagamento ");
296 espaco 130
                sql.append("AND e.maquineta.pessoa.sequencial = :sequencialPessoaMaquineta ");
131
                sql.append("AND (e.dataVenda BETWEEN :dataInicial AND :dataFinal OR e.dataVenda = :dataInicial OR e.dataVenda = :dataFinal) ");
265 espaco 132
                try {
133
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
134
                        query.setParameter("formasDePagamento", FormaPagamentoDTO.codigosFormasDePagamentoViaCartao());
135
                        query.setParameter("sequencialPessoaMaquineta", sequencialPessoaMaquineta);
136
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicio));
137
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFim));
138
 
139
                        Double total = query.getSingleResult();
140
                        if (VerificadorUtil.estaNulo(total)) {
141
                                return new Double(0.0);
142
                        }
143
                        return total;
144
                } catch(Exception ex) {
145
                        ex.printStackTrace();
146
                        return null;
147
                }
148
        }
149
 
230 espaco 150
        private void setarStringParametrosConsulta(StringBuilder sql, ParametrosConsultaVendasDTO parametros) {
151
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialLoja())) {
296 espaco 152
                        sql.append("AND e.loja.sequencial = :sequencialLoja ");
230 espaco 153
                }
253 espaco 154
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoSituacaoVenda())) {
296 espaco 155
                        sql.append("AND e.tipoSituacao = :tipoSituacao ");
230 espaco 156
                }
264 espaco 157
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialVendedor())) {
296 espaco 158
                        sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
230 espaco 159
                }
264 espaco 160
                /*
230 espaco 161
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicacao())) {
162
                        sql.append("AND e.indicacao.sequencial = :sequencialIndicacao ");
163
                }
659 blopes 164
                */
230 espaco 165
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicadorComissionado())) {
166
                        sql.append("AND l.produto.indicadorComissionado = :indicadorComissionado ");
167
                }
168
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoProduto())) {
169
                        sql.append("AND l.produto.tipo = :tipoProduto ");
170
                }
705 blopes 171
                /*
230 espaco 172
                //TODO: VERIFICAR LANÇAMENTOS COM MAIS PAGAMENTOS QUE LANÇAMENTOS
173
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSituacaoFinanceiraVenda())) {
174
                        if (parametros.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.NENHUMA.getValor())) {
175
                                sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e) = 0 ");
176
//                                      sql.append("AND ((SELECT COUNT(vf) FROM VendaFormaPagamento vf WHERE vf.venda = e) > (SELECT COUNT(cr) FROM ContaAReceber cr WHERE cr.venda = e)) ");
177
                        }
178
                        if (parametros.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.QUITADO.getValor())) {
179
                                sql.append("AND (SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) = 0 ");
180
                                sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) > 0 ");
181
                        }
182
                        if (parametros.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.PENDENCIAS.getValor())) {
183
                                sql.append("AND ((SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) > 0 ");
184
                                sql.append("OR (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) = 0) ");
185
                        }
186
                }
187
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getFormaPagamento())) {
188
                        sql.append("AND (SELECT COUNT(p) FROM VendaFormaPagamento p WHERE p.venda = e AND p.formaPagamento.codigo = :codigoFormaPagamento) > 0 ");
189
                }
190
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getBandeiraCartao())) {
191
                        sql.append("AND (SELECT COUNT(b) FROM VendaFormaPagamento b WHERE b.venda = e AND b.bandeiraCartao.codigo = :codigoBandeiraCartao) > 0 ");
192
                }
193
                */
194
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialVenda())) {
296 espaco 195
                        sql.append("AND e.sequencial = :sequencialVenda ");
261 espaco 196
                } else if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataSelecionada())
197
                                || VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataInicial())
198
                                || VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataFinal())) {
296 espaco 199
                        sql.append("AND e.dataVenda >= :dataInicial ");
200
                        sql.append("AND e.dataVenda <= :dataFinal ");
230 espaco 201
                }
202
                /*
203
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getCodigoCupom())) {
204
                        sql.append("AND (SELECT COUNT(cl) FROM Lancamento cl WHERE cl.venda = e AND cl.cupom.codigo = :codigoCupom) > 0) ");
205
                }
206
                */
207
        }
208
 
209
        private void setarQueryParametrosConsulta(Query query, ParametrosConsultaVendasDTO parametros) {
210
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialLoja())) {
211
                        query.setParameter("sequencialLoja", parametros.getSequencialLoja());
212
                }
253 espaco 213
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoSituacaoVenda())) {
214
                        query.setParameter("tipoSituacao", parametros.getTipoSituacaoVenda());
215
                }
264 espaco 216
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialVendedor())) {
217
                        query.setParameter("sequencialVendedor", parametros.getSequencialVendedor());
218
                }
659 blopes 219
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicadorComissionado())) {
220
                        query.setParameter("indicadorComissionado", parametros.getIndicadorComissionado());
221
                }
705 blopes 222
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoProduto())) {
223
                        query.setParameter("tipoProduto", parametros.getTipoProduto());
224
                }
230 espaco 225
                /*
226
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicacao())) {
227
                        query.setParameter("sequencialIndicacao", parametros.getIndicacao().getSequencial());
228
                }
229
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getFormaPagamento())) {
230
                        query.setParameter("codigoFormaPagamento", parametros.getFormaPagamento().getCodigo());
231
                }
232
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getBandeiraCartao())) {
233
                        query.setParameter("codigoBandeiraCartao", parametros.getBandeiraCartao().getCodigo());
234
                }
235
                 */
236
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialVenda())) {
237
                        query.setParameter("sequencialVenda", parametros.getSequencialVenda());
261 espaco 238
                } else if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataInicial())
239
                                && VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataFinal())) {
240
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(parametros.getParametrosPeriodoDTO().getDataInicial());
241
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(parametros.getParametrosPeriodoDTO().getDataFinal());
230 espaco 242
                        query.setParameter("dataInicial", dataInicial);
243
                        query.setParameter("dataFinal", dataFinal);
261 espaco 244
                } else if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataSelecionada())) {
245
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(parametros.getParametrosPeriodoDTO().getDataSelecionada());
246
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(parametros.getParametrosPeriodoDTO().getDataSelecionada());
230 espaco 247
                        query.setParameter("dataInicial", dataInicial);
248
                        query.setParameter("dataFinal", dataFinal);
249
                }
250
                /*
251
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getCodigoCupom())) {
252
                        query.setParameter("codigoCupom", parametros.getCodigoCupom());
253
                }
254
                */
255
        }
256
 
561 blopes 257
        @Override
258
        public List<RankingModeloDTO> consultarModelosMaisVendidos(ParametrosConsultaModelosMaisVendidosDTO parametrosConsulta) {
259
                List<RankingModeloDTO> modelos = new ArrayList<RankingModeloDTO>();
260
                try {  
261
                        StringBuilder sql = new StringBuilder();
611 blopes 262
                        sql.append("SELECT COUNT(l), m.seq_modelo, m.dsc_modelo, m.ind_favorito ");
561 blopes 263
 
264
                        // CONSULTANDO ESTOQUE DO MODELO
265
                        sql.append(",(SELECT SUM(pl.qtd_estoque) FROM sc_sec.sec_produto_loja pl ");
266
                        sql.append("LEFT JOIN sc_sec.sec_produto pp ON pp.seq_produto = pl.seq_produto ");
267
                        sql.append("LEFT JOIN sc_sec.sec_modelo mm ON mm.seq_modelo = pp.seq_modelo ");
268
                        sql.append("WHERE mm.seq_modelo = m.seq_modelo AND pp.tip_produto = 'C') ");
269
 
270
                        sql.append("FROM sc_sec.sec_lancamento l ");
271
                        sql.append("LEFT JOIN sc_sec.sec_venda v ON l.seq_venda = v.seq_venda ");
272
                        sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = l.seq_produto ");
273
                        sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
274
                        sql.append("WHERE v.dth_venda <= :dataFinal AND v.dth_venda > :dataInicial ");
275
                        sql.append("AND p.tip_produto = 'C' ");
276
                        sql.append("AND m.seq_modelo IS NOT NULL ");
588 blopes 277
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
278
                                sql.append("AND v.seq_loja = :sequencialLoja ");
279
                        }
280
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialModelo())) {
281
                                sql.append("AND m.seq_modelo = :sequencialModelo ");
282
                        }
561 blopes 283
                        sql.append("GROUP BY m.seq_modelo, m.dsc_modelo ");
284
                        sql.append("ORDER BY COUNT(l) DESC ");
285
 
286
                        Query query = getEntityManager().createNativeQuery(sql.toString());
287
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial());
288
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal());
289
                        query.setParameter("dataInicial", dataInicial);
290
                        query.setParameter("dataFinal", dataFinal);
588 blopes 291
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
292
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
293
                        }
294
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialModelo())) {
295
                                query.setParameter("sequencialModelo", parametrosConsulta.getSequencialModelo());
296
                        }
561 blopes 297
 
298
                        List<Object[]> resultList = query.getResultList();
299
 
300
                        for (Object[] objects : resultList) {
301
                                RankingModeloDTO rankingModeloDTO = new RankingModeloDTO();
611 blopes 302
                                ModeloDTO modeloDTO = new ModeloDTO(Long.parseLong(objects[1].toString()), objects[2].toString(), null);
303
                                modeloDTO.setIndicadorFavorito(Boolean.parseBoolean(objects[3].toString()));
304
                                rankingModeloDTO.setModelo(modeloDTO);
561 blopes 305
                                rankingModeloDTO.setQuantidadeVendas(Integer.valueOf(objects[0].toString()));
611 blopes 306
                                rankingModeloDTO.setQuantidadeEstoqueGeral(Integer.valueOf(objects[4].toString()));
561 blopes 307
                                modelos.add(rankingModeloDTO);
308
                        }
309
                } catch(Exception ex) {
310
                        ex.printStackTrace();
311
                        return null;
312
                }
313
                return modelos;
314
                /*
315
 
316
                sql.append("SELECT new br.com.ec.domain.dto.RankingModeloDTO(l.produto.modelo, SUM(l.valorVenda), SUM(l.valorCompra), COUNT(l.produto.modelo), ");
317
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
318
                        sql.append("(");
319
                        sql.append(adicionarConsultaDoEstoque(parametrosConsulta.getSequencialLoja(), "l.produto.modelo", parametrosConsulta.getTipoProduto(), parametrosConsulta.getEstiloProduto()));
320
                        sql.append("), ");
321
                }
322
                sql.append("(");
323
                sql.append(adicionarConsultaDoEstoque(null, "l.produto.modelo", parametrosConsulta.getTipoProduto(), parametrosConsulta.getEstiloProduto()));
324
                sql.append(")) FROM Lancamento l ");
325
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
326
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
327
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
328
                }
329
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
330
                        sql.append("AND l.produto.tipo = :tipoProduto ");
331
                }
332
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
333
                        sql.append("AND l.produto.modelo = :modelo ");
334
                }
335
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getEstiloProduto())) {
336
                        sql.append("AND l.produto.estilo = :estiloProduto ");
337
                }
338
                sql.append("GROUP BY l.produto.modelo ");
339
                if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.LUCRO.getValor())) {
340
                        sql.append("ORDER BY SUM(l.valorVenda - l.valorCompra) DESC ");
341
                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
342
                        sql.append("ORDER BY COUNT(l.produto.modelo) DESC ");
343
                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.VALOR_VENDIDO.getValor())) {
344
                        sql.append("ORDER BY SUM(l.valorVenda) DESC ");
345
                }
346
                try {
347
                        TypedQuery<RankingModeloDTO> query = getEntityManager().createQuery(sql.toString(), RankingModeloDTO.class)
348
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
349
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
350
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getQuantidadeModelos())) {
351
                                query.setMaxResults(parametrosConsulta.getQuantidadeModelos());
352
                        }
353
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
354
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
355
                        }
356
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
357
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
358
                        }
359
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
360
                                query.setParameter("modelo", parametrosConsulta.getModelo());
361
                        }
362
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getEstiloProduto())) {
363
                                query.setParameter("estiloProduto", parametrosConsulta.getEstiloProduto());
364
                        }
365
                        return query.getResultList();
366
                } catch(Exception ex) {
367
                        ex.printStackTrace();
368
                        return null;
369
                }
370
                */
371
        }
372
 
373
        @Override
374
        public List<RankingComprasTransferenciasEstiloDTO> consultarRankingPorEstilo(Long sequencialModelo, ParametrosConsultaPorPeriodoDTO parametrosConsultaPorPeriodoDTO) {
375
                List<RankingComprasTransferenciasEstiloDTO> rankingPorEstilo = new ArrayList<RankingComprasTransferenciasEstiloDTO>();
376
                try {  
377
                        StringBuilder sql = new StringBuilder();
378
                        sql.append("SELECT p.tip_estilo ");
379
 
562 blopes 380
                        sql.append("," + adicionarConsultaVendasRankingPorEstilo("vendas_estilo_a", TipoProduto.CAPA.getValor(), TipoGenero.UNISSEX.getValor()));
381
                        sql.append("," + adicionarConsultaVendasRankingPorEstilo("vendas_estilo_b", TipoProduto.CAPA.getValor(), TipoGenero.MASCULINO.getValor()));
382
                        sql.append("," + adicionarConsultaVendasRankingPorEstilo("vendas_estilo_c", TipoProduto.CAPA.getValor(), TipoGenero.FEMININO.getValor()));
561 blopes 383
 
562 blopes 384
                        sql.append("," + adicionarConsultaEstoqueRankingPorEstilo("estoque_estilo_a", TipoProduto.CAPA.getValor(), TipoGenero.UNISSEX.getValor()));
385
                        sql.append("," + adicionarConsultaEstoqueRankingPorEstilo("estoque_estilo_b", TipoProduto.CAPA.getValor(), TipoGenero.MASCULINO.getValor()));
386
                        sql.append("," + adicionarConsultaEstoqueRankingPorEstilo("estoque_estilo_c", TipoProduto.CAPA.getValor(), TipoGenero.FEMININO.getValor()));
561 blopes 387
 
566 blopes 388
                        sql.append("FROM sc_sec.sec_produto_loja AS pl ");
389
                        sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = pl.seq_produto ");
561 blopes 390
                        sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
566 blopes 391
                        sql.append("WHERE m.seq_modelo = :sequencialModelo ");
561 blopes 392
                        sql.append("AND p.tip_produto = '" + TipoProduto.CAPA.getValor() + "' ");
393
                        sql.append("GROUP BY p.tip_estilo ");
565 blopes 394
 
395
                        String orderSql = "ORDER BY (";
396
                        for (TipoEstiloProduto estiloProduto : TipoEstiloProduto.values()) {
397
                                orderSql = orderSql + "p.tip_estilo = '" + estiloProduto.getValor() + "', ";
398
                        }
399
                        orderSql = orderSql + ") DESC ";
400
                        sql.append(orderSql.replace(", )", ")"));
562 blopes 401
//                      sql.append("ORDER BY p.tip_estilo IN :tiposEstilos");
561 blopes 402
 
403
                        Query query = getEntityManager().createNativeQuery(sql.toString());
404
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsultaPorPeriodoDTO.getDataInicial());
405
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsultaPorPeriodoDTO.getDataFinal());
406
                        query.setParameter("dataInicial", dataInicial);
407
                        query.setParameter("dataFinal", dataFinal);
408
                        query.setParameter("sequencialModelo", sequencialModelo);
562 blopes 409
//                      query.setParameter("tiposEstilos", TipoEstiloProduto.values());
561 blopes 410
 
411
                        List<Object[]> resultList = query.getResultList();
412
                        for (Object[] objects : resultList) {
413
                                RankingComprasTransferenciasEstiloDTO rankingEstiloDTO = new RankingComprasTransferenciasEstiloDTO();
566 blopes 414
                                if (VerificadorUtil.naoEstaNuloOuVazio(objects[0])) {
415
                                        rankingEstiloDTO.setEstilo(TipoEstiloProduto.parse(objects[0].toString()));
416
                                        rankingEstiloDTO.setQuantidadeVendasUnissex(Integer.valueOf(retornarValorSeExitir(objects[1])));
417
                                        rankingEstiloDTO.setQuantidadeVendasMasculino(Integer.valueOf(retornarValorSeExitir(objects[2])));
418
                                        rankingEstiloDTO.setQuantidadeVendasFeminino(Integer.valueOf(retornarValorSeExitir(objects[3])));
419
                                        rankingEstiloDTO.setQuantidadeEstoqueUnissex(Integer.valueOf(retornarValorSeExitir(objects[4])));
420
                                        rankingEstiloDTO.setQuantidadeEstoqueMasculino(Integer.valueOf(retornarValorSeExitir(objects[5])));
421
                                        rankingEstiloDTO.setQuantidadeEstoqueFeminino(Integer.valueOf(retornarValorSeExitir(objects[6])));
422
                                        rankingPorEstilo.add(rankingEstiloDTO);
423
                                }
561 blopes 424
                        }
425
                } catch(Exception ex) {
426
                        ex.printStackTrace();
427
                        return null;
428
                }
429
                return rankingPorEstilo;
430
        }
431
 
562 blopes 432
        private String adicionarConsultaVendasRankingPorEstilo(String alias, String tipoProduto, String tipoGenero) {
561 blopes 433
                StringBuilder sql = new StringBuilder();
566 blopes 434
                sql.append("(SELECT COUNT(*) FROM sc_sec.sec_lancamento ll ");
435
                sql.append("LEFT JOIN sc_sec.sec_venda vv ON ll.seq_venda = vv.seq_venda ");
436
                sql.append("LEFT JOIN sc_sec.sec_produto pp ON pp.seq_produto = ll.seq_produto ");
437
                sql.append("LEFT JOIN sc_sec.sec_modelo mm ON mm.seq_modelo = pp.seq_modelo ");
438
                sql.append("WHERE vv.dth_venda <= :dataFinal AND vv.dth_venda >= :dataInicial ");
439
                sql.append("AND mm.seq_modelo = :sequencialModelo AND pp.tip_estilo = p.tip_estilo ");
440
                sql.append("AND pp.tip_produto = '" + tipoProduto + "' AND pp.tip_genero LIKE '" + tipoGenero + "') ");
562 blopes 441
                sql.append("AS " + alias + " ");
561 blopes 442
                return sql.toString();
443
        }
444
 
562 blopes 445
        private String adicionarConsultaEstoqueRankingPorEstilo(String alias, String tipoProduto, String tipoGenero) {
561 blopes 446
                StringBuilder sql = new StringBuilder();
566 blopes 447
                sql.append("(SELECT SUM(pll.qtd_estoque) FROM sc_sec.sec_produto_loja pll ");
448
                sql.append("LEFT JOIN sc_sec.sec_produto pp ON pp.seq_produto = pll.seq_produto ");
561 blopes 449
                sql.append("LEFT JOIN sc_sec.sec_modelo mm ON mm.seq_modelo = pp.seq_modelo ");
450
                sql.append("WHERE mm.seq_modelo = :sequencialModelo AND pp.tip_estilo = p.tip_estilo ");
451
                sql.append("AND pp.tip_produto = '" + tipoProduto + "' AND pp.tip_genero LIKE '" + tipoGenero + "') ");
562 blopes 452
                sql.append("AS " + alias + " ");
561 blopes 453
                return sql.toString();
454
        }
455
 
456
        @Override
457
        public List<RankingComprasTransferenciasEstiloPorLojaDTO> consultarRankingPorEstiloPorLoja(Long sequencialModelo,
458
                        String tipoEstilo, ParametrosConsultaPorPeriodoDTO parametrosConsultaPorPeriodoDTO) {
459
                List<RankingComprasTransferenciasEstiloPorLojaDTO> rankingPorEstiloPorLoja = new ArrayList<RankingComprasTransferenciasEstiloPorLojaDTO>();
460
                try {  
461
                        StringBuilder sql = new StringBuilder();
566 blopes 462
                        sql.append("SELECT pl.seq_loja, lj.dsc_loja ");
561 blopes 463
 
562 blopes 464
                        sql.append("," + adicionarConsultaVendasRankingPorEstiloPorLoja("vendas_estilo_loja_a", TipoProduto.CAPA.getValor(), TipoGenero.UNISSEX.getValor()));
465
                        sql.append("," + adicionarConsultaVendasRankingPorEstiloPorLoja("vendas_estilo_loja_b", TipoProduto.CAPA.getValor(), TipoGenero.MASCULINO.getValor()));
466
                        sql.append("," + adicionarConsultaVendasRankingPorEstiloPorLoja("vendas_estilo_loja_c", TipoProduto.CAPA.getValor(), TipoGenero.FEMININO.getValor()));
561 blopes 467
 
562 blopes 468
                        sql.append("," + adicionarConsultaEstoqueRankingPorEstiloPorLoja("estoque_estilo_loja_a", TipoProduto.CAPA.getValor(), TipoGenero.UNISSEX.getValor()));
469
                        sql.append("," + adicionarConsultaEstoqueRankingPorEstiloPorLoja("estoque_estilo_loja_b", TipoProduto.CAPA.getValor(), TipoGenero.MASCULINO.getValor()));
470
                        sql.append("," + adicionarConsultaEstoqueRankingPorEstiloPorLoja("estoque_estilo_loja_c", TipoProduto.CAPA.getValor(), TipoGenero.FEMININO.getValor()));
561 blopes 471
 
566 blopes 472
                        sql.append("FROM sc_sec.sec_produto_loja pl ");
473
                        sql.append("LEFT JOIN sc_sec.sec_loja lj ON lj.seq_loja = pl.seq_loja ");
474
                        sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = pl.seq_produto ");
561 blopes 475
                        sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
566 blopes 476
                        sql.append("WHERE m.seq_modelo = :sequencialModelo ");
561 blopes 477
                        sql.append("AND p.tip_produto = '" + TipoProduto.CAPA.getValor() + "' ");
478
                        sql.append("AND p.tip_estilo = :tipoEstilo ");
479
                        sql.append("AND lj.ind_ativo IS TRUE ");
566 blopes 480
                        sql.append("GROUP BY lj.num_ordem, pl.seq_loja, lj.dsc_loja ");
561 blopes 481
                        sql.append("ORDER BY lj.num_ordem ");
482
 
483
                        Query query = getEntityManager().createNativeQuery(sql.toString());
484
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsultaPorPeriodoDTO.getDataInicial());
485
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsultaPorPeriodoDTO.getDataFinal());
486
                        query.setParameter("dataInicial", dataInicial);
487
                        query.setParameter("dataFinal", dataFinal);
488
                        query.setParameter("sequencialModelo", sequencialModelo);
489
                        query.setParameter("tipoEstilo", tipoEstilo);
490
 
491
                        List<Object[]> resultList = query.getResultList();
492
                        for (Object[] objects : resultList) {
493
                                RankingComprasTransferenciasEstiloPorLojaDTO rankingEstiloPorLojaDTO = new RankingComprasTransferenciasEstiloPorLojaDTO();
562 blopes 494
                                rankingEstiloPorLojaDTO.setLojaDTO(new LojaDTO(Long.parseLong(retornarValorSeExitir(objects[0])), retornarValorSeExitir(objects[1])));
495
                                rankingEstiloPorLojaDTO.setQuantidadeVendasUnissex(Integer.valueOf(retornarValorSeExitir(objects[2])));
496
                                rankingEstiloPorLojaDTO.setQuantidadeVendasMasculino(Integer.valueOf(retornarValorSeExitir(objects[3])));
497
                                rankingEstiloPorLojaDTO.setQuantidadeVendasFeminino(Integer.valueOf(retornarValorSeExitir(objects[4])));
498
                                rankingEstiloPorLojaDTO.setQuantidadeEstoqueUnissex(Integer.valueOf(retornarValorSeExitir(objects[5])));
499
                                rankingEstiloPorLojaDTO.setQuantidadeEstoqueMasculino(Integer.valueOf(retornarValorSeExitir(objects[6])));
500
                                rankingEstiloPorLojaDTO.setQuantidadeEstoqueFeminino(Integer.valueOf(retornarValorSeExitir(objects[7])));
561 blopes 501
                                rankingPorEstiloPorLoja.add(rankingEstiloPorLojaDTO);
502
                        }
503
 
504
                } catch(Exception ex) {
505
                        ex.printStackTrace();
506
                        return null;
507
                }
508
                return rankingPorEstiloPorLoja;
509
        }
510
 
562 blopes 511
        private String adicionarConsultaVendasRankingPorEstiloPorLoja(String alias, String tipoProduto, String tipoGenero) {
561 blopes 512
                StringBuilder sql = new StringBuilder();
513
                sql.append("(SELECT COUNT(*) FROM sc_sec.sec_lancamento ll ");
514
                sql.append("LEFT JOIN sc_sec.sec_venda vv ON ll.seq_venda = vv.seq_venda ");
515
                sql.append("LEFT JOIN sc_sec.sec_produto pp ON pp.seq_produto = ll.seq_produto ");
516
                sql.append("LEFT JOIN sc_sec.sec_modelo mm ON mm.seq_modelo = pp.seq_modelo ");
517
                sql.append("WHERE vv.dth_venda <= :dataFinal AND vv.dth_venda >= :dataInicial ");
566 blopes 518
                sql.append("AND vv.seq_loja = pl.seq_loja ");
561 blopes 519
                sql.append("AND mm.seq_modelo = :sequencialModelo AND pp.tip_estilo = :tipoEstilo ");
520
                sql.append("AND pp.tip_produto = '" + tipoProduto + "' AND pp.tip_genero LIKE '" + tipoGenero + "') ");
562 blopes 521
                sql.append("AS " + alias + " ");
561 blopes 522
                return sql.toString();
523
        }
524
 
562 blopes 525
        private String adicionarConsultaEstoqueRankingPorEstiloPorLoja(String alias, String tipoProduto, String tipoGenero) {
561 blopes 526
                StringBuilder sql = new StringBuilder();
566 blopes 527
                sql.append("(SELECT SUM(pll.qtd_estoque) FROM sc_sec.sec_produto_loja pll ");
528
                sql.append("LEFT JOIN sc_sec.sec_produto pp ON pp.seq_produto = pll.seq_produto ");
561 blopes 529
                sql.append("LEFT JOIN sc_sec.sec_modelo mm ON mm.seq_modelo = pp.seq_modelo ");
566 blopes 530
                sql.append("WHERE pll.seq_loja = pl.seq_loja AND mm.seq_modelo = :sequencialModelo ");
562 blopes 531
                sql.append("AND pp.tip_estilo = :tipoEstilo ");
561 blopes 532
                sql.append("AND pp.tip_produto = '" + tipoProduto + "' AND pp.tip_genero LIKE '" + tipoGenero + "') ");
562 blopes 533
                sql.append("AS " + alias + " ");
561 blopes 534
                return sql.toString();
535
        }
562 blopes 536
 
537
        private String retornarValorSeExitir(Object objeto) {
538
                String valor = "0";
539
                if (VerificadorUtil.naoEstaNulo(objeto)) {
540
                        valor = objeto.toString();
541
                }
542
                return valor;
543
        }
561 blopes 544
 
229 espaco 545
        /*
561 blopes 546
        private String adicionarConsultaDoEstoque(Long sequencialLoja, String modelo, String tipoProduto, String estiloProduto) {
547
                sql.append("SELECT SUM(pl.quantidadeEstoque) FROM ProdutoLoja pl ");
548
                sql.append("WHERE pl.produto.modelo = " + modelo + " ");
549
                if (VerificadorUtil.naoEstaNuloOuVazio(sequencialLoja)) {
550
                        sql.append("AND pl.loja.sequencial = :sequencialLoja ");
551
                }
552
                if (VerificadorUtil.naoEstaNuloOuVazio(tipoProduto)) {
553
                        sql.append("AND pl.produto.tipo = :tipoProduto ");
554
                }
555
                if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
556
                        sql.append("AND pl.produto.estilo = :estiloProduto ");
557
                }
558
                return sql.toString().trim();
559
        }
560
         */
561
 
562
        /*
229 espaco 563
        private void setarParametrosStringConsultarVendaPorLojaEePeriodo(StringBuilder sql, Venda venda, Date dataInicial, Date dataFinal) {
564
                setarStringParametrosConsultar(sql, venda);
565
                if (VerificadorUtil.naoEstaNuloOuVazio(dataInicial) && VerificadorUtil.naoEstaNuloOuVazio(dataFinal)) {
566
                        sql.append("AND e.dataVenda >= :dataInicial AND e.dataVenda <= :dataFinal ");
567
                }
568
        }
569
        */
570
/*
571
        @Override
572
        protected void setarStringParametrosConsultar(StringBuilder sql, Venda venda) {
573
                if (VerificadorUtil.naoEstaNuloOuVazio(venda)) {
574
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getSequencialDaLoja())) {
575
                                sql.append("AND e.loja.sequencial = :sequencialLoja ");
576
                        }
577
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getVendedor())) {
578
                                sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
579
                        }
580
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getIndicacao())) {
581
                                sql.append("AND e.indicacao.sequencial = :sequencialIndicacao ");
582
                        }
583
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getTipoSituacao())) {
584
                                sql.append("AND e.tipoSituacao = :tipoSituacao ");
585
                        }
586
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getDataVenda())) {
587
                                sql.append("AND e.dataVenda >= :dataInicial ");
588
                                sql.append("AND e.dataVenda <= :dataFinal ");
589
                        }
590
                }
591
        }
592
 
593
        @Override
594
        protected void setarQueryParametrosConsultar(Query query, Venda venda) {
595
                if (VerificadorUtil.naoEstaNuloOuVazio(venda)) {
596
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getSequencialDaLoja())) {
597
                                query.setParameter("sequencialLoja", venda.getSequencialDaLoja());
598
                        }
599
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getSequencialDoVendedor())) {
600
                                query.setParameter("sequencialVendedor", venda.getSequencialDoVendedor());
601
                        }
602
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getIndicacao())) {
603
                                query.setParameter("sequencialIndicacao", venda.getIndicacao());
604
                        }
605
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getTipoSituacao())) {
606
                                query.setParameter("tipoSituacao", venda.getTipoSituacao());
607
                        }
608
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getDataVenda())) {
609
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(venda.getDataVenda());
610
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(venda.getDataVenda());
611
                                query.setParameter("dataInicial", dataInicial);
612
                                query.setParameter("dataFinal", dataFinal);
613
                        }
614
                }
615
        }
616
 
617
        @Override
618
        public List<Venda> consultarVendasPorDemanda(ParametrosConsulta<Venda> parametrosConsulta, Integer primeiroRegistro,
619
                        Integer tamanhoPagina, String sortField, String orderSort, Map<String, Object> filters) {
620
                StringBuilder sql = new StringBuilder();
621
                sql.append("SELECT DISTINCT e FROM Venda e ");
622
                sql.append("LEFT JOIN FETCH e.listaLancamentos l ");
623
                sql.append("LEFT JOIN FETCH e.listaVendaFormaPagamentos p ");
624
                sql.append("WHERE 1=1 ");
625
 
626
                try {
627
                        setarStringParametrosConsulta(sql, parametrosConsulta);
628
                        sql.append("ORDER BY e.dataVenda");
629
                        TypedQuery<Venda> query = (TypedQuery<Venda>) getEntityManager().createQuery(sql.toString(), Venda.class);
630
                        setarQueryParametrosConsulta(query, parametrosConsulta);
631
 
632
                        return query.setFirstResult(primeiroRegistro).setMaxResults(tamanhoPagina).getResultList();
633
                } catch(Exception ex) {
634
                        ex.printStackTrace();
635
                        return null;
636
                }
637
        }
638
 
639
        @Override
640
        public List<Venda> consultarVendaPorParametros(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
641
                StringBuilder sql = new StringBuilder();
642
                sql.append("SELECT DISTINCT e FROM Venda e ");
643
                sql.append("LEFT JOIN FETCH e.listaLancamentos l ");
644
                sql.append("LEFT JOIN FETCH e.listaVendaFormaPagamentos p ");
645
                sql.append("WHERE 1=1 ");
646
 
647
                try {
648
                        setarStringParametrosConsulta(sql, parametrosConsultaVendas);
649
                        sql.append("ORDER BY e.dataVenda");
650
                        TypedQuery<Venda> query = (TypedQuery<Venda>) getEntityManager().createQuery(sql.toString(), Venda.class);
651
                        setarQueryParametrosConsulta(query, parametrosConsultaVendas);
652
                        return query.getResultList();
653
                } catch(Exception ex) {
654
                        ex.printStackTrace();
655
                        return null;
656
                }
657
        }
658
 
659
        @Override
660
        public Venda detalharVenda(Venda venda) {
661
                StringBuilder jpql = new StringBuilder();
662
                try {
663
                        jpql.append("SELECT c FROM Venda c ");
664
                        //jpql.append("LEFT JOIN FETCH c.listaPedidos p ");
665
                        //jpql.append("LEFT JOIN FETCH c.listaVendas v ");
666
                        jpql.append("WHERE c = :venda");
667
                        return getEntityManager().createQuery(jpql.toString(), Venda.class).setParameter("venda", venda).getSingleResult();
668
                } catch (NoResultException e) {
669
                        return null;
670
                }
671
        }
672
 
673
        @Override
674
        public Venda detalharVendaCompleta(Venda venda) {
675
                StringBuilder jpql = new StringBuilder();
676
                try {
677
                        jpql.append("SELECT c FROM Venda c ");
678
                        jpql.append("LEFT JOIN FETCH c.listaLancamentos l ");
679
                        jpql.append("LEFT JOIN FETCH c.listaVendaFormaPagamentos p ");
680
                        jpql.append("WHERE c = :venda");
681
                        return getEntityManager().createQuery(jpql.toString(), Venda.class).setParameter("venda", venda).getSingleResult();
682
                } catch (NoResultException e) {
683
                        return null;
684
                }
685
        }
686
 
687
        @Override
688
        public List<Venda> consultarVendasDoDia(Long sequencialLoja, Date data) {
689
                StringBuilder sql = new StringBuilder();
690
                sql.append("SELECT DISTINCT v FROM Venda v ");
691
                sql.append("LEFT JOIN FETCH v.listaVendaFormaPagamentos p ");
692
                sql.append("WHERE v.loja.sequencial = :sequencialLoja ");
693
                sql.append("AND v.dataVenda >= :dataInicial AND v.dataVenda <= :dataFinal ");
694
                try {
695
                        sql.append("ORDER BY v.dataVenda");
696
                        return getEntityManager().createQuery(sql.toString(), Venda.class)
697
                                                .setParameter("sequencialLoja", sequencialLoja)
698
                                                .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(data))
699
                                                .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(data))
700
                                                .getResultList();
701
                } catch(Exception ex) {
702
                        ex.printStackTrace();
703
                        return null;
704
                }
705
        }
706
 
707
 
708
        private void setarParametrosQueryConsultarVendaPorLojaEePeriodo(Query query, Venda venda, Date dataInicial, Date dataFinal) {
709
                setarQueryParametrosConsultar(query, venda);
710
                if (VerificadorUtil.naoEstaNuloOuVazio(dataInicial) && VerificadorUtil.naoEstaNuloOuVazio(dataFinal)) {
711
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial));
712
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
713
                }
714
        }
715
 
716
        @Override
717
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
718
                StringBuilder sql = new StringBuilder();
719
                sql.append("SELECT SUM(l.valorVenda) FROM Venda e ");
720
                sql.append("LEFT JOIN e.listaLancamentos l ");
721
                sql.append("WHERE l.ativo IS TRUE ");
722
                try {
723
                        setarStringParametrosConsulta(sql, parametrosConsulta);
724
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
725
                        setarQueryParametrosConsulta(query, parametrosConsulta);
726
                        Double total = query.getSingleResult();
727
                        if (VerificadorUtil.estaNulo(total)) {
728
                                return new Double(0.0);
729
                        }
730
                        return total;
731
                } catch(Exception ex) {
732
                        ex.printStackTrace();
733
                        return null;
734
                }
735
        }
736
 
737
        @Override
738
        public Double obterValorDeCuponsUtilizadosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
739
                StringBuilder sql = new StringBuilder();
740
                sql.append("SELECT SUM(p.valorPagamento) FROM VendaFormaPagamento p ");
741
                sql.append("LEFT JOIN p.venda e ");
742
                sql.append("WHERE p.formaPagamento.codigo = 16 ");
743
 
744
                parametrosConsulta.setIndicadorComissionado(null);
745
                parametrosConsulta.setTipoProduto(null);
746
 
747
                setarStringParametrosConsulta(sql, parametrosConsulta);
748
*/             
749
                /*
750
                sql.append("AND (SELECT COUNT(l) FROM Lancamento l WHERE l.venda = e AND l.ativo = true) > 0 ");
751
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getLoja())) {
752
                        sql.append("AND e.loja.sequencial = :sequencialLoja ");
753
                }
754
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getVendedor())) {
755
                        sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
756
                }
757
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataVendas())
758
                                || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicial())
759
                                || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinal())) {
760
                        sql.append("AND e.dataVenda >= :dataInicial ");
761
                        sql.append("AND e.dataVenda <= :dataFinal ");
762
                }
763
                */
764
/*     
765
                try {
766
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
767
                        setarQueryParametrosConsulta(query, parametrosConsulta);
768
*/                     
769
                        /*
770
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getLoja())) {
771
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
772
                        }
773
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getVendedor())) {
774
                                query.setParameter("sequencialVendedor", parametrosConsulta.getVendedor().getSequencial());
775
                        }
776
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicial())
777
                                        && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinal())) {
778
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial());
779
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal());
780
                                query.setParameter("dataInicial", dataInicial);
781
                                query.setParameter("dataFinal", dataFinal);
782
                        } else if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataVendas())) {
783
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataVendas());
784
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataVendas());
785
                                query.setParameter("dataInicial", dataInicial);
786
                                query.setParameter("dataFinal", dataFinal);
787
                        }
788
                        */
789
/*     
790
                        Double total = query.getSingleResult();
791
                        if (VerificadorUtil.estaNulo(total)) {
792
                                return new Double(0.0);
793
                        }
794
                        return total;
795
                } catch(Exception ex) {
796
                        ex.printStackTrace();
797
                        return null;
798
                }
799
        }
800
 
801
        @Override
802
        public Double obterValorTotalDeDescontosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
803
                StringBuilder sql = new StringBuilder();
804
                sql.append("SELECT SUM(l.valorVarejo - l.valorVenda) FROM Venda e ");
805
                sql.append("LEFT JOIN e.listaLancamentos l ");
806
                sql.append("WHERE l.ativo IS TRUE ");
807
                try {
808
                        setarStringParametrosConsulta(sql, parametrosConsulta);
809
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
810
                        setarQueryParametrosConsulta(query, parametrosConsulta);
811
                        Double total = query.getSingleResult();
812
                        if (VerificadorUtil.estaNulo(total)) {
813
                                return new Double(0.0);
814
                        }
815
                        return total;
816
                } catch(Exception ex) {
817
                        ex.printStackTrace();
818
                        return null;
819
                }
820
        }
261 espaco 821
        */
229 espaco 822
        @Override
296 espaco 823
        public Double obterValorTotalBrutoDeVendasPorParametrosEeFormasDePagamento(ParametrosConsultaVendasDTO parametrosConsultaVendas, List<FormaPagamentoDTO> formasDePagamento) {
229 espaco 824
                StringBuilder sql = new StringBuilder();
268 espaco 825
                sql.append("SELECT SUM(vp.valorPagamento) FROM VendaFormaPagamento vp ");
296 espaco 826
                sql.append("LEFT JOIN vp.venda e ");
268 espaco 827
                sql.append("LEFT JOIN vp.formaPagamento f ");
828
                sql.append("WHERE vp.formaPagamento.codigo != ");
261 espaco 829
                sql.append(ConstantesSEC.FormasDePagamento.FORMAPAGAMENTO_CUPOM);
830
                sql.append(" ");
229 espaco 831
                try {
705 blopes 832
                        parametrosConsultaVendas.setTipoProduto(null);
229 espaco 833
                        sql = setarParametrosFormasDePagamento(sql, formasDePagamento);
264 espaco 834
                        sql = setarParametrosLojasSelecionadas(sql, parametrosConsultaVendas.getLojasSelecionadasDTO());
268 espaco 835
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendas.getVendedorSelecionado())) {
296 espaco 836
                                sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
268 espaco 837
                        }
229 espaco 838
                        setarStringParametrosConsulta(sql, parametrosConsultaVendas);
839
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
840
                        setarQueryParametrosConsulta(query, parametrosConsultaVendas);
268 espaco 841
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendas.getVendedorSelecionado())) {
842
                                query.setParameter("sequencialVendedor", parametrosConsultaVendas.getVendedorSelecionado().getSequencial());
843
                        }
229 espaco 844
                        Double total = query.getSingleResult();
845
                        if (VerificadorUtil.estaNulo(total)) {
846
                                return new Double(0.0);
847
                        }
848
                        return total;
849
                } catch(Exception ex) {
850
                        ex.printStackTrace();
851
                        return null;
852
                }
853
        }
264 espaco 854
 
261 espaco 855
        private StringBuilder setarParametrosFormasDePagamento(StringBuilder sql, List<FormaPagamentoDTO> formasPagamento) {
856
                if (VerificadorUtil.naoEstaNuloOuVazio(formasPagamento)) {
268 espaco 857
                        sql.append("AND vp.formaPagamento.codigo IN (");
261 espaco 858
                        for (FormaPagamentoDTO formaPagamento : formasPagamento) {
859
                                if (!formaPagamento.formaPagamentoEhCupom()) {
860
                                        sql.append(formaPagamento.getCodigo() + ",");
861
                                }
229 espaco 862
                        }
863
                        sql.append(") ");
864
                }
865
                return new StringBuilder(sql.toString().replace(",)", ")"));
866
        }
264 espaco 867
 
868
        private StringBuilder setarParametrosLojasSelecionadas(StringBuilder sql, List<LojaDTO> lojasSelecionadas) {
869
                if (VerificadorUtil.naoEstaNuloOuVazio(lojasSelecionadas)) {
268 espaco 870
                        sql.append("AND vp.venda.loja.sequencial IN (");
264 espaco 871
                        for (LojaDTO loja : lojasSelecionadas) {
872
                                sql.append(loja.getSequencial() + ",");
873
                        }
874
                        sql.append(") ");
875
                }
876
                return new StringBuilder(sql.toString().replace(",)", ")"));
877
        }
878
 
229 espaco 879
        @Override
296 espaco 880
        public Double obterValorTotalLiquidoDeVendas(ParametrosConsultaVendasDTO parametrosConsulta) {
229 espaco 881
                StringBuilder sql = new StringBuilder();
882
                sql.append("SELECT SUM(e.valor) FROM Parcela e ");
883
                sql.append("INNER JOIN e.conta c ");
884
                sql.append("WHERE e.indicadorAtivo IS TRUE ");
885
                try {
296 espaco 886
                        setarParametrosStringConsultarValorTotalLiquidoVenda(sql, parametrosConsulta);
229 espaco 887
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
296 espaco 888
                        setarParametrosQueryConsultarValorTotalLiquidoVenda(query, parametrosConsulta);
229 espaco 889
 
890
                        Double total = query.getSingleResult();
891
                        if (VerificadorUtil.estaNulo(total)) {
892
                                return new Double(0.0);
893
                        }
894
                        return total;
895
                } catch(Exception ex) {
896
                        ex.printStackTrace();
897
                        return null;
898
                }
899
        }
296 espaco 900
 
901
        private void setarParametrosStringConsultarValorTotalLiquidoVenda(StringBuilder sql, ParametrosConsultaVendasDTO parametrosConsulta) {
902
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getSequencialLoja())) {
229 espaco 903
                        sql.append("AND e.conta.venda.loja.sequencial = :sequencialLoja ");
904
                }
296 espaco 905
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getSequencialVendedor())) {
229 espaco 906
                        sql.append("AND e.conta.venda.vendedor.sequencial = :sequencialVendedor ");
907
                }
296 espaco 908
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicialDoPeriodo()) && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinalDoPeriodo())) {
909
                        sql.append("AND e.conta.venda.dataVenda >= :dataInicial AND e.conta.venda.dataVenda <= :dataFinal ");
910
                }
911
                /*
229 espaco 912
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getIndicacao())) {
913
                        sql.append("AND e.conta.venda.indicacao.sequencial = :sequencialIndicacao ");
914
                }
296 espaco 915
                 */
229 espaco 916
        }
917
 
296 espaco 918
        private void setarParametrosQueryConsultarValorTotalLiquidoVenda(Query query, ParametrosConsultaVendasDTO parametrosConsulta) {
919
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getSequencialLoja())) {
920
                        query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
229 espaco 921
                }
296 espaco 922
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getSequencialVendedor())) {
923
                        query.setParameter("sequencialVendedor", parametrosConsulta.getSequencialVendedor());
229 espaco 924
                }
296 espaco 925
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicialDoPeriodo()) && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinalDoPeriodo())) {
926
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicialDoPeriodo()));
927
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinalDoPeriodo()));
928
                }
929
                /*
229 espaco 930
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getIndicacao())) {
931
                        query.setParameter("sequencialIndicacao", parametrosConsulta.getIndicacao().getSequencial());
932
                }
296 espaco 933
                */
229 espaco 934
        }
935
 
936
        @Override
296 espaco 937
        public Double obterValorProdutosUtilizadosEmVendas(ParametrosConsultaVendasDTO parametrosConsulta) {
229 espaco 938
                StringBuilder sql = new StringBuilder();
296 espaco 939
                sql.append("SELECT SUM(l.valorCompra) FROM Venda e ");
229 espaco 940
                sql.append("LEFT JOIN e.listaLancamentos l ");
941
                sql.append("WHERE l.ativo IS TRUE ");
942
                try {
943
                        setarStringParametrosConsulta(sql, parametrosConsulta);
296 espaco 944
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
229 espaco 945
                        setarQueryParametrosConsulta(query, parametrosConsulta);
296 espaco 946
                        Double total = query.getSingleResult();
947
                        if (VerificadorUtil.estaNulo(total)) {
948
                                return new Double(0.0);
949
                        }
950
                        return total;
229 espaco 951
                } catch(Exception ex) {
952
                        ex.printStackTrace();
953
                        return null;
954
                }
955
        }
956
 
450 blopes 957
        @Override
958
        public List<AuditoriaVendaDTO> consultarAuditoriaVenda(Date dataSelecionada, Long sequencialLojaSelecionada) {
959
                StringBuilder sql = new StringBuilder();
960
//              (Long sequencialVenda, Long sequencialLoja, Date dataHoraVenda, Double valorTotal, Double valorTrocaCancelamento)
961
                sql.append("SELECT new br.com.ec.domain.dto.AuditoriaVendaDTO(");
962
                sql.append("v.sequencial, v.loja.sequencial, v.dataVenda, SUM(vfp.valorPagamento), ");
963
                sql.append("(SELECT SUM(vfpcupom.valorPagamento) FROM VendaFormaPagamento vfpcupom WHERE ");
964
                sql.append("vfpcupom.venda.sequencial = v.sequencial AND vfpcupom.formaPagamento.codigo = 16)");
965
                sql.append(") FROM Venda v ");
966
                sql.append("LEFT JOIN v.listaVendaFormaPagamentos vfp ON vfp.formaPagamento.codigo <> 16 ");
967
                sql.append("WHERE v.loja.sequencial = :sequencialLojaSelecionada ");
968
                sql.append("AND v.dataVenda >= :dataInicial AND v.dataVenda <= :dataFinal ");
969
                sql.append("GROUP BY (v.sequencial) ");
970
                sql.append("ORDER BY (v.dataVenda) ");
971
                try {
972
                        TypedQuery<AuditoriaVendaDTO> query = getEntityManager().createQuery(sql.toString(), AuditoriaVendaDTO.class);
973
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataSelecionada));
974
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataSelecionada));
975
                        query.setParameter("sequencialLojaSelecionada", sequencialLojaSelecionada);
976
                        return query.getResultList();
977
                } catch(Exception ex) {
978
                        ex.printStackTrace();
979
                        return null;
980
                }
981
        }
982
 
561 blopes 983
 
984
 
296 espaco 985
        /*
986
 
229 espaco 987
        @Override
296 espaco 988
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
229 espaco 989
                StringBuilder sql = new StringBuilder();
990
                sql.append("SELECT COUNT(l) FROM Venda e ");
991
                sql.append("LEFT JOIN e.listaLancamentos l ");
296 espaco 992
                sql.append("WHERE l.ativo IS TRUE ");
229 espaco 993
                try {
994
                        setarStringParametrosConsulta(sql, parametrosConsulta);
995
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
996
                        setarQueryParametrosConsulta(query, parametrosConsulta);
997
                        return query.getSingleResult().intValue();
998
                } catch(Exception ex) {
999
                        ex.printStackTrace();
1000
                        return null;
1001
                }
1002
        }
1003
 
1004
        @Override
296 espaco 1005
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodoNaoVivo(ParametrosConsultaVendasDTO parametrosConsulta) {
229 espaco 1006
                StringBuilder sql = new StringBuilder();
296 espaco 1007
                sql.append("SELECT COUNT(l) FROM Venda e ");
229 espaco 1008
                sql.append("LEFT JOIN e.listaLancamentos l ");
296 espaco 1009
                sql.append("WHERE l.ativo IS TRUE AND l.produto.tipo not like 'V' ");
229 espaco 1010
                try {
1011
                        setarStringParametrosConsulta(sql, parametrosConsulta);
296 espaco 1012
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
229 espaco 1013
                        setarQueryParametrosConsulta(query, parametrosConsulta);
296 espaco 1014
                        return query.getSingleResult().intValue();
229 espaco 1015
                } catch(Exception ex) {
1016
                        ex.printStackTrace();
1017
                        return null;
1018
                }
1019
        }
1020
 
1021
        @Override
1022
        public GraficoAcumuladoDTO consultarGrafico(String mes, String ano) {
1023
                StringBuilder sql = new StringBuilder();
1024
                sql.append("SELECT ");
1025
                Calendar data = DataUtils.obterCalendario(DataUtils.obterData(1, new Integer(mes)-1, new Integer(ano)));
1026
                int qntMaximaDias = data.getActualMaximum(Calendar.DAY_OF_MONTH);
1027
                for (int i = 1; i <= qntMaximaDias; i++) {
1028
                        String dia = String.format("%02d", i);
1029
                        sql.append("SUM(D.DIA" + dia + ") AS dia" + dia);
1030
                        if (i < qntMaximaDias) {
1031
                                sql.append(", ");
1032
                        } else {
1033
                                sql.append(" ");
1034
                        }
1035
                }
1036
                sql.append(" FROM ");
1037
                sql.append("(SELECT ");
1038
                for (int i = 1; i <= qntMaximaDias; i++) {
1039
                        String dia = String.format("%02d", i);
1040
                        sql.append("CASE date(v.dth_venda) WHEN '" + ano + "-" + mes + "-" + dia + "' THEN SUM(l.val_venda) END AS DIA" + dia);
1041
                        if (i < qntMaximaDias) {
1042
                                sql.append(", ");
1043
                        } else {
1044
                                sql.append(" ");
1045
                        }
1046
                }
1047
                sql.append("FROM sc_sec.sec_lancamento l, sc_sec.sec_venda v ");
1048
                sql.append("WHERE l.seq_venda = v.seq_venda AND l.ind_ativo is true ");
1049
                sql.append("GROUP BY date(v.dth_venda) ");
1050
                sql.append(") AS D ");
1051
 
1052
                try {
1053
                        Query query = getEntityManager().createNativeQuery(sql.toString());
1054
                        Object[] valores = new Object[31];
1055
                        Object[] resultado = (Object[]) query.getSingleResult();
1056
                        for (int i = 0; i < resultado.length; i++) {
1057
                                valores[i] = resultado[i];
1058
                        }
1059
                        GraficoAcumuladoDTO grafico = new GraficoAcumuladoDTO();
1060
                        grafico.setDIA_01(retornarValorEmString(valores[0]));
1061
                        grafico.setDIA_02(retornarValorEmString(valores[1]));
1062
                        grafico.setDIA_03(retornarValorEmString(valores[2]));
1063
                        grafico.setDIA_04(retornarValorEmString(valores[3]));
1064
                        grafico.setDIA_05(retornarValorEmString(valores[4]));
1065
                        grafico.setDIA_06(retornarValorEmString(valores[5]));
1066
                        grafico.setDIA_07(retornarValorEmString(valores[6]));
1067
                        grafico.setDIA_08(retornarValorEmString(valores[7]));
1068
                        grafico.setDIA_09(retornarValorEmString(valores[8]));
1069
                        grafico.setDIA_10(retornarValorEmString(valores[9]));
1070
                        grafico.setDIA_11(retornarValorEmString(valores[10]));
1071
                        grafico.setDIA_12(retornarValorEmString(valores[11]));
1072
                        grafico.setDIA_13(retornarValorEmString(valores[12]));
1073
                        grafico.setDIA_14(retornarValorEmString(valores[13]));
1074
                        grafico.setDIA_15(retornarValorEmString(valores[14]));
1075
                        grafico.setDIA_16(retornarValorEmString(valores[15]));
1076
                        grafico.setDIA_17(retornarValorEmString(valores[16]));
1077
                        grafico.setDIA_18(retornarValorEmString(valores[17]));
1078
                        grafico.setDIA_19(retornarValorEmString(valores[18]));
1079
                        grafico.setDIA_20(retornarValorEmString(valores[19]));
1080
                        grafico.setDIA_21(retornarValorEmString(valores[20]));
1081
                        grafico.setDIA_22(retornarValorEmString(valores[21]));
1082
                        grafico.setDIA_23(retornarValorEmString(valores[22]));
1083
                        grafico.setDIA_24(retornarValorEmString(valores[23]));
1084
                        grafico.setDIA_25(retornarValorEmString(valores[24]));
1085
                        grafico.setDIA_26(retornarValorEmString(valores[25]));
1086
                        grafico.setDIA_27(retornarValorEmString(valores[26]));
1087
                        grafico.setDIA_28(retornarValorEmString(valores[27]));
1088
                        grafico.setDIA_29(retornarValorEmString(valores[28]));
1089
                        grafico.setDIA_30(retornarValorEmString(valores[29]));
1090
                        grafico.setDIA_31(retornarValorEmString(valores[30]));
1091
                        return grafico;
1092
                } catch(Exception ex) {
1093
                        return null;
1094
                }
1095
        }
1096
 
1097
        private Double retornarValorEmString(Object objeto) {
1098
                try {
1099
                        return new Double(objeto.toString());
1100
                } catch (Exception e) {
1101
                        return new Double(0.0);
1102
                }
1103
        }
582 blopes 1104
        */
229 espaco 1105
 
1106
        private String adicionarEstoque(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1107
                StringBuilder sql = new StringBuilder();
1108
                sql.append(", (SELECT SUM(pl.quantidadeEstoque) FROM ProdutoLoja pl WHERE pl.produto = l.produto ");
1109
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1110
                        sql.append("AND pl.loja.sequencial = :sequencialLoja ");
1111
                }
1112
                sql.append(")");
1113
                return sql.toString();
1114
        }
582 blopes 1115
 
1116
/*
229 espaco 1117
        /*private String adicionarConsumoMedioDiario(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1118
                StringBuilder sql = new StringBuilder();
1119
                sql.append(", (SELECT COUNT(*) FROM Lancamento lc WHERE lc.produto = l.produto AND lc.ativo = true ");
1120
                sql.append("WHERE lc.venda.dataVenda >= :dataInicial AND lc.venda.dataVenda <= :dataFinal) ");
1121
//              String dataAnterior = DataUtil.retornarDataFormatadaEmFormatoTexto("yyyy-MM-dd", DataUtils.acrescentarMeses(DataUtils.getDataAtual(), -2));
1122
//              sql.append("AND lc.venda.dataVenda >= :dataDoisMesesAnterior) ");
1123
                return sql.toString();
1124
        }*/
582 blopes 1125
 
229 espaco 1126
        private String adicionarSolicitacaoCompraProduto() {
1127
                StringBuilder sql = new StringBuilder();
1128
//              sql.append(", (SELECT COUNT(*) > 0 FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
1129
//              sql.append(", (SELECT ppc.status, ppc.quantidadeParaComprar FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
1130
//              sql.append(", (SELECT (ppc) FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
1131
                sql.append(", (SELECT ppc.status FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
1132
                sql.append(", (SELECT ppc.quantidadeParaComprar FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
1133
                return sql.toString();
1134
        }
1135
 
1136
        @Override
1137
        public List<RankingProdutoDTO> consultarProdutosVendidos(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1138
                StringBuilder sql = new StringBuilder();
1139
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getTipoOrdenacao())) {
1140
                        if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.DATA.getValor())) {
1141
                                sql.append("SELECT new br.com.ec.domain.dto.RankingProdutoDTO(l.produto, l.venda, l.valorVenda, l.valorVarejo - l.valorVenda");
1142
                                sql.append(adicionarEstoque(parametrosConsulta));
1143
                                sql.append(adicionarSolicitacaoCompraProduto());
1144
                                sql.append(") FROM Lancamento l ");
1145
                        } else {
1146
                                sql.append("SELECT new br.com.ec.domain.dto.RankingProdutoDTO(l.produto, SUM(l.valorVenda), SUM(l.valorCompra), SUM(l.valorVarejo - l.valorVenda), COUNT(l.produto), MAX(l.venda.dataVenda)");
1147
                                sql.append(adicionarEstoque(parametrosConsulta));
1148
                                sql.append(adicionarSolicitacaoCompraProduto());
1149
                                sql.append(") FROM Lancamento l ");
1150
                        }
1151
                } else {
1152
                        sql.append("SELECT new br.com.ec.domain.dto.RankingProdutoDTO(l.produto, l.venda, l.valorVenda, l.valorVarejo - l.valorVenda");
1153
                        sql.append(adicionarEstoque(parametrosConsulta));
1154
                        sql.append(adicionarSolicitacaoCompraProduto());
1155
                        sql.append(") FROM Lancamento l ");
1156
                }
1157
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1158
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1159
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1160
                }
1161
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1162
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1163
                }
1164
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1165
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1166
                                sql.append("AND l.produto.codigo = :codigo ");
1167
                        }
1168
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1169
                                sql.append("AND ");
1170
                                sql.append(sqlConsultarSemAcento("l.produto.descricao"));
1171
                                sql.append(" like upper(:descricao) ");
1172
                        }
1173
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1174
                                sql.append("AND l.produto.estilo = :tipoEstilo ");
1175
                        }
1176
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1177
                                sql.append("AND l.produto.cor = :tipoCor ");
1178
                        }
1179
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1180
                                sql.append("AND l.produto.genero = :tipoGenero ");
1181
                        }
1182
                }
1183
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1184
                        sql.append("AND l.produto.modelo.marca.sequencial = :sequencialMarcaDoModelo ");
1185
                }
1186
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1187
                        sql.append("AND l.produto.modelo.sequencial = :sequencialModelo ");
1188
                }
1189
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getFornecedor())) {
1190
                        sql.append("AND :fornecedor in (SELECT fp.fornecedor FROM FornecedorProduto fp WHERE fp.produto.sequencial = l.produto.sequencial) ");
1191
                }
1192
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getVendedor())) {
1193
                        sql.append("AND l.venda.vendedor = :vendedor ");
1194
                }
1195
 
1196
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getTipoOrdenacao())) {
1197
                        if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.DATA.getValor())) {
1198
                                sql.append("ORDER BY l.venda.dataVenda DESC ");
1199
                        } else {
1200
                                sql.append("GROUP BY l.produto ");
1201
                                if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.LUCRO.getValor())) {
1202
                                        sql.append("ORDER BY SUM(l.valorVenda - l.valorCompra) DESC ");
1203
                                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
1204
                                        sql.append("ORDER BY COUNT(l.produto) DESC ");
1205
                                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.VALOR_VENDIDO.getValor())) {
1206
                                        sql.append("ORDER BY SUM(l.valorVenda) DESC ");
1207
                                }
1208
                        }
1209
                } else {
1210
                        sql.append("ORDER BY l.venda.dataVenda DESC ");
1211
                }
1212
                try {
1213
                        TypedQuery<RankingProdutoDTO> query = getEntityManager().createQuery(sql.toString(), RankingProdutoDTO.class)
1214
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
582 blopes 1215
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1216
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getQuantidadeProdutos())) {
1217
                                query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1218
                        }
229 espaco 1219
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1220
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
1221
                        }
1222
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1223
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1224
                        }
1225
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1226
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1227
                                        query.setParameter("codigo", parametrosConsulta.getProduto().getCodigoProdutoPadrao());
1228
                                }
1229
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1230
                                        query.setParameter("descricao", "%" + removerAcentuacao(parametrosConsulta.getProduto().getDescricao()) + "%");
1231
                                }
1232
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1233
                                        query.setParameter("tipoEstilo", parametrosConsulta.getProduto().getEstilo());
1234
                                }
1235
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1236
                                        query.setParameter("tipoCor", parametrosConsulta.getProduto().getCor());
1237
                                }
1238
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1239
                                        query.setParameter("tipoGenero", parametrosConsulta.getProduto().getGenero());
1240
                                }
1241
                        }
1242
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1243
                                query.setParameter("sequencialMarcaDoModelo", parametrosConsulta.getMarca().getSequencial());
1244
                        }
1245
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1246
                                query.setParameter("sequencialModelo", parametrosConsulta.getModelo().getSequencial());
1247
                        }
1248
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getFornecedor())) {
1249
                                query.setParameter("fornecedor", parametrosConsulta.getFornecedor());
1250
                        }
1251
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getVendedor())) {
1252
                                query.setParameter("vendedor", parametrosConsulta.getVendedor());
1253
                        }
582 blopes 1254
 
229 espaco 1255
                        /*if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSomenteParaComprar())) {
1256
                                query.setParameter("quantidadeMinimaComprar", parametrosConsulta.getQuantidadeMinimaComprar());
1257
                        }*/
1258
                        /*if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getTipoOrdenacao())) {
1259
                                if (!parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.DATA.getValor())) {
1260
                                        query.setParameter("dataDoisMesesAnterior", DataUtils.acrescentarMeses(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()), -2));
1261
                                }
1262
                        }*/
582 blopes 1263
 
229 espaco 1264
                        return query.getResultList();
1265
                } catch(Exception ex) {
1266
                        ex.printStackTrace();
1267
                        return null;
1268
                }
1269
        }
1270
 
583 blopes 1271
        @Override
1272
        public List<RankingProdutoDTONovo> consultarProdutosVendidosDTO(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1273
                StringBuilder sql = new StringBuilder();
1274
                sql.append("SELECT new br.com.ec.domain.dto.RankingProdutoDTO(l.produto, SUM(l.valorVenda), SUM(l.valorCompra), SUM(l.valorVarejo - l.valorVenda), COUNT(l.produto), MAX(l.venda.dataVenda)");
1275
                sql.append(adicionarEstoque(parametrosConsulta));
1276
                sql.append(adicionarSolicitacaoCompraProduto());
1277
                sql.append(") FROM Lancamento l ");
1278
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1279
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1280
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1281
                }
1282
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1283
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1284
                }
1285
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1286
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1287
                                sql.append("AND l.produto.codigo = :codigo ");
1288
                        }
1289
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1290
                                sql.append("AND ");
1291
                                sql.append(sqlConsultarSemAcento("l.produto.descricao"));
1292
                                sql.append(" like upper(:descricao) ");
1293
                        }
1294
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1295
                                sql.append("AND l.produto.estilo = :tipoEstilo ");
1296
                        }
1297
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1298
                                sql.append("AND l.produto.cor = :tipoCor ");
1299
                        }
1300
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1301
                                sql.append("AND l.produto.genero = :tipoGenero ");
1302
                        }
1303
                }
1304
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1305
                        sql.append("AND l.produto.modelo.marca.sequencial = :sequencialMarcaDoModelo ");
1306
                }
1307
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1308
                        sql.append("AND l.produto.modelo.sequencial = :sequencialModelo ");
1309
                }
1310
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getFornecedor())) {
1311
                        sql.append("AND :fornecedor in (SELECT fp.fornecedor FROM FornecedorProduto fp WHERE fp.produto.sequencial = l.produto.sequencial) ");
1312
                }
1313
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getVendedor())) {
1314
                        sql.append("AND l.venda.vendedor = :vendedor ");
1315
                }
1316
 
1317
                sql.append("GROUP BY l.produto ");
1318
                sql.append("ORDER BY COUNT(l.produto) DESC ");
1319
                try {
1320
                        TypedQuery<RankingProdutoDTONovo> query = getEntityManager().createQuery(sql.toString(), RankingProdutoDTONovo.class)
1321
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
1322
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1323
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getQuantidadeProdutos())) {
1324
                                query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1325
                        }
1326
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1327
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
1328
                        }
1329
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1330
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1331
                        }
1332
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1333
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1334
                                        query.setParameter("codigo", parametrosConsulta.getProduto().getCodigoProdutoPadrao());
1335
                                }
1336
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1337
                                        query.setParameter("descricao", "%" + removerAcentuacao(parametrosConsulta.getProduto().getDescricao()) + "%");
1338
                                }
1339
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1340
                                        query.setParameter("tipoEstilo", parametrosConsulta.getProduto().getEstilo());
1341
                                }
1342
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1343
                                        query.setParameter("tipoCor", parametrosConsulta.getProduto().getCor());
1344
                                }
1345
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1346
                                        query.setParameter("tipoGenero", parametrosConsulta.getProduto().getGenero());
1347
                                }
1348
                        }
1349
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1350
                                query.setParameter("sequencialMarcaDoModelo", parametrosConsulta.getMarca().getSequencial());
1351
                        }
1352
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1353
                                query.setParameter("sequencialModelo", parametrosConsulta.getModelo().getSequencial());
1354
                        }
1355
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getFornecedor())) {
1356
                                query.setParameter("fornecedor", parametrosConsulta.getFornecedor());
1357
                        }
1358
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getVendedor())) {
1359
                                query.setParameter("vendedor", parametrosConsulta.getVendedor());
1360
                        }
1361
 
1362
                        /*if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSomenteParaComprar())) {
1363
                                query.setParameter("quantidadeMinimaComprar", parametrosConsulta.getQuantidadeMinimaComprar());
1364
                        }*/
1365
                        /*if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getTipoOrdenacao())) {
1366
                                if (!parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.DATA.getValor())) {
1367
                                        query.setParameter("dataDoisMesesAnterior", DataUtils.acrescentarMeses(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()), -2));
1368
                                }
1369
                        }*/
1370
 
1371
                        return query.getResultList();
1372
                } catch(Exception ex) {
1373
                        ex.printStackTrace();
1374
                        return null;
1375
                }
1376
        }
1377
 
631 blopes 1378
        @Override
1379
        public VendaDTO detalharPorSequencial(Long sequencialVenda) {
1380
                StringBuilder jpql = new StringBuilder();
1381
                jpql.append("SELECT new br.com.ec.domain.dto.VendaDTO(");
1382
                jpql.append(VendaDTO.CONSULTA_DTO_SIMPLES);
1383
                jpql.append(") FROM Venda e ");
1384
                jpql.append("WHERE e.sequencial = :sequencialVenda ");
1385
                try {
1386
                        return getEntityManager().createQuery(jpql.toString(), VendaDTO.class)
1387
                                        .setParameter("sequencialVenda", sequencialVenda)
1388
                                        .getSingleResult();
1389
                } catch(Exception ex) {
1390
                        ex.printStackTrace();
1391
                        return null;
1392
                }
1393
        }
1394
 
582 blopes 1395
        /*
229 espaco 1396
        @Override
1397
        public List<RankingProdutoDTO> consultarProdutosVendidosResumido(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1398
                StringBuilder sql = new StringBuilder();
1399
                sql.append("SELECT CAST(l.seq_produto AS VARCHAR), COUNT(l.seq_produto) ");
1400
                sql.append(adicionarEstoqueSqlNativo(parametrosConsulta));
1401
                sql.append(" FROM sc_sec.sec_lancamento l ");
1402
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = l.seq_venda ");
1403
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
1404
                sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = l.seq_produto ");
1405
                sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
1406
                sql.append("LEFT JOIN sc_sec.sec_marca ma ON ma.seq_marca = m.seq_marca ");
1407
                sql.append("WHERE v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal ");
1408
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1409
                        sql.append("AND lj.seq_loja = :sequencialLoja ");
1410
                }
1411
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1412
                        sql.append("AND p.tip_produto = :tipoProduto ");
1413
                }
1414
 
1415
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1416
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
1417
                                sql.append("AND p.seq_produto = :sequencialProduto ");
1418
                        }
1419
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1420
                                sql.append("AND p.cod_produto = :codigo ");
1421
                        }
1422
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1423
                                sql.append("AND ");
1424
                                sql.append(sqlConsultarSemAcento("p.dsc_produto"));
1425
                                sql.append(" like upper(:descricao) ");
1426
                        }
1427
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1428
                                sql.append("AND p.tip_estilo = :tipoEstilo ");
1429
                        }
1430
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1431
                                sql.append("AND p.tip_cor = :tipoCor ");
1432
                        }
1433
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1434
                                sql.append("AND p.tip_genero = :tipoGenero ");
1435
                        }
1436
                }
1437
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1438
                        sql.append("AND ma.seq_marcal = :sequencialMarcaDoModelo ");
1439
                }
1440
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1441
                        sql.append("AND m.seq_modelo = :sequencialModelo ");
1442
                }
1443
 
1444
                sql.append("GROUP BY l.seq_produto ");
1445
//              if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
1446
//                      sql.append("ORDER BY COUNT(l.seq_produto) DESC ");
1447
//              }
1448
                try {
1449
                        Query query = getEntityManager().createNativeQuery(sql.toString())
1450
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
1451
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1452
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getPrimeiroRegistro())) {
1453
                                if (parametrosConsulta.getPrimeiroRegistro() > 0) {
1454
                                        query.setFirstResult(parametrosConsulta.getPrimeiroRegistro());
1455
                                }
1456
                        }
1457
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTamanhoPagina())) {
1458
                                if (parametrosConsulta.getTamanhoPagina() > 0) {
1459
                                        query.setMaxResults(parametrosConsulta.getTamanhoPagina());
1460
                                } else {
1461
                                        query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1462
                                }
1463
                        } else {
1464
                                query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1465
                        }
1466
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1467
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
1468
                        }
1469
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1470
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1471
                        }
1472
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1473
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
1474
                                        query.setParameter("sequencialProduto", parametrosConsulta.getProduto().getSequencial());
1475
                                }
1476
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1477
                                        query.setParameter("codigo", parametrosConsulta.getProduto().getCodigoProdutoPadrao());
1478
                                }
1479
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1480
                                        query.setParameter("descricao", "%" + removerAcentuacao(parametrosConsulta.getProduto().getDescricao()) + "%");
1481
                                }
1482
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1483
                                        query.setParameter("tipoEstilo", parametrosConsulta.getProduto().getEstilo());
1484
                                }
1485
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1486
                                        query.setParameter("tipoCor", parametrosConsulta.getProduto().getCor());
1487
                                }
1488
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1489
                                        query.setParameter("tipoGenero", parametrosConsulta.getProduto().getGenero());
1490
                                }
1491
                        }
1492
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1493
                                query.setParameter("sequencialMarcaDoModelo", parametrosConsulta.getMarca().getSequencial());
1494
                        }
1495
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1496
                                query.setParameter("sequencialModelo", parametrosConsulta.getModelo().getSequencial());
1497
                        }
1498
                        List<Object[]> resultList = query.getResultList();
1499
                        List<RankingProdutoDTO> produtos = new ArrayList<RankingProdutoDTO>();
1500
                        for (Object[] objects : resultList) {
1501
                                RankingProdutoDTO rankingProduto = new RankingProdutoDTO();
1502
                                Produto produto = new Produto();
1503
                                if (VerificadorUtil.naoEstaNulo(objects[0])) {
1504
                                        produto.setSequencial(Long.parseLong(objects[0].toString()));
1505
                                }
1506
                                rankingProduto.setProduto(produto);
1507
                                if (VerificadorUtil.naoEstaNulo(objects[1])) {
1508
                                        rankingProduto.setQuantidadeVendas(Long.parseLong(objects[1].toString()));
1509
                                }
1510
                                if (VerificadorUtil.naoEstaNulo(objects[2])) {
1511
                                        rankingProduto.setQuantidadeEstoque(Long.parseLong(objects[2].toString()));
1512
                                }
1513
                                produtos.add(rankingProduto);
1514
                        }
1515
                        return produtos;
1516
                } catch(Exception ex) {
1517
                        ex.printStackTrace();
1518
                        return null;
1519
                }
1520
        }
1521
 
1522
        @Override
1523
        public List<RankingProdutoDTO> consultarProdutosParaTransferir(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1524
                StringBuilder sql = new StringBuilder();
1525
                sql.append("SELECT CAST(l.seq_produto AS VARCHAR) AS produto, COUNT(l.seq_produto) AS vendas ");
1526
                sql.append(" FROM sc_sec.sec_lancamento l ");
1527
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = l.seq_venda ");
1528
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
1529
                sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = l.seq_produto ");
1530
                sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
1531
                sql.append("LEFT JOIN sc_sec.sec_marca ma ON ma.seq_marca = m.seq_marca ");
1532
                sql.append("WHERE ");
1533
                sql.append(adicionarParametrosSqlNativo(parametrosConsulta));
1534
                sql.append("GROUP BY l.seq_produto, ma.dsc_marca, m.dsc_modelo ");
1535
                sql.append("HAVING ");
1536
                for (Loja loja : parametrosConsulta.getLojasParaConsulta()) {
1537
                        sql.append(adicionarHavingSqlNativo(parametrosConsulta, loja.getSequencial()));
1538
                        sql.append(" OR ");
1539
                }
1540
                sql.append(" (SELECT SUM(pl.qtd_estoque) AS estoque FROM sc_sec.sec_produto_loja pl WHERE pl.seq_produto = l.seq_produto AND pl.seq_loja in (");
1541
                for (Loja loja : parametrosConsulta.getLojasParaConsulta()) {
1542
                        sql.append(" ").append(loja.getSequencial()).append(", ");
1543
                }
1544
                sql.deleteCharAt(sql.length()-1);
1545
                sql.deleteCharAt(sql.length()-1);
1546
                sql.append(" )) = 0 ");
1547
                sql.append("ORDER BY ma.dsc_marca, m.dsc_modelo ");
1548
                try {
1549
                        Query query = getEntityManager().createNativeQuery(sql.toString())
1550
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
1551
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1552
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getPrimeiroRegistro())) {
1553
                                if (parametrosConsulta.getPrimeiroRegistro() > 0) {
1554
                                        query.setFirstResult(parametrosConsulta.getPrimeiroRegistro());
1555
                                }
1556
                        }
1557
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTamanhoPagina())) {
1558
                                if (parametrosConsulta.getTamanhoPagina() > 0) {
1559
                                        query.setMaxResults(parametrosConsulta.getTamanhoPagina());
1560
                                } else {
1561
                                        query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1562
                                }
1563
                        } else {
1564
                                query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1565
                        }
1566
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1567
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
1568
                        }
1569
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1570
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1571
                        }
1572
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1573
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
1574
                                        query.setParameter("sequencialProduto", parametrosConsulta.getProduto().getSequencial());
1575
                                }
1576
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1577
                                        query.setParameter("codigo", parametrosConsulta.getProduto().getCodigoProdutoPadrao());
1578
                                }
1579
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1580
                                        query.setParameter("descricao", "%" + removerAcentuacao(parametrosConsulta.getProduto().getDescricao()) + "%");
1581
                                }
1582
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1583
                                        query.setParameter("tipoEstilo", parametrosConsulta.getProduto().getEstilo());
1584
                                }
1585
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1586
                                        query.setParameter("tipoCor", parametrosConsulta.getProduto().getCor());
1587
                                }
1588
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1589
                                        query.setParameter("tipoGenero", parametrosConsulta.getProduto().getGenero());
1590
                                }
1591
                        }
1592
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1593
                                query.setParameter("sequencialMarcaDoModelo", parametrosConsulta.getMarca().getSequencial());
1594
                        }
1595
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1596
                                query.setParameter("sequencialModelo", parametrosConsulta.getModelo().getSequencial());
1597
                        }
274 espaco 1598
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getIndicadorModeloFavorito())) {
1599
                                query.setParameter("indicadorModeloFavorito", parametrosConsulta.getIndicadorModeloFavorito());
1600
                        }
229 espaco 1601
                        List<Object[]> resultList = query.getResultList();
1602
                        List<RankingProdutoDTO> produtos = new ArrayList<RankingProdutoDTO>();
1603
                        for (Object[] objects : resultList) {
1604
                                RankingProdutoDTO rankingProduto = new RankingProdutoDTO();
1605
                                Produto produto = new Produto();
1606
                                if (VerificadorUtil.naoEstaNulo(objects[0])) {
1607
                                        System.out.println(objects[0].toString());
1608
                                        produto.setSequencial(Long.parseLong(objects[0].toString()));
1609
                                }
1610
                                rankingProduto.setProduto(produto);
1611
                                produtos.add(rankingProduto);
1612
                        }
1613
                        return produtos;
1614
                } catch(Exception ex) {
1615
                        ex.printStackTrace();
1616
                        return null;
1617
                }
1618
        }
1619
 
1620
        private String adicionarVendasSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta, Long sequencialLoja) {
1621
                StringBuilder sql = new StringBuilder("");
1622
                sql.append(", (SELECT COUNT(lanc.seq_produto) FROM sc_sec.sec_lancamento lanc ");
1623
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = lanc.seq_venda ");
1624
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
1625
                sql.append("WHERE v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal ");
1626
                sql.append("AND lanc.seq_produto = l.seq_produto AND lj.seq_loja = ");
1627
                sql.append(sequencialLoja);
1628
                sql.append(" GROUP BY lanc.seq_produto) AS vendas" + sequencialLoja + " ");
1629
                return sql.toString();
1630
        }
1631
 
1632
        private String adicionarEstoqueSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta, Long sequencialLoja) {
1633
                StringBuilder sql = new StringBuilder();
1634
                sql.append(", (SELECT SUM(pl.qtd_estoque) FROM sc_sec.sec_produto_loja pl ");
1635
                sql.append("WHERE pl.seq_produto = l.seq_produto ");
1636
                sql.append("AND pl.seq_loja = ");
1637
                sql.append(sequencialLoja);
1638
                sql.append(") AS estoque" + sequencialLoja + " ");
1639
                return sql.toString();
1640
        }
1641
 
1642
        private String adicionarHavingSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta, Long sequencialLoja) {
1643
                StringBuilder sql = new StringBuilder();
1644
                sql.append("((SELECT SUM(pl.qtd_estoque) AS estoque FROM sc_sec.sec_produto_loja pl WHERE pl.seq_produto = l.seq_produto AND pl.seq_loja = ");
1645
                sql.append(sequencialLoja);
1646
                sql.append(") - (");
1647
                sql.append("SELECT COUNT(lanc.seq_produto) FROM sc_sec.sec_lancamento lanc ");
1648
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = lanc.seq_venda ");
1649
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
1650
                sql.append("WHERE v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal AND lanc.seq_produto = l.seq_produto ");
1651
                sql.append("AND lj.seq_loja = ");
1652
                sql.append(sequencialLoja);
1653
                sql.append(" GROUP BY lanc.seq_produto) ");
1654
                sql.append("* 1) * -1 > 0 ");
1655
                return sql.toString();
1656
        }
1657
 
1658
        private String adicionarEstoqueSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1659
                StringBuilder sql = new StringBuilder();
1660
                sql.append(", (");
1661
                sql.append("SELECT SUM(pl.qtd_estoque) FROM sc_sec.sec_produto_loja pl ");
1662
                sql.append("WHERE pl.seq_produto = l.seq_produto ");
1663
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1664
                        sql.append("AND pl.seq_loja = :sequencialLoja ");
1665
                }
1666
                sql.append(") ");
1667
                return sql.toString();
1668
        }
1669
 
1670
        private String adicionarParametrosSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1671
                StringBuilder sql = new StringBuilder("v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal ");
1672
 
1673
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLojaSelecionada()) &&
1674
                                VerificadorUtil.naoEstaNulo(parametrosConsulta.getEstoqueMinimo())) {
1675
                        sql.append("AND (");
1676
                        sql.append("SELECT SUM(pl.qtd_estoque) FROM sc_sec.sec_produto_loja pl ");
1677
                        sql.append("WHERE pl.seq_produto = l.seq_produto ");
1678
                        sql.append("AND pl.seq_loja = ");
1679
                        sql.append(parametrosConsulta.getLojaSelecionada().getSequencial());
1680
                        sql.append(") >= ");
1681
                        sql.append(parametrosConsulta.getEstoqueMinimo());
1682
                        sql.append(" ");
1683
                }
1684
 
1685
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1686
                        sql.append("AND lj.seq_loja = :sequencialLoja ");
1687
                }
1688
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1689
                        sql.append("AND p.tip_produto = :tipoProduto ");
1690
                }
1691
 
1692
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1693
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
1694
                                sql.append("AND p.seq_produto = :sequencialProduto ");
1695
                        }
1696
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1697
                                sql.append("AND p.cod_produto = :codigo ");
1698
                        }
1699
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1700
                                sql.append("AND ");
1701
                                sql.append(sqlConsultarSemAcento("p.dsc_produto"));
1702
                                sql.append(" like upper(:descricao) ");
1703
                        }
1704
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1705
                                sql.append("AND p.tip_estilo = :tipoEstilo ");
1706
                        }
1707
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1708
                                sql.append("AND p.tip_cor = :tipoCor ");
1709
                        }
1710
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1711
                                sql.append("AND p.tip_genero = :tipoGenero ");
1712
                        }
1713
                }
1714
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1715
                        sql.append("AND ma.seq_marcal = :sequencialMarcaDoModelo ");
1716
                }
1717
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1718
                        sql.append("AND m.seq_modelo = :sequencialModelo ");
1719
                }
274 espaco 1720
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getIndicadorModeloFavorito())) {
1721
                        sql.append("AND m.ind_favorito = :indicadorModeloFavorito ");
1722
                }
229 espaco 1723
                return sql.toString();
1724
        }
1725
 
1726
        @Override
1727
        public List<RankingProdutoDTO> consultarProdutosMaisVendidos(Date dataInicial, Date dataFinal, Integer quantidadeProdutos, String tipoOrdenacao, Long sequencialLoja, String tipoProduto,
1728
                        Produto produto, Marca marca) {
1729
                StringBuilder sql = new StringBuilder();
1730
                sql.append("SELECT new br.com.ec.domain.dto.RankingProdutoDTO(l.produto, SUM(l.valorVenda), SUM(l.valorCompra), SUM(l.valorVarejo - l.valorVenda), COUNT(l.produto)) FROM Lancamento l ");
1731
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1732
                if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1733
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1734
                }
1735
                if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1736
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1737
                }
1738
                if (VerificadorUtil.naoEstaNulo(produto)) {
1739
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getCodigo())) {
1740
                                sql.append("AND l.produto.codigo = :codigo ");
1741
                        }
1742
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getDescricao())) {
1743
                                sql.append("AND ");
1744
                                sql.append(sqlConsultarSemAcento("l.produto.descricao"));
1745
                                sql.append(" like upper(:descricao) ");
1746
                        }
1747
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getEstilo())) {
1748
                                sql.append("AND l.produto.estilo = :tipoEstilo ");
1749
                        }
1750
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getGenero())) {
1751
                                sql.append("AND l.produto.genero = :tipoGenero ");
1752
                        }
1753
                }
1754
                if (VerificadorUtil.naoEstaNulo(marca)) {
1755
                        sql.append("AND l.produto.modelo.marca.sequencial = :sequencialMarcaDoModelo ");
1756
                }
1757
 
1758
                sql.append("GROUP BY l.produto ");
1759
                if (tipoOrdenacao.equals(TipoOrdenacaoMaisVendidos.LUCRO.getValor())) {
1760
                        sql.append("ORDER BY SUM(l.valorVenda - l.valorCompra) DESC ");
1761
                } else if (tipoOrdenacao.equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
1762
                        sql.append("ORDER BY COUNT(l.produto) DESC ");
1763
                } else if (tipoOrdenacao.equals(TipoOrdenacaoMaisVendidos.VALOR_VENDIDO.getValor())) {
1764
                        sql.append("ORDER BY SUM(l.valorVenda) DESC ");
1765
                }
1766
                try {
1767
                        TypedQuery<RankingProdutoDTO> query = getEntityManager().createQuery(sql.toString(), RankingProdutoDTO.class)
1768
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial))
1769
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal))
1770
                                        .setMaxResults(quantidadeProdutos);
1771
                        if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1772
                                query.setParameter("sequencialLoja", sequencialLoja);
1773
                        }
1774
                        if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1775
                                query.setParameter("tipoProduto", tipoProduto);
1776
                        }
1777
                        if (VerificadorUtil.naoEstaNulo(produto)) {
1778
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getCodigo())) {
1779
                                        query.setParameter("codigo", produto.getCodigoProdutoPadrao());
1780
                                }
1781
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getDescricao())) {
1782
                                        query.setParameter("descricao", "%" + removerAcentuacao(produto.getDescricao()) + "%");
1783
                                }
1784
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getEstilo())) {
1785
                                        query.setParameter("tipoEstilo", produto.getEstilo());
1786
                                }
1787
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getGenero())) {
1788
                                        query.setParameter("tipoGenero", produto.getGenero());
1789
                                }
1790
                        }
1791
                        if (VerificadorUtil.naoEstaNulo(marca)) {
1792
                                query.setParameter("sequencialMarcaDoModelo", marca.getSequencial());
1793
                        }
1794
                        return query.getResultList();
1795
                } catch(Exception ex) {
1796
                        ex.printStackTrace();
1797
                        return null;
1798
                }
1799
        }
1800
 
1801
        private String adicionarQueryConsultaDoEstoque(Long sequencialLoja, Modelo modelo, String tipoProduto, String estiloProduto) {
1802
                try {
1803
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
1804
                        if (VerificadorUtil.naoEstaNuloOuVazio(sequencialLoja)) {
1805
                                query.setParameter("sequencialLoja", sequencialLoja);
1806
                        }
1807
                        if (VerificadorUtil.naoEstaNuloOuVazio(tipoProduto)) {
1808
                                query.setParameter("tipoProduto", tipoProduto);
1809
                        }
1810
                        if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
1811
                                query.setParameter("estiloProduto", estiloProduto);
1812
                        }
1813
//                              if (VerificadorUtil.naoEstaNuloOuVazio(genero)) {
1814
//                                      query.setParameter("tipoGenero", genero);
1815
//                              }
1816
                        query.setParameter("sequencialModelo", modelo.getSequencial());
1817
//                              if (VerificadorUtil.naoEstaNuloOuVazio(descricaoProduto)) {
1818
//                                      query.setParameter("descricaoProduto", "%" + removerAcentuacao(descricaoProduto) + "%");
1819
//                              }
1820
                        return sql.toString();
1821
        }
1822
*/
1823
/*
1824
        @Override
1825
        public List<VendasDTO> consultarVendas(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
1826
                StringBuilder sql = new StringBuilder();
1827
                try {
1828
                        sql.append("SELECT ");
1829
                        sql.append("v.seq_venda, ");
1830
                        sql.append("l.dsc_loja, v.dth_venda, ");
1831
                        sql.append("(SELECT SUM(lc.val_venda) FROM sc_sec.sec_lancamento lc WHERE lc.seq_venda = v.seq_venda AND lc.ind_ativo = true), ");
1832
                        sql.append("v.tip_situacao, ");
1833
                        sql.append("us.dsc_nome, v.dsc_observacao, ");
1834
                        sql.append("p.cod_produto, m.dsc_modelo, p.dsc_produto, lanc.val_venda ");
1835
                        sql.append("FROM sc_sec.sec_venda v ");
1836
                        sql.append("LEFT JOIN sc_sec.sec_loja l ON l.seq_loja = v.seq_loja ");
1837
                        sql.append("LEFT JOIN sc_sec.sec_vendedor ve ON ve.seq_vendedor = v.seq_vendedor ");
1838
                        sql.append("LEFT JOIN sc_sec.sec_usuario us ON us.seq_pessoa = ve.seq_pessoa ");
1839
                        sql.append("LEFT JOIN sc_sec.sec_lancamento lanc ON lanc.seq_venda = v.seq_venda ");
1840
                        sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = lanc.seq_produto ");
1841
                        sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
1842
                        sql.append("WHERE 1=1 ");
1843
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getLoja())) {
1844
                                sql.append("AND l.seq_loja.sequencial = :sequencialLoja ");
1845
                        }
1846
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getSituacaoVenda())) {
1847
                                sql.append("AND v.tip_situacao = :tipoSituacao ");
1848
                        }
1849
//                      if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaVendasDTO)parametros).getVendedor())) {
1850
//                              sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
1851
//                      }
1852
//                      if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getIndicacao())) {
1853
//                              sql.append("AND e.indicacao.sequencial = :sequencialIndicacao ");
1854
//                      }
1855
*/
1856
                        //TODO: VERIFICAR LANÇAMENTOS COM MAIS PAGAMENTOS QUE LANÇAMENTOS
1857
                        /*
1858
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda())) {
1859
                                if (parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.NENHUMA.getValor())) {
1860
                                        sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e) = 0 ");
1861
//                                              sql.append("AND ((SELECT COUNT(vf) FROM VendaFormaPagamento vf WHERE vf.venda = e) > (SELECT COUNT(cr) FROM ContaAReceber cr WHERE cr.venda = e)) ");
1862
                                }
1863
                                if (parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.QUITADO.getValor())) {
1864
                                        sql.append("AND (SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) = 0 ");
1865
                                        sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) > 0 ");
1866
                                }
1867
                                if (parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.PENDENCIAS.getValor())) {
1868
                                        sql.append("AND ((SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) > 0 ");
1869
                                        sql.append("OR (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) = 0) ");
1870
                                }
1871
                        }
1872
                        */
1873
/*     
1874
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataVendas())
1875
                                        || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataInicial())
1876
                                        || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataFinal())) {
1877
                                sql.append("AND v.dth_venda >= :dataInicial ");
1878
                                sql.append("AND v.dth_venda <= :dataFinal ");
1879
                        }
1880
 
1881
                        sql.append("ORDER BY v.seq_venda ");
1882
 
1883
                        Query query = getEntityManager().createNativeQuery(sql.toString());
1884
 
1885
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getLoja())) {
1886
                                query.setParameter("sequencialLoja", parametrosConsultaVendasDTO.getLoja().getSequencial());
1887
                        }
1888
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getSituacaoVenda())) {
1889
                                query.setParameter("tipoSituacao", parametrosConsultaVendasDTO.getSituacaoVenda());
1890
                        }
1891
//                      if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getVendedor())) {
1892
//                              query.setParameter("sequencialVendedor", parametrosConsultaVendasDTO.getVendedor().getSequencial());
1893
//                      }
1894
//                      if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getIndicacao())) {
1895
//                              query.setParameter("sequencialIndicacao", ((ParametrosConsultaVendasDTO)parametros).getIndicacao().getSequencial());
1896
//                      }
1897
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataInicial())
1898
                                        && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataFinal())) {
1899
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsultaVendasDTO.getDataInicial());
1900
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsultaVendasDTO.getDataFinal());
1901
                                query.setParameter("dataInicial", dataInicial);
1902
                                query.setParameter("dataFinal", dataFinal);
1903
                        } else if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataVendas())) {
1904
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsultaVendasDTO.getDataVendas());
1905
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsultaVendasDTO.getDataVendas());
1906
                                query.setParameter("dataInicial", dataInicial);
1907
                                query.setParameter("dataFinal", dataFinal);
1908
                        }
1909
 
1910
                        List<Object[]> resultList = query.getResultList();
1911
 
1912
                        List<VendasDTO> vendas = new ArrayList<VendasDTO>();
1913
 
1914
                        // PREENCHER VENDAS
1915
                        for (Object[] objects : resultList) {
1916
                                VendasDTO venda = new VendasDTO();
1917
                                venda.setSequencial(Long.parseLong(objects[0].toString()));
1918
                                if (!vendas.contains(venda)) {
1919
                                        venda.setDescricaoLoja(objects[1].toString());
1920
//                                      System.out.println(objects[2].toString());
1921
//                                      venda.setDataVenda(new Date(objects[2].toString()));
1922
                                        venda.setValorVenda(Double.parseDouble(objects[3].toString()));
1923
                                        venda.setTipoSituacao(objects[4].toString());
1924
                                        venda.setNomeUsuario(objects[5].toString());
1925
                                        venda.setObservacao(objects[6].toString());
1926
                                        vendas.add(venda);
1927
                                }
1928
                        }
1929
 
1930
                        for (Object[] objects : resultList) {
1931
                                VendasDTO venda = new VendasDTO();
1932
                                venda.setSequencial(Long.parseLong(objects[0].toString()));
1933
 
1934
                                VendasLancamentoDTO lancamento = new VendasLancamentoDTO();
1935
                                lancamento.setCodigoProduto(objects[7].toString());
1936
                                if (VerificadorUtil.naoEstaNulo(objects[8])) {
1937
                                        lancamento.setDescricaoModelo(objects[8].toString());
1938
                                }
1939
                                lancamento.setDescricaoProduto(objects[9].toString());
1940
                                lancamento.setValorVenda(Double.parseDouble(objects[10].toString()));
1941
 
1942
                                VendasDTO vendaCompleta = vendas.get(vendas.indexOf(venda));
1943
                                vendaCompleta.getLancamentos().add(lancamento);
1944
                                vendas.remove(vendas.indexOf(venda));
1945
                                vendas.add(vendaCompleta);
1946
                        }
1947
                        return vendas;
1948
                } catch (NoResultException e) {
1949
                        return null;
1950
                }
1951
        }
1952
 
1953
        @Override
1954
        public Integer obterQuantidadeProdutosVendidosPorEstiloEeGenero(Date dataInicial, Date dataFinal, Long sequencialLoja, Long sequencialModelo, String tipoProduto, String estiloProduto, String tipoGenero) {
1955
                StringBuilder sql = new StringBuilder();
1956
                sql.append("SELECT COUNT(l) FROM Lancamento l ");
1957
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1958
                if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1959
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1960
                }
1961
                if (VerificadorUtil.naoEstaNulo(sequencialModelo)) {
1962
                        sql.append("AND l.produto.modelo.sequencial = :sequencialModelo ");
1963
                }
1964
                if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1965
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1966
                }
1967
                if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
1968
                        sql.append("AND l.produto.estilo = :tipoEstilo ");
1969
                }
1970
                if (VerificadorUtil.naoEstaNuloOuVazio(tipoGenero)) {
1971
                        sql.append("AND l.produto.genero = :tipoGenero ");
1972
                }
1973
*/             
1974
                /*sql.append("GROUP BY l.produto.estilo ");*/
1975
/*     
1976
                try {
1977
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class)
1978
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial))
1979
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
1980
                        if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1981
                                query.setParameter("sequencialLoja", sequencialLoja);
1982
                        }
1983
                        if (VerificadorUtil.naoEstaNulo(sequencialModelo)) {
1984
                                query.setParameter("sequencialModelo", sequencialModelo);
1985
                        }
1986
                        if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1987
                                query.setParameter("tipoProduto", tipoProduto);
1988
                        }
1989
                        if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
1990
                                query.setParameter("tipoEstilo", estiloProduto);
1991
                        }
1992
                        if (VerificadorUtil.naoEstaNuloOuVazio(tipoGenero)) {
1993
                                query.setParameter("tipoGenero", tipoGenero);
1994
                        }
1995
                        return query.getSingleResult().intValue();
1996
                } catch(Exception ex) {
1997
                        ex.printStackTrace();
1998
                        return null;
1999
                }
2000
        }
2001
*/     
2002
        /*
2003
        @Override
2004
        public RankingComprasTransferenciasEstiloDTO consultarVendasPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, Modelo modelo) {
2005
                StringBuilder sql = new StringBuilder();
2006
                sql.append("SELECT new br.com.ec.domain.dto.RankingComprasTransferenciasEstiloDTO(");
2007
                sql.append("l.produto.estilo");
2008
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, null) + ")");
2009
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor()) + ")");
2010
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor()) + ")");
2011
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor()) + ")");
2012
                sql.append(", COUNT(0), COUNT(0), COUNT(0), COUNT(0)");
2013
                sql.append(") FROM Lancamento l ");
2014
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
2015
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
2016
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
2017
                }
2018
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2019
                        sql.append("AND l.produto.tipo = :tipoProduto ");
2020
                }
2021
                sql.append("AND l.produto.modelo = :modelo ");
2022
                sql.append("AND l.produto.estilo = :estiloProduto ");
2023
                sql.append("GROUP BY l.produto.estilo ");
2024
                try {
2025
                        TypedQuery<RankingComprasTransferenciasEstiloDTO> query = getEntityManager().createQuery(sql.toString(), RankingComprasTransferenciasEstiloDTO.class)
2026
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
2027
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
2028
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
2029
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
2030
                        }
2031
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2032
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
2033
                        }
2034
                        if (VerificadorUtil.naoEstaNulo(modelo)) {
2035
                                query.setParameter("modelo", modelo);
2036
                        }
2037
                        query.setParameter("estiloProduto", parametrosConsulta.getEstilo());
2038
                        return query.getSingleResult();
2039
                } catch(NoResultException nr) {
2040
                        RankingComprasTransferenciasEstiloDTO rankingComprasTransferenciasEstilo = new RankingComprasTransferenciasEstiloDTO();
2041
                        rankingComprasTransferenciasEstilo.setEstilo(TipoEstiloProduto.parse(parametrosConsulta.getEstilo()));
2042
                        return rankingComprasTransferenciasEstilo;
2043
                } catch(Exception ex) {
2044
                        ex.printStackTrace();
2045
                        return null;
2046
                }
2047
        }
2048
*/
2049
/*
2050
        private String adicionarConsultaQuantidadeVendasPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, String genero, Boolean consultarPorLoja) {
2051
                StringBuilder sql = new StringBuilder();
2052
                sql.append("SELECT COUNT(lanc) FROM Lancamento lanc ");
2053
                sql.append("WHERE lanc.venda.dataVenda >= :dataInicial AND lanc.venda.dataVenda <= :dataFinal ");
2054
                sql.append("AND lanc.produto.modelo = :modelo ");
2055
                sql.append("AND lanc.produto.estilo = :estiloProduto ");
2056
                if (consultarPorLoja) {
2057
                        sql.append("AND lanc.venda.loja = l ");
2058
                }
2059
                sql.append("AND lanc.produto.genero = '" + genero + "' ");
2060
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2061
                        sql.append("AND lanc.produto.tipo = :tipoProduto ");
2062
                }
2063
                return sql.toString().trim();
2064
        }
2065
 
2066
        @Override
2067
        public RankingComprasTransferenciasEstiloDTO consultarEstoqueEeVendasPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, Modelo modelo) {
2068
                StringBuilder sql = new StringBuilder();
2069
                sql.append("SELECT new br.com.ec.domain.dto.RankingComprasTransferenciasEstiloDTO(");
2070
                sql.append("pLoja.produto.estilo");
2071
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), false) + ")");
2072
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), false) + ")");
2073
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), false) + ")");
2074
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), false) + ")");
2075
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), false) + ")");
2076
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), false) + ")");
2077
                sql.append(", (" + adicionarConsultaPedidosCompraPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor()) + ")");
2078
                sql.append(", (" + adicionarConsultaPedidosCompraPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor()) + ")");
2079
                sql.append(", (" + adicionarConsultaPedidosCompraPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor()) + ")");
2080
                // ADICIONAR QUANTIDADE JÁ SOLCITADO PARA COMPRA (VERIFICADO + SOLICITADO)
2081
                sql.append(") FROM ProdutoLoja pLoja ");
2082
                sql.append("WHERE pLoja.produto.estilo = :estiloProduto ");
2083
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
2084
                        sql.append("AND pLoja.loja.sequencialLoja = :sequencialLoja ");
2085
                }
2086
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2087
                        sql.append("AND pLoja.produto.tipo = :tipoProduto ");
2088
                }
2089
                sql.append("AND pLoja.produto.modelo = :modelo ");
2090
                sql.append("GROUP BY pLoja.produto.estilo ");
2091
                try {
2092
                        TypedQuery<RankingComprasTransferenciasEstiloDTO> query = getEntityManager().createQuery(sql.toString(), RankingComprasTransferenciasEstiloDTO.class);
2093
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()));
2094
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
2095
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
2096
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
2097
                        }
2098
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2099
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
2100
                        }
2101
                        if (VerificadorUtil.naoEstaNulo(modelo)) {
2102
                                query.setParameter("modelo", modelo);
2103
                        }
2104
                        query.setParameter("estiloProduto", parametrosConsulta.getEstilo());
2105
                        return query.getSingleResult();
2106
                } catch(NoResultException nr) {
2107
                        RankingComprasTransferenciasEstiloDTO rankingComprasTransferenciasEstilo = new RankingComprasTransferenciasEstiloDTO();
2108
                        rankingComprasTransferenciasEstilo.setEstilo(TipoEstiloProduto.parse(parametrosConsulta.getEstilo()));
2109
                        return rankingComprasTransferenciasEstilo;
2110
                } catch(Exception ex) {
2111
                        ex.printStackTrace();
2112
                        return null;
2113
                }
2114
        }
2115
 
2116
        private String adicionarConsultaEstoquePorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, String genero, Boolean consultarPorLoja) {
2117
                StringBuilder sql = new StringBuilder();
2118
                sql.append("SELECT SUM(pl.quantidadeEstoque) FROM ProdutoLoja pl ");
2119
                sql.append("WHERE pl.produto.modelo = :modelo ");
2120
                sql.append("AND pl.produto.estilo = :estiloProduto ");
2121
                if (consultarPorLoja) {
2122
                        sql.append("AND pl.loja = l ");
2123
                }
2124
                sql.append("AND pl.produto.genero = '" + genero + "' ");
2125
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2126
                        sql.append("AND pl.produto.tipo = :tipoProduto ");
2127
                }
2128
                return sql.toString().trim();
2129
        }
2130
 
2131
        private String adicionarConsultaPedidosCompraPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, String genero) {
2132
                StringBuilder sql = new StringBuilder();
2133
                sql.append("SELECT SUM(ppc.quantidadeParaComprar) FROM ProdutoPedidoCompra ppc ");
2134
                sql.append("WHERE ppc.status IN ('" + TipoStatusPedidoCompra.VERIFICADO.getValor() + "','" + TipoStatusPedidoCompra.SOLICITADO.getValor() + "') ");
2135
                sql.append("AND ppc.produto.modelo = :modelo ");
2136
                sql.append("AND ppc.produto.estilo = :estiloProduto ");
2137
                sql.append("AND ppc.produto.genero = '" + genero + "' ");
2138
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2139
                        sql.append("AND ppc.produto.tipo = :tipoProduto ");
2140
                }
2141
                return sql.toString().trim();
2142
        }
2143
 
2144
        @Override
2145
        public List<RankingComprasTransferenciasEstiloPorLoja> consultarEstoqueEeVendasEstiloPorLoja(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, Modelo modelo) {
2146
                StringBuilder sql = new StringBuilder();
2147
                sql.append("SELECT new br.com.ec.domain.dto.RankingComprasTransferenciasEstiloPorLoja(");
2148
                sql.append("l");
2149
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), true) + ")");
2150
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), true) + ")");
2151
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), true) + ")");
2152
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), true) + ")");
2153
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), true) + ")");
2154
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), true) + ")");
2155
                sql.append(", " + parametrosConsulta.getQuantidadeMinimaComprar());
2156
                // ADICIONAR QUANTIDADE JÁ SOLICITADO PARA COMPRA (VERIFICADO + SOLICITADO)
2157
                sql.append(") FROM Loja l ");
2158
                sql.append("WHERE l.ativo IS TRUE ");
2159
                sql.append("GROUP BY l, l.ordenador ");
2160
                sql.append("ORDER BY l.ordenador ");
2161
                try {
2162
                        TypedQuery<RankingComprasTransferenciasEstiloPorLoja> query = getEntityManager().createQuery(sql.toString(), RankingComprasTransferenciasEstiloPorLoja.class);
2163
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()));
2164
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
2165
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
2166
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
2167
                        }
2168
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
2169
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
2170
                        }
2171
                        if (VerificadorUtil.naoEstaNulo(modelo)) {
2172
                                query.setParameter("modelo", modelo);
2173
                        }
2174
                        query.setParameter("estiloProduto", parametrosConsulta.getEstilo());
2175
                        return query.getResultList();
2176
                } catch(Exception ex) {
2177
                        ex.printStackTrace();
2178
                        return null;
2179
                }
2180
        }
2181
*/
583 blopes 2182
 
229 espaco 2183
}