Subversion Repositories Integrator Subversion

Rev

Rev 259 | Rev 264 | Go to most recent revision | 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
 
3
import java.util.Date;
261 espaco 4
import java.util.List;
229 espaco 5
 
230 espaco 6
import javax.persistence.Query;
229 espaco 7
import javax.persistence.TypedQuery;
8
 
9
import org.springframework.stereotype.Repository;
10
 
11
import br.com.ec.core.util.DataUtils;
230 espaco 12
import br.com.ec.core.util.VerificadorUtil;
261 espaco 13
import br.com.ec.domain.dto.FormaPagamentoDTO;
230 espaco 14
import br.com.ec.domain.dto.consulta.ParametrosConsultaVendasDTO;
259 espaco 15
import br.com.ec.domain.model.Venda;
261 espaco 16
import br.com.ec.domain.shared.ConstantesSEC;
229 espaco 17
import br.com.ec.repository.SistemaAbstractRepository;
18
import br.com.ec.repository.VendaRepository;
19
 
20
@Repository
21
public class VendaRepositoryJpaImpl extends SistemaAbstractRepository<Venda> implements VendaRepository {
22
 
23
        @Override
24
        protected String getColunaOrdenadora() {
25
                return "dataVenda";
26
        }
27
 
28
        @Override
230 espaco 29
        public Integer obterQuantidadeDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
229 espaco 30
                StringBuilder sql = new StringBuilder();
31
                sql.append("SELECT COUNT(*) FROM Venda e ");
230 espaco 32
                sql.append("WHERE 1=1 ");
33
                setarStringParametrosConsulta(sql, parametrosConsultaVendasDTO);
229 espaco 34
                try {
230 espaco 35
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
36
                        setarQueryParametrosConsulta(query, parametrosConsultaVendasDTO);
37
                        return query.getSingleResult().intValue();
229 espaco 38
                } catch(Exception ex) {
39
                        ex.printStackTrace();
40
                        return null;
41
                }
42
        }
43
 
230 espaco 44
        @Override
45
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
46
                StringBuilder sql = new StringBuilder();
47
                sql.append("SELECT SUM(l.valorVenda) FROM Venda e ");
48
                sql.append("LEFT JOIN e.listaLancamentos l ");
49
                sql.append("WHERE l.ativo IS TRUE ");
50
                setarStringParametrosConsulta(sql, parametrosConsultaVendasDTO);
51
                try {
52
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
53
                        setarQueryParametrosConsulta(query, parametrosConsultaVendasDTO);
54
                        Double total = query.getSingleResult();
55
                        if (VerificadorUtil.estaNulo(total)) {
56
                                return new Double(0.0);
57
                        }
58
                        return total;
59
                } catch(Exception ex) {
60
                        ex.printStackTrace();
61
                        return null;
62
                }
63
        }
64
 
65
        @Override
66
        public Double obterValorDeCuponsUtilizadosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
67
                StringBuilder sql = new StringBuilder();
68
                sql.append("SELECT SUM(p.valorPagamento) FROM VendaFormaPagamento p ");
69
                sql.append("LEFT JOIN p.venda e ");
70
                sql.append("WHERE p.formaPagamento.codigo = 16 ");
71
                setarStringParametrosConsulta(sql, parametrosConsultaVendasDTO);
72
//              parametrosConsulta.setIndicadorComissionado(null);
73
//              parametrosConsulta.setTipoProduto(null);
74
                try {
75
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
76
                        setarQueryParametrosConsulta(query, parametrosConsultaVendasDTO);
77
                        Double total = query.getSingleResult();
78
                        if (VerificadorUtil.estaNulo(total)) {
79
                                return new Double(0.0);
80
                        }
81
                        return total;
82
                } catch(Exception ex) {
83
                        ex.printStackTrace();
84
                        return null;
85
                }
86
        }
87
 
88
        private void setarStringParametrosConsulta(StringBuilder sql, ParametrosConsultaVendasDTO parametros) {
89
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialLoja())) {
90
                        sql.append("AND e.loja.sequencial = :sequencialLoja ");
91
                }
253 espaco 92
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoSituacaoVenda())) {
230 espaco 93
                        sql.append("AND e.tipoSituacao = :tipoSituacao ");
94
                }
253 espaco 95
                /*
230 espaco 96
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getVendedor())) {
97
                        sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
98
                }
99
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicacao())) {
100
                        sql.append("AND e.indicacao.sequencial = :sequencialIndicacao ");
101
                }
102
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicadorComissionado())) {
103
                        sql.append("AND l.produto.indicadorComissionado = :indicadorComissionado ");
104
                }
105
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoProduto())) {
106
                        sql.append("AND l.produto.tipo = :tipoProduto ");
107
                }
108
                //TODO: VERIFICAR LANÇAMENTOS COM MAIS PAGAMENTOS QUE LANÇAMENTOS
109
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSituacaoFinanceiraVenda())) {
110
                        if (parametros.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.NENHUMA.getValor())) {
111
                                sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e) = 0 ");
112
//                                      sql.append("AND ((SELECT COUNT(vf) FROM VendaFormaPagamento vf WHERE vf.venda = e) > (SELECT COUNT(cr) FROM ContaAReceber cr WHERE cr.venda = e)) ");
113
                        }
114
                        if (parametros.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.QUITADO.getValor())) {
115
                                sql.append("AND (SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) = 0 ");
116
                                sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) > 0 ");
117
                        }
118
                        if (parametros.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.PENDENCIAS.getValor())) {
119
                                sql.append("AND ((SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) > 0 ");
120
                                sql.append("OR (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) = 0) ");
121
                        }
122
                }
123
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getFormaPagamento())) {
124
                        sql.append("AND (SELECT COUNT(p) FROM VendaFormaPagamento p WHERE p.venda = e AND p.formaPagamento.codigo = :codigoFormaPagamento) > 0 ");
125
                }
126
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getBandeiraCartao())) {
127
                        sql.append("AND (SELECT COUNT(b) FROM VendaFormaPagamento b WHERE b.venda = e AND b.bandeiraCartao.codigo = :codigoBandeiraCartao) > 0 ");
128
                }
129
                */
130
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialVenda())) {
131
                        sql.append("AND e.sequencial = :sequencialVenda ");
261 espaco 132
                } else if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataSelecionada())
133
                                || VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataInicial())
134
                                || VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataFinal())) {
230 espaco 135
                        sql.append("AND e.dataVenda >= :dataInicial ");
136
                        sql.append("AND e.dataVenda <= :dataFinal ");
137
                }
138
                /*
139
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getCodigoCupom())) {
140
                        sql.append("AND (SELECT COUNT(cl) FROM Lancamento cl WHERE cl.venda = e AND cl.cupom.codigo = :codigoCupom) > 0) ");
141
                }
142
                */
143
        }
144
 
145
        private void setarQueryParametrosConsulta(Query query, ParametrosConsultaVendasDTO parametros) {
146
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialLoja())) {
147
                        query.setParameter("sequencialLoja", parametros.getSequencialLoja());
148
                }
253 espaco 149
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoSituacaoVenda())) {
150
                        query.setParameter("tipoSituacao", parametros.getTipoSituacaoVenda());
151
                }
230 espaco 152
                /*
153
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getVendedor())) {
154
                        query.setParameter("sequencialVendedor", parametros.getVendedor().getSequencial());
155
                }
156
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicacao())) {
157
                        query.setParameter("sequencialIndicacao", parametros.getIndicacao().getSequencial());
158
                }
159
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getIndicadorComissionado())) {
160
                        query.setParameter("indicadorComissionado", parametros.getIndicadorComissionado());
161
                }
162
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getTipoProduto())) {
163
                        query.setParameter("tipoProduto", parametros.getTipoProduto());
164
                }
165
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getFormaPagamento())) {
166
                        query.setParameter("codigoFormaPagamento", parametros.getFormaPagamento().getCodigo());
167
                }
168
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getBandeiraCartao())) {
169
                        query.setParameter("codigoBandeiraCartao", parametros.getBandeiraCartao().getCodigo());
170
                }
171
                 */
172
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getSequencialVenda())) {
173
                        query.setParameter("sequencialVenda", parametros.getSequencialVenda());
261 espaco 174
                } else if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataInicial())
175
                                && VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataFinal())) {
176
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(parametros.getParametrosPeriodoDTO().getDataInicial());
177
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(parametros.getParametrosPeriodoDTO().getDataFinal());
230 espaco 178
                        query.setParameter("dataInicial", dataInicial);
179
                        query.setParameter("dataFinal", dataFinal);
261 espaco 180
                } else if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getParametrosPeriodoDTO().getDataSelecionada())) {
181
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(parametros.getParametrosPeriodoDTO().getDataSelecionada());
182
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(parametros.getParametrosPeriodoDTO().getDataSelecionada());
230 espaco 183
                        query.setParameter("dataInicial", dataInicial);
184
                        query.setParameter("dataFinal", dataFinal);
185
                }
186
                /*
187
                if (VerificadorUtil.naoEstaNuloOuVazio(parametros.getCodigoCupom())) {
188
                        query.setParameter("codigoCupom", parametros.getCodigoCupom());
189
                }
190
                */
191
        }
192
 
229 espaco 193
        /*
194
        private void setarParametrosStringConsultarVendaPorLojaEePeriodo(StringBuilder sql, Venda venda, Date dataInicial, Date dataFinal) {
195
                setarStringParametrosConsultar(sql, venda);
196
                if (VerificadorUtil.naoEstaNuloOuVazio(dataInicial) && VerificadorUtil.naoEstaNuloOuVazio(dataFinal)) {
197
                        sql.append("AND e.dataVenda >= :dataInicial AND e.dataVenda <= :dataFinal ");
198
                }
199
        }
200
        */
201
/*
202
        @Override
203
        protected void setarStringParametrosConsultar(StringBuilder sql, Venda venda) {
204
                if (VerificadorUtil.naoEstaNuloOuVazio(venda)) {
205
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getSequencialDaLoja())) {
206
                                sql.append("AND e.loja.sequencial = :sequencialLoja ");
207
                        }
208
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getVendedor())) {
209
                                sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
210
                        }
211
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getIndicacao())) {
212
                                sql.append("AND e.indicacao.sequencial = :sequencialIndicacao ");
213
                        }
214
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getTipoSituacao())) {
215
                                sql.append("AND e.tipoSituacao = :tipoSituacao ");
216
                        }
217
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getDataVenda())) {
218
                                sql.append("AND e.dataVenda >= :dataInicial ");
219
                                sql.append("AND e.dataVenda <= :dataFinal ");
220
                        }
221
                }
222
        }
223
 
224
        @Override
225
        protected void setarQueryParametrosConsultar(Query query, Venda venda) {
226
                if (VerificadorUtil.naoEstaNuloOuVazio(venda)) {
227
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getSequencialDaLoja())) {
228
                                query.setParameter("sequencialLoja", venda.getSequencialDaLoja());
229
                        }
230
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getSequencialDoVendedor())) {
231
                                query.setParameter("sequencialVendedor", venda.getSequencialDoVendedor());
232
                        }
233
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getIndicacao())) {
234
                                query.setParameter("sequencialIndicacao", venda.getIndicacao());
235
                        }
236
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getTipoSituacao())) {
237
                                query.setParameter("tipoSituacao", venda.getTipoSituacao());
238
                        }
239
                        if (VerificadorUtil.naoEstaNuloOuVazio(venda.getDataVenda())) {
240
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(venda.getDataVenda());
241
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(venda.getDataVenda());
242
                                query.setParameter("dataInicial", dataInicial);
243
                                query.setParameter("dataFinal", dataFinal);
244
                        }
245
                }
246
        }
247
 
248
        @Override
249
        public List<Venda> consultarVendasPorDemanda(ParametrosConsulta<Venda> parametrosConsulta, Integer primeiroRegistro,
250
                        Integer tamanhoPagina, String sortField, String orderSort, Map<String, Object> filters) {
251
                StringBuilder sql = new StringBuilder();
252
                sql.append("SELECT DISTINCT e FROM Venda e ");
253
                sql.append("LEFT JOIN FETCH e.listaLancamentos l ");
254
                sql.append("LEFT JOIN FETCH e.listaVendaFormaPagamentos p ");
255
                sql.append("WHERE 1=1 ");
256
 
257
                try {
258
                        setarStringParametrosConsulta(sql, parametrosConsulta);
259
                        sql.append("ORDER BY e.dataVenda");
260
                        TypedQuery<Venda> query = (TypedQuery<Venda>) getEntityManager().createQuery(sql.toString(), Venda.class);
261
                        setarQueryParametrosConsulta(query, parametrosConsulta);
262
 
263
                        return query.setFirstResult(primeiroRegistro).setMaxResults(tamanhoPagina).getResultList();
264
                } catch(Exception ex) {
265
                        ex.printStackTrace();
266
                        return null;
267
                }
268
        }
269
 
270
        @Override
271
        public List<Venda> consultarVendaPorParametros(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
272
                StringBuilder sql = new StringBuilder();
273
                sql.append("SELECT DISTINCT e FROM Venda e ");
274
                sql.append("LEFT JOIN FETCH e.listaLancamentos l ");
275
                sql.append("LEFT JOIN FETCH e.listaVendaFormaPagamentos p ");
276
                sql.append("WHERE 1=1 ");
277
 
278
                try {
279
                        setarStringParametrosConsulta(sql, parametrosConsultaVendas);
280
                        sql.append("ORDER BY e.dataVenda");
281
                        TypedQuery<Venda> query = (TypedQuery<Venda>) getEntityManager().createQuery(sql.toString(), Venda.class);
282
                        setarQueryParametrosConsulta(query, parametrosConsultaVendas);
283
                        return query.getResultList();
284
                } catch(Exception ex) {
285
                        ex.printStackTrace();
286
                        return null;
287
                }
288
        }
289
 
290
        @Override
291
        public Venda detalharVenda(Venda venda) {
292
                StringBuilder jpql = new StringBuilder();
293
                try {
294
                        jpql.append("SELECT c FROM Venda c ");
295
                        //jpql.append("LEFT JOIN FETCH c.listaPedidos p ");
296
                        //jpql.append("LEFT JOIN FETCH c.listaVendas v ");
297
                        jpql.append("WHERE c = :venda");
298
                        return getEntityManager().createQuery(jpql.toString(), Venda.class).setParameter("venda", venda).getSingleResult();
299
                } catch (NoResultException e) {
300
                        return null;
301
                }
302
        }
303
 
304
        @Override
305
        public Venda detalharVendaCompleta(Venda venda) {
306
                StringBuilder jpql = new StringBuilder();
307
                try {
308
                        jpql.append("SELECT c FROM Venda c ");
309
                        jpql.append("LEFT JOIN FETCH c.listaLancamentos l ");
310
                        jpql.append("LEFT JOIN FETCH c.listaVendaFormaPagamentos p ");
311
                        jpql.append("WHERE c = :venda");
312
                        return getEntityManager().createQuery(jpql.toString(), Venda.class).setParameter("venda", venda).getSingleResult();
313
                } catch (NoResultException e) {
314
                        return null;
315
                }
316
        }
317
 
318
        @Override
319
        public List<Venda> consultarVendasDoDia(Long sequencialLoja, Date data) {
320
                StringBuilder sql = new StringBuilder();
321
                sql.append("SELECT DISTINCT v FROM Venda v ");
322
                sql.append("LEFT JOIN FETCH v.listaVendaFormaPagamentos p ");
323
                sql.append("WHERE v.loja.sequencial = :sequencialLoja ");
324
                sql.append("AND v.dataVenda >= :dataInicial AND v.dataVenda <= :dataFinal ");
325
                try {
326
                        sql.append("ORDER BY v.dataVenda");
327
                        return getEntityManager().createQuery(sql.toString(), Venda.class)
328
                                                .setParameter("sequencialLoja", sequencialLoja)
329
                                                .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(data))
330
                                                .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(data))
331
                                                .getResultList();
332
                } catch(Exception ex) {
333
                        ex.printStackTrace();
334
                        return null;
335
                }
336
        }
337
 
338
 
339
        private void setarParametrosQueryConsultarVendaPorLojaEePeriodo(Query query, Venda venda, Date dataInicial, Date dataFinal) {
340
                setarQueryParametrosConsultar(query, venda);
341
                if (VerificadorUtil.naoEstaNuloOuVazio(dataInicial) && VerificadorUtil.naoEstaNuloOuVazio(dataFinal)) {
342
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial));
343
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
344
                }
345
        }
346
 
347
        @Override
348
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
349
                StringBuilder sql = new StringBuilder();
350
                sql.append("SELECT SUM(l.valorVenda) FROM Venda e ");
351
                sql.append("LEFT JOIN e.listaLancamentos l ");
352
                sql.append("WHERE l.ativo IS TRUE ");
353
                try {
354
                        setarStringParametrosConsulta(sql, parametrosConsulta);
355
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
356
                        setarQueryParametrosConsulta(query, parametrosConsulta);
357
                        Double total = query.getSingleResult();
358
                        if (VerificadorUtil.estaNulo(total)) {
359
                                return new Double(0.0);
360
                        }
361
                        return total;
362
                } catch(Exception ex) {
363
                        ex.printStackTrace();
364
                        return null;
365
                }
366
        }
367
 
368
        @Override
369
        public Double obterValorDeCuponsUtilizadosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
370
                StringBuilder sql = new StringBuilder();
371
                sql.append("SELECT SUM(p.valorPagamento) FROM VendaFormaPagamento p ");
372
                sql.append("LEFT JOIN p.venda e ");
373
                sql.append("WHERE p.formaPagamento.codigo = 16 ");
374
 
375
                parametrosConsulta.setIndicadorComissionado(null);
376
                parametrosConsulta.setTipoProduto(null);
377
 
378
                setarStringParametrosConsulta(sql, parametrosConsulta);
379
*/             
380
                /*
381
                sql.append("AND (SELECT COUNT(l) FROM Lancamento l WHERE l.venda = e AND l.ativo = true) > 0 ");
382
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getLoja())) {
383
                        sql.append("AND e.loja.sequencial = :sequencialLoja ");
384
                }
385
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getVendedor())) {
386
                        sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
387
                }
388
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataVendas())
389
                                || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicial())
390
                                || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinal())) {
391
                        sql.append("AND e.dataVenda >= :dataInicial ");
392
                        sql.append("AND e.dataVenda <= :dataFinal ");
393
                }
394
                */
395
/*     
396
                try {
397
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
398
                        setarQueryParametrosConsulta(query, parametrosConsulta);
399
*/                     
400
                        /*
401
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getLoja())) {
402
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
403
                        }
404
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getVendedor())) {
405
                                query.setParameter("sequencialVendedor", parametrosConsulta.getVendedor().getSequencial());
406
                        }
407
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicial())
408
                                        && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinal())) {
409
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial());
410
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal());
411
                                query.setParameter("dataInicial", dataInicial);
412
                                query.setParameter("dataFinal", dataFinal);
413
                        } else if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataVendas())) {
414
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataVendas());
415
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataVendas());
416
                                query.setParameter("dataInicial", dataInicial);
417
                                query.setParameter("dataFinal", dataFinal);
418
                        }
419
                        */
420
/*     
421
                        Double total = query.getSingleResult();
422
                        if (VerificadorUtil.estaNulo(total)) {
423
                                return new Double(0.0);
424
                        }
425
                        return total;
426
                } catch(Exception ex) {
427
                        ex.printStackTrace();
428
                        return null;
429
                }
430
        }
431
 
432
        @Override
433
        public Double obterValorTotalDeDescontosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
434
                StringBuilder sql = new StringBuilder();
435
                sql.append("SELECT SUM(l.valorVarejo - l.valorVenda) FROM Venda e ");
436
                sql.append("LEFT JOIN e.listaLancamentos l ");
437
                sql.append("WHERE l.ativo IS TRUE ");
438
                try {
439
                        setarStringParametrosConsulta(sql, parametrosConsulta);
440
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
441
                        setarQueryParametrosConsulta(query, parametrosConsulta);
442
                        Double total = query.getSingleResult();
443
                        if (VerificadorUtil.estaNulo(total)) {
444
                                return new Double(0.0);
445
                        }
446
                        return total;
447
                } catch(Exception ex) {
448
                        ex.printStackTrace();
449
                        return null;
450
                }
451
        }
261 espaco 452
        */
229 espaco 453
        @Override
261 espaco 454
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(ParametrosConsultaVendasDTO parametrosConsultaVendas, List<FormaPagamentoDTO> formasDePagamento) {
229 espaco 455
                StringBuilder sql = new StringBuilder();
456
                sql.append("SELECT SUM(v.valorPagamento) FROM VendaFormaPagamento v ");
457
                sql.append("LEFT JOIN v.venda e ");
458
                sql.append("LEFT JOIN v.formaPagamento f ");
261 espaco 459
                sql.append("WHERE v.formaPagamento.codigo != ");
460
                sql.append(ConstantesSEC.FormasDePagamento.FORMAPAGAMENTO_CUPOM);
461
                sql.append(" ");
229 espaco 462
                try {
463
                        sql = setarParametrosFormasDePagamento(sql, formasDePagamento);
464
                        setarStringParametrosConsulta(sql, parametrosConsultaVendas);
465
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
466
                        setarQueryParametrosConsulta(query, parametrosConsultaVendas);
467
 
468
                        Double total = query.getSingleResult();
469
                        if (VerificadorUtil.estaNulo(total)) {
470
                                return new Double(0.0);
471
                        }
472
                        return total;
473
                } catch(Exception ex) {
474
                        ex.printStackTrace();
475
                        return null;
476
                }
477
        }
478
 
261 espaco 479
        private StringBuilder setarParametrosFormasDePagamento(StringBuilder sql, List<FormaPagamentoDTO> formasPagamento) {
480
//              if (VerificadorUtil.isListaComElementos(formasPagamento)) {
481
                if (VerificadorUtil.naoEstaNuloOuVazio(formasPagamento)) {
229 espaco 482
                        sql.append("AND v.formaPagamento.codigo IN (");
261 espaco 483
                        for (FormaPagamentoDTO formaPagamento : formasPagamento) {
484
                                if (!formaPagamento.formaPagamentoEhCupom()) {
485
                                        sql.append(formaPagamento.getCodigo() + ",");
486
                                }
229 espaco 487
                        }
488
                        sql.append(") ");
489
                }
490
                return new StringBuilder(sql.toString().replace(",)", ")"));
491
        }
261 espaco 492
        /*
229 espaco 493
        @Override
494
        public Double obterValorTotalLiquidoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
495
                StringBuilder sql = new StringBuilder();
496
                sql.append("SELECT SUM(e.valor) FROM Parcela e ");
497
                sql.append("INNER JOIN e.conta c ");
498
                sql.append("WHERE e.indicadorAtivo IS TRUE ");
499
                try {
500
                        setarParametrosStringConsultarValorTotalLiquidoVendaPorLojaEePeriodo(sql, parametrosConsulta);
501
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
502
                        setarParametrosQueryConsultarValorTotalLiquidoVendaPorLojaEePeriodo(query, parametrosConsulta);
503
 
504
                        Double total = query.getSingleResult();
505
                        if (VerificadorUtil.estaNulo(total)) {
506
                                return new Double(0.0);
507
                        }
508
                        return total;
509
                } catch(Exception ex) {
510
                        ex.printStackTrace();
511
                        return null;
512
                }
513
        }
514
 
515
        private void setarParametrosStringConsultarValorTotalLiquidoVendaPorLojaEePeriodo(StringBuilder sql, ParametrosConsultaVendasDTO parametrosConsulta) {
516
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getLoja())) {
517
                        sql.append("AND e.conta.venda.loja.sequencial = :sequencialLoja ");
518
                }
519
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getVendedor())) {
520
                        sql.append("AND e.conta.venda.vendedor.sequencial = :sequencialVendedor ");
521
                }
522
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getIndicacao())) {
523
                        sql.append("AND e.conta.venda.indicacao.sequencial = :sequencialIndicacao ");
524
                }
525
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicial()) && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinal())) {
526
                        sql.append("AND e.conta.venda.dataVenda >= :dataInicial AND e.conta.venda.dataVenda <= :dataFinal ");
527
                }
528
        }
529
 
530
        private void setarParametrosQueryConsultarValorTotalLiquidoVendaPorLojaEePeriodo(Query query, ParametrosConsultaVendasDTO parametrosConsulta) {
531
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getLoja())) {
532
                        query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
533
                }
534
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getVendedor())) {
535
                        query.setParameter("sequencialVendedor", parametrosConsulta.getVendedor().getSequencial());
536
                }
537
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getIndicacao())) {
538
                        query.setParameter("sequencialIndicacao", parametrosConsulta.getIndicacao().getSequencial());
539
                }
540
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataInicial()) && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getDataFinal())) {
541
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()));
542
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
543
                }
544
        }
545
 
546
        @Override
547
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
548
                StringBuilder sql = new StringBuilder();
549
                sql.append("SELECT COUNT(l) FROM Venda e ");
550
                sql.append("LEFT JOIN e.listaLancamentos l ");
551
                sql.append("WHERE l.ativo IS TRUE ");
552
                try {
553
                        setarStringParametrosConsulta(sql, parametrosConsulta);
554
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
555
                        setarQueryParametrosConsulta(query, parametrosConsulta);
556
                        return query.getSingleResult().intValue();
557
                } catch(Exception ex) {
558
                        ex.printStackTrace();
559
                        return null;
560
                }
561
        }
562
 
563
        @Override
564
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodoNaoVivo(ParametrosConsultaVendasDTO parametrosConsulta) {
565
                StringBuilder sql = new StringBuilder();
566
                sql.append("SELECT COUNT(l) FROM Venda e ");
567
                sql.append("LEFT JOIN e.listaLancamentos l ");
568
                sql.append("WHERE l.ativo IS TRUE AND l.produto.tipo not like 'V' ");
569
                try {
570
                        setarStringParametrosConsulta(sql, parametrosConsulta);
571
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
572
                        setarQueryParametrosConsulta(query, parametrosConsulta);
573
                        return query.getSingleResult().intValue();
574
                } catch(Exception ex) {
575
                        ex.printStackTrace();
576
                        return null;
577
                }
578
        }
579
 
580
        @Override
581
        public Double obterValorProdutosUtilizadosEmVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
582
                StringBuilder sql = new StringBuilder();
583
                sql.append("SELECT SUM(l.valorCompra) FROM Venda e ");
584
                sql.append("LEFT JOIN e.listaLancamentos l ");
585
                sql.append("WHERE l.ativo IS TRUE ");
586
                try {
587
                        setarStringParametrosConsulta(sql, parametrosConsulta);
588
                        TypedQuery<Double> query = getEntityManager().createQuery(sql.toString(), Double.class);
589
                        setarQueryParametrosConsulta(query, parametrosConsulta);
590
                        Double total = query.getSingleResult();
591
                        if (VerificadorUtil.estaNulo(total)) {
592
                                return new Double(0.0);
593
                        }
594
                        return total;
595
                } catch(Exception ex) {
596
                        ex.printStackTrace();
597
                        return null;
598
                }
599
        }
600
 
601
        @Override
602
        public GraficoAcumuladoDTO consultarGrafico(String mes, String ano) {
603
                StringBuilder sql = new StringBuilder();
604
                sql.append("SELECT ");
605
                Calendar data = DataUtils.obterCalendario(DataUtils.obterData(1, new Integer(mes)-1, new Integer(ano)));
606
                int qntMaximaDias = data.getActualMaximum(Calendar.DAY_OF_MONTH);
607
                for (int i = 1; i <= qntMaximaDias; i++) {
608
                        String dia = String.format("%02d", i);
609
                        sql.append("SUM(D.DIA" + dia + ") AS dia" + dia);
610
                        if (i < qntMaximaDias) {
611
                                sql.append(", ");
612
                        } else {
613
                                sql.append(" ");
614
                        }
615
                }
616
                sql.append(" FROM ");
617
                sql.append("(SELECT ");
618
                for (int i = 1; i <= qntMaximaDias; i++) {
619
                        String dia = String.format("%02d", i);
620
                        sql.append("CASE date(v.dth_venda) WHEN '" + ano + "-" + mes + "-" + dia + "' THEN SUM(l.val_venda) END AS DIA" + dia);
621
                        if (i < qntMaximaDias) {
622
                                sql.append(", ");
623
                        } else {
624
                                sql.append(" ");
625
                        }
626
                }
627
                sql.append("FROM sc_sec.sec_lancamento l, sc_sec.sec_venda v ");
628
                sql.append("WHERE l.seq_venda = v.seq_venda AND l.ind_ativo is true ");
629
                sql.append("GROUP BY date(v.dth_venda) ");
630
                sql.append(") AS D ");
631
 
632
                try {
633
                        Query query = getEntityManager().createNativeQuery(sql.toString());
634
                        Object[] valores = new Object[31];
635
                        Object[] resultado = (Object[]) query.getSingleResult();
636
                        for (int i = 0; i < resultado.length; i++) {
637
                                valores[i] = resultado[i];
638
                        }
639
                        GraficoAcumuladoDTO grafico = new GraficoAcumuladoDTO();
640
                        grafico.setDIA_01(retornarValorEmString(valores[0]));
641
                        grafico.setDIA_02(retornarValorEmString(valores[1]));
642
                        grafico.setDIA_03(retornarValorEmString(valores[2]));
643
                        grafico.setDIA_04(retornarValorEmString(valores[3]));
644
                        grafico.setDIA_05(retornarValorEmString(valores[4]));
645
                        grafico.setDIA_06(retornarValorEmString(valores[5]));
646
                        grafico.setDIA_07(retornarValorEmString(valores[6]));
647
                        grafico.setDIA_08(retornarValorEmString(valores[7]));
648
                        grafico.setDIA_09(retornarValorEmString(valores[8]));
649
                        grafico.setDIA_10(retornarValorEmString(valores[9]));
650
                        grafico.setDIA_11(retornarValorEmString(valores[10]));
651
                        grafico.setDIA_12(retornarValorEmString(valores[11]));
652
                        grafico.setDIA_13(retornarValorEmString(valores[12]));
653
                        grafico.setDIA_14(retornarValorEmString(valores[13]));
654
                        grafico.setDIA_15(retornarValorEmString(valores[14]));
655
                        grafico.setDIA_16(retornarValorEmString(valores[15]));
656
                        grafico.setDIA_17(retornarValorEmString(valores[16]));
657
                        grafico.setDIA_18(retornarValorEmString(valores[17]));
658
                        grafico.setDIA_19(retornarValorEmString(valores[18]));
659
                        grafico.setDIA_20(retornarValorEmString(valores[19]));
660
                        grafico.setDIA_21(retornarValorEmString(valores[20]));
661
                        grafico.setDIA_22(retornarValorEmString(valores[21]));
662
                        grafico.setDIA_23(retornarValorEmString(valores[22]));
663
                        grafico.setDIA_24(retornarValorEmString(valores[23]));
664
                        grafico.setDIA_25(retornarValorEmString(valores[24]));
665
                        grafico.setDIA_26(retornarValorEmString(valores[25]));
666
                        grafico.setDIA_27(retornarValorEmString(valores[26]));
667
                        grafico.setDIA_28(retornarValorEmString(valores[27]));
668
                        grafico.setDIA_29(retornarValorEmString(valores[28]));
669
                        grafico.setDIA_30(retornarValorEmString(valores[29]));
670
                        grafico.setDIA_31(retornarValorEmString(valores[30]));
671
                        return grafico;
672
                } catch(Exception ex) {
673
                        return null;
674
                }
675
        }
676
 
677
        private Double retornarValorEmString(Object objeto) {
678
                try {
679
                        return new Double(objeto.toString());
680
                } catch (Exception e) {
681
                        return new Double(0.0);
682
                }
683
        }
684
 
685
        private String adicionarEstoque(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
686
                StringBuilder sql = new StringBuilder();
687
                sql.append(", (SELECT SUM(pl.quantidadeEstoque) FROM ProdutoLoja pl WHERE pl.produto = l.produto ");
688
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
689
                        sql.append("AND pl.loja.sequencial = :sequencialLoja ");
690
                }
691
                sql.append(")");
692
                return sql.toString();
693
        }
694
*/
695
        /*private String adicionarConsumoMedioDiario(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
696
                StringBuilder sql = new StringBuilder();
697
                sql.append(", (SELECT COUNT(*) FROM Lancamento lc WHERE lc.produto = l.produto AND lc.ativo = true ");
698
                sql.append("WHERE lc.venda.dataVenda >= :dataInicial AND lc.venda.dataVenda <= :dataFinal) ");
699
//              String dataAnterior = DataUtil.retornarDataFormatadaEmFormatoTexto("yyyy-MM-dd", DataUtils.acrescentarMeses(DataUtils.getDataAtual(), -2));
700
//              sql.append("AND lc.venda.dataVenda >= :dataDoisMesesAnterior) ");
701
                return sql.toString();
702
        }*/
703
/*     
704
        private String adicionarSolicitacaoCompraProduto() {
705
                StringBuilder sql = new StringBuilder();
706
//              sql.append(", (SELECT COUNT(*) > 0 FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
707
//              sql.append(", (SELECT ppc.status, ppc.quantidadeParaComprar FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
708
//              sql.append(", (SELECT (ppc) FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
709
                sql.append(", (SELECT ppc.status FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
710
                sql.append(", (SELECT ppc.quantidadeParaComprar FROM ProdutoPedidoCompra ppc WHERE ppc.produto = l.produto)");
711
                return sql.toString();
712
        }
713
 
714
        @Override
715
        public List<RankingProdutoDTO> consultarProdutosVendidos(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
716
                StringBuilder sql = new StringBuilder();
717
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getTipoOrdenacao())) {
718
                        if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.DATA.getValor())) {
719
                                sql.append("SELECT new br.com.ec.domain.dto.RankingProdutoDTO(l.produto, l.venda, l.valorVenda, l.valorVarejo - l.valorVenda");
720
                                sql.append(adicionarEstoque(parametrosConsulta));
721
                                sql.append(adicionarSolicitacaoCompraProduto());
722
                                sql.append(") FROM Lancamento l ");
723
                        } else {
724
                                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)");
725
                                sql.append(adicionarEstoque(parametrosConsulta));
726
                                sql.append(adicionarSolicitacaoCompraProduto());
727
                                sql.append(") FROM Lancamento l ");
728
                        }
729
                } else {
730
                        sql.append("SELECT new br.com.ec.domain.dto.RankingProdutoDTO(l.produto, l.venda, l.valorVenda, l.valorVarejo - l.valorVenda");
731
                        sql.append(adicionarEstoque(parametrosConsulta));
732
                        sql.append(adicionarSolicitacaoCompraProduto());
733
                        sql.append(") FROM Lancamento l ");
734
                }
735
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
736
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
737
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
738
                }
739
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
740
                        sql.append("AND l.produto.tipo = :tipoProduto ");
741
                }
742
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
743
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
744
                                sql.append("AND l.produto.codigo = :codigo ");
745
                        }
746
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
747
                                sql.append("AND ");
748
                                sql.append(sqlConsultarSemAcento("l.produto.descricao"));
749
                                sql.append(" like upper(:descricao) ");
750
                        }
751
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
752
                                sql.append("AND l.produto.estilo = :tipoEstilo ");
753
                        }
754
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
755
                                sql.append("AND l.produto.cor = :tipoCor ");
756
                        }
757
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
758
                                sql.append("AND l.produto.genero = :tipoGenero ");
759
                        }
760
                }
761
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
762
                        sql.append("AND l.produto.modelo.marca.sequencial = :sequencialMarcaDoModelo ");
763
                }
764
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
765
                        sql.append("AND l.produto.modelo.sequencial = :sequencialModelo ");
766
                }
767
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getFornecedor())) {
768
                        sql.append("AND :fornecedor in (SELECT fp.fornecedor FROM FornecedorProduto fp WHERE fp.produto.sequencial = l.produto.sequencial) ");
769
                }
770
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getVendedor())) {
771
                        sql.append("AND l.venda.vendedor = :vendedor ");
772
                }
773
 
774
                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getTipoOrdenacao())) {
775
                        if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.DATA.getValor())) {
776
                                sql.append("ORDER BY l.venda.dataVenda DESC ");
777
                        } else {
778
                                sql.append("GROUP BY l.produto ");
779
                                if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.LUCRO.getValor())) {
780
                                        sql.append("ORDER BY SUM(l.valorVenda - l.valorCompra) DESC ");
781
                                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
782
                                        sql.append("ORDER BY COUNT(l.produto) DESC ");
783
                                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.VALOR_VENDIDO.getValor())) {
784
                                        sql.append("ORDER BY SUM(l.valorVenda) DESC ");
785
                                }
786
                        }
787
                } else {
788
                        sql.append("ORDER BY l.venda.dataVenda DESC ");
789
                }
790
                try {
791
                        TypedQuery<RankingProdutoDTO> query = getEntityManager().createQuery(sql.toString(), RankingProdutoDTO.class)
792
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
793
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()))
794
                                        .setMaxResults(parametrosConsulta.getQuantidadeProdutos());
795
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
796
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
797
                        }
798
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
799
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
800
                        }
801
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
802
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
803
                                        query.setParameter("codigo", parametrosConsulta.getProduto().getCodigoProdutoPadrao());
804
                                }
805
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
806
                                        query.setParameter("descricao", "%" + removerAcentuacao(parametrosConsulta.getProduto().getDescricao()) + "%");
807
                                }
808
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
809
                                        query.setParameter("tipoEstilo", parametrosConsulta.getProduto().getEstilo());
810
                                }
811
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
812
                                        query.setParameter("tipoCor", parametrosConsulta.getProduto().getCor());
813
                                }
814
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
815
                                        query.setParameter("tipoGenero", parametrosConsulta.getProduto().getGenero());
816
                                }
817
                        }
818
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
819
                                query.setParameter("sequencialMarcaDoModelo", parametrosConsulta.getMarca().getSequencial());
820
                        }
821
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
822
                                query.setParameter("sequencialModelo", parametrosConsulta.getModelo().getSequencial());
823
                        }
824
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getFornecedor())) {
825
                                query.setParameter("fornecedor", parametrosConsulta.getFornecedor());
826
                        }
827
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getVendedor())) {
828
                                query.setParameter("vendedor", parametrosConsulta.getVendedor());
829
                        }
830
*/
831
                        /*if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSomenteParaComprar())) {
832
                                query.setParameter("quantidadeMinimaComprar", parametrosConsulta.getQuantidadeMinimaComprar());
833
                        }*/
834
                        /*if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getTipoOrdenacao())) {
835
                                if (!parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.DATA.getValor())) {
836
                                        query.setParameter("dataDoisMesesAnterior", DataUtils.acrescentarMeses(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()), -2));
837
                                }
838
                        }*/
839
/*     
840
                        return query.getResultList();
841
                } catch(Exception ex) {
842
                        ex.printStackTrace();
843
                        return null;
844
                }
845
        }
846
 
847
        @Override
848
        public List<RankingProdutoDTO> consultarProdutosVendidosResumido(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
849
                StringBuilder sql = new StringBuilder();
850
                sql.append("SELECT CAST(l.seq_produto AS VARCHAR), COUNT(l.seq_produto) ");
851
                sql.append(adicionarEstoqueSqlNativo(parametrosConsulta));
852
                sql.append(" FROM sc_sec.sec_lancamento l ");
853
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = l.seq_venda ");
854
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
855
                sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = l.seq_produto ");
856
                sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
857
                sql.append("LEFT JOIN sc_sec.sec_marca ma ON ma.seq_marca = m.seq_marca ");
858
                sql.append("WHERE v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal ");
859
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
860
                        sql.append("AND lj.seq_loja = :sequencialLoja ");
861
                }
862
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
863
                        sql.append("AND p.tip_produto = :tipoProduto ");
864
                }
865
 
866
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
867
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
868
                                sql.append("AND p.seq_produto = :sequencialProduto ");
869
                        }
870
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
871
                                sql.append("AND p.cod_produto = :codigo ");
872
                        }
873
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
874
                                sql.append("AND ");
875
                                sql.append(sqlConsultarSemAcento("p.dsc_produto"));
876
                                sql.append(" like upper(:descricao) ");
877
                        }
878
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
879
                                sql.append("AND p.tip_estilo = :tipoEstilo ");
880
                        }
881
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
882
                                sql.append("AND p.tip_cor = :tipoCor ");
883
                        }
884
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
885
                                sql.append("AND p.tip_genero = :tipoGenero ");
886
                        }
887
                }
888
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
889
                        sql.append("AND ma.seq_marcal = :sequencialMarcaDoModelo ");
890
                }
891
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
892
                        sql.append("AND m.seq_modelo = :sequencialModelo ");
893
                }
894
 
895
                sql.append("GROUP BY l.seq_produto ");
896
//              if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
897
//                      sql.append("ORDER BY COUNT(l.seq_produto) DESC ");
898
//              }
899
                try {
900
                        Query query = getEntityManager().createNativeQuery(sql.toString())
901
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
902
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
903
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getPrimeiroRegistro())) {
904
                                if (parametrosConsulta.getPrimeiroRegistro() > 0) {
905
                                        query.setFirstResult(parametrosConsulta.getPrimeiroRegistro());
906
                                }
907
                        }
908
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTamanhoPagina())) {
909
                                if (parametrosConsulta.getTamanhoPagina() > 0) {
910
                                        query.setMaxResults(parametrosConsulta.getTamanhoPagina());
911
                                } else {
912
                                        query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
913
                                }
914
                        } else {
915
                                query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
916
                        }
917
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
918
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
919
                        }
920
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
921
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
922
                        }
923
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
924
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
925
                                        query.setParameter("sequencialProduto", parametrosConsulta.getProduto().getSequencial());
926
                                }
927
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
928
                                        query.setParameter("codigo", parametrosConsulta.getProduto().getCodigoProdutoPadrao());
929
                                }
930
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
931
                                        query.setParameter("descricao", "%" + removerAcentuacao(parametrosConsulta.getProduto().getDescricao()) + "%");
932
                                }
933
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
934
                                        query.setParameter("tipoEstilo", parametrosConsulta.getProduto().getEstilo());
935
                                }
936
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
937
                                        query.setParameter("tipoCor", parametrosConsulta.getProduto().getCor());
938
                                }
939
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
940
                                        query.setParameter("tipoGenero", parametrosConsulta.getProduto().getGenero());
941
                                }
942
                        }
943
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
944
                                query.setParameter("sequencialMarcaDoModelo", parametrosConsulta.getMarca().getSequencial());
945
                        }
946
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
947
                                query.setParameter("sequencialModelo", parametrosConsulta.getModelo().getSequencial());
948
                        }
949
                        List<Object[]> resultList = query.getResultList();
950
                        List<RankingProdutoDTO> produtos = new ArrayList<RankingProdutoDTO>();
951
                        for (Object[] objects : resultList) {
952
                                RankingProdutoDTO rankingProduto = new RankingProdutoDTO();
953
                                Produto produto = new Produto();
954
                                if (VerificadorUtil.naoEstaNulo(objects[0])) {
955
                                        produto.setSequencial(Long.parseLong(objects[0].toString()));
956
                                }
957
                                rankingProduto.setProduto(produto);
958
                                if (VerificadorUtil.naoEstaNulo(objects[1])) {
959
                                        rankingProduto.setQuantidadeVendas(Long.parseLong(objects[1].toString()));
960
                                }
961
                                if (VerificadorUtil.naoEstaNulo(objects[2])) {
962
                                        rankingProduto.setQuantidadeEstoque(Long.parseLong(objects[2].toString()));
963
                                }
964
                                produtos.add(rankingProduto);
965
                        }
966
                        return produtos;
967
                } catch(Exception ex) {
968
                        ex.printStackTrace();
969
                        return null;
970
                }
971
        }
972
 
973
        @Override
974
        public List<RankingProdutoDTO> consultarProdutosParaTransferir(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
975
                StringBuilder sql = new StringBuilder();
976
                sql.append("SELECT CAST(l.seq_produto AS VARCHAR) AS produto, COUNT(l.seq_produto) AS vendas ");
977
                sql.append(" FROM sc_sec.sec_lancamento l ");
978
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = l.seq_venda ");
979
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
980
                sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = l.seq_produto ");
981
                sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
982
                sql.append("LEFT JOIN sc_sec.sec_marca ma ON ma.seq_marca = m.seq_marca ");
983
                sql.append("WHERE ");
984
                sql.append(adicionarParametrosSqlNativo(parametrosConsulta));
985
                sql.append("GROUP BY l.seq_produto, ma.dsc_marca, m.dsc_modelo ");
986
                sql.append("HAVING ");
987
                for (Loja loja : parametrosConsulta.getLojasParaConsulta()) {
988
                        sql.append(adicionarHavingSqlNativo(parametrosConsulta, loja.getSequencial()));
989
                        sql.append(" OR ");
990
                }
991
                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 (");
992
                for (Loja loja : parametrosConsulta.getLojasParaConsulta()) {
993
                        sql.append(" ").append(loja.getSequencial()).append(", ");
994
                }
995
                sql.deleteCharAt(sql.length()-1);
996
                sql.deleteCharAt(sql.length()-1);
997
                sql.append(" )) = 0 ");
998
                sql.append("ORDER BY ma.dsc_marca, m.dsc_modelo ");
999
                try {
1000
                        Query query = getEntityManager().createNativeQuery(sql.toString())
1001
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
1002
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1003
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getPrimeiroRegistro())) {
1004
                                if (parametrosConsulta.getPrimeiroRegistro() > 0) {
1005
                                        query.setFirstResult(parametrosConsulta.getPrimeiroRegistro());
1006
                                }
1007
                        }
1008
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTamanhoPagina())) {
1009
                                if (parametrosConsulta.getTamanhoPagina() > 0) {
1010
                                        query.setMaxResults(parametrosConsulta.getTamanhoPagina());
1011
                                } else {
1012
                                        query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1013
                                }
1014
                        } else {
1015
                                query.setMaxResults(parametrosConsulta.getQuantidadeProdutos());
1016
                        }
1017
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1018
                                query.setParameter("sequencialLoja", parametrosConsulta.getLoja().getSequencial());
1019
                        }
1020
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1021
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1022
                        }
1023
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1024
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
1025
                                        query.setParameter("sequencialProduto", parametrosConsulta.getProduto().getSequencial());
1026
                                }
1027
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1028
                                        query.setParameter("codigo", parametrosConsulta.getProduto().getCodigoProdutoPadrao());
1029
                                }
1030
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1031
                                        query.setParameter("descricao", "%" + removerAcentuacao(parametrosConsulta.getProduto().getDescricao()) + "%");
1032
                                }
1033
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1034
                                        query.setParameter("tipoEstilo", parametrosConsulta.getProduto().getEstilo());
1035
                                }
1036
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1037
                                        query.setParameter("tipoCor", parametrosConsulta.getProduto().getCor());
1038
                                }
1039
                                if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1040
                                        query.setParameter("tipoGenero", parametrosConsulta.getProduto().getGenero());
1041
                                }
1042
                        }
1043
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1044
                                query.setParameter("sequencialMarcaDoModelo", parametrosConsulta.getMarca().getSequencial());
1045
                        }
1046
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1047
                                query.setParameter("sequencialModelo", parametrosConsulta.getModelo().getSequencial());
1048
                        }
1049
                        List<Object[]> resultList = query.getResultList();
1050
                        List<RankingProdutoDTO> produtos = new ArrayList<RankingProdutoDTO>();
1051
                        for (Object[] objects : resultList) {
1052
                                RankingProdutoDTO rankingProduto = new RankingProdutoDTO();
1053
                                Produto produto = new Produto();
1054
                                if (VerificadorUtil.naoEstaNulo(objects[0])) {
1055
                                        System.out.println(objects[0].toString());
1056
                                        produto.setSequencial(Long.parseLong(objects[0].toString()));
1057
                                }
1058
                                rankingProduto.setProduto(produto);
1059
                                produtos.add(rankingProduto);
1060
                        }
1061
                        return produtos;
1062
                } catch(Exception ex) {
1063
                        ex.printStackTrace();
1064
                        return null;
1065
                }
1066
        }
1067
 
1068
        private String adicionarVendasSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta, Long sequencialLoja) {
1069
                StringBuilder sql = new StringBuilder("");
1070
                sql.append(", (SELECT COUNT(lanc.seq_produto) FROM sc_sec.sec_lancamento lanc ");
1071
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = lanc.seq_venda ");
1072
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
1073
                sql.append("WHERE v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal ");
1074
                sql.append("AND lanc.seq_produto = l.seq_produto AND lj.seq_loja = ");
1075
                sql.append(sequencialLoja);
1076
                sql.append(" GROUP BY lanc.seq_produto) AS vendas" + sequencialLoja + " ");
1077
                return sql.toString();
1078
        }
1079
 
1080
        private String adicionarEstoqueSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta, Long sequencialLoja) {
1081
                StringBuilder sql = new StringBuilder();
1082
                sql.append(", (SELECT SUM(pl.qtd_estoque) FROM sc_sec.sec_produto_loja pl ");
1083
                sql.append("WHERE pl.seq_produto = l.seq_produto ");
1084
                sql.append("AND pl.seq_loja = ");
1085
                sql.append(sequencialLoja);
1086
                sql.append(") AS estoque" + sequencialLoja + " ");
1087
                return sql.toString();
1088
        }
1089
 
1090
        private String adicionarHavingSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta, Long sequencialLoja) {
1091
                StringBuilder sql = new StringBuilder();
1092
                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 = ");
1093
                sql.append(sequencialLoja);
1094
                sql.append(") - (");
1095
                sql.append("SELECT COUNT(lanc.seq_produto) FROM sc_sec.sec_lancamento lanc ");
1096
                sql.append("LEFT JOIN sc_sec.sec_venda v ON v.seq_venda = lanc.seq_venda ");
1097
                sql.append("LEFT JOIN sc_sec.sec_loja lj ON v.seq_loja = lj.seq_loja ");
1098
                sql.append("WHERE v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal AND lanc.seq_produto = l.seq_produto ");
1099
                sql.append("AND lj.seq_loja = ");
1100
                sql.append(sequencialLoja);
1101
                sql.append(" GROUP BY lanc.seq_produto) ");
1102
                sql.append("* 1) * -1 > 0 ");
1103
                return sql.toString();
1104
        }
1105
 
1106
        private String adicionarEstoqueSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1107
                StringBuilder sql = new StringBuilder();
1108
                sql.append(", (");
1109
                sql.append("SELECT SUM(pl.qtd_estoque) FROM sc_sec.sec_produto_loja pl ");
1110
                sql.append("WHERE pl.seq_produto = l.seq_produto ");
1111
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1112
                        sql.append("AND pl.seq_loja = :sequencialLoja ");
1113
                }
1114
                sql.append(") ");
1115
                return sql.toString();
1116
        }
1117
 
1118
        private String adicionarParametrosSqlNativo(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1119
                StringBuilder sql = new StringBuilder("v.dth_venda >= :dataInicial AND v.dth_venda <= :dataFinal ");
1120
 
1121
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLojaSelecionada()) &&
1122
                                VerificadorUtil.naoEstaNulo(parametrosConsulta.getEstoqueMinimo())) {
1123
                        sql.append("AND (");
1124
                        sql.append("SELECT SUM(pl.qtd_estoque) FROM sc_sec.sec_produto_loja pl ");
1125
                        sql.append("WHERE pl.seq_produto = l.seq_produto ");
1126
                        sql.append("AND pl.seq_loja = ");
1127
                        sql.append(parametrosConsulta.getLojaSelecionada().getSequencial());
1128
                        sql.append(") >= ");
1129
                        sql.append(parametrosConsulta.getEstoqueMinimo());
1130
                        sql.append(" ");
1131
                }
1132
 
1133
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLoja())) {
1134
                        sql.append("AND lj.seq_loja = :sequencialLoja ");
1135
                }
1136
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1137
                        sql.append("AND p.tip_produto = :tipoProduto ");
1138
                }
1139
 
1140
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getProduto())) {
1141
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getSequencial())) {
1142
                                sql.append("AND p.seq_produto = :sequencialProduto ");
1143
                        }
1144
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCodigo())) {
1145
                                sql.append("AND p.cod_produto = :codigo ");
1146
                        }
1147
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getDescricao())) {
1148
                                sql.append("AND ");
1149
                                sql.append(sqlConsultarSemAcento("p.dsc_produto"));
1150
                                sql.append(" like upper(:descricao) ");
1151
                        }
1152
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getEstilo())) {
1153
                                sql.append("AND p.tip_estilo = :tipoEstilo ");
1154
                        }
1155
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getCor())) {
1156
                                sql.append("AND p.tip_cor = :tipoCor ");
1157
                        }
1158
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsulta.getProduto().getGenero())) {
1159
                                sql.append("AND p.tip_genero = :tipoGenero ");
1160
                        }
1161
                }
1162
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getMarca())) {
1163
                        sql.append("AND ma.seq_marcal = :sequencialMarcaDoModelo ");
1164
                }
1165
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1166
                        sql.append("AND m.seq_modelo = :sequencialModelo ");
1167
                }
1168
                return sql.toString();
1169
        }
1170
 
1171
        @Override
1172
        public List<RankingProdutoDTO> consultarProdutosMaisVendidos(Date dataInicial, Date dataFinal, Integer quantidadeProdutos, String tipoOrdenacao, Long sequencialLoja, String tipoProduto,
1173
                        Produto produto, Marca marca) {
1174
                StringBuilder sql = new StringBuilder();
1175
                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 ");
1176
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1177
                if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1178
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1179
                }
1180
                if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1181
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1182
                }
1183
                if (VerificadorUtil.naoEstaNulo(produto)) {
1184
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getCodigo())) {
1185
                                sql.append("AND l.produto.codigo = :codigo ");
1186
                        }
1187
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getDescricao())) {
1188
                                sql.append("AND ");
1189
                                sql.append(sqlConsultarSemAcento("l.produto.descricao"));
1190
                                sql.append(" like upper(:descricao) ");
1191
                        }
1192
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getEstilo())) {
1193
                                sql.append("AND l.produto.estilo = :tipoEstilo ");
1194
                        }
1195
                        if (VerificadorUtil.naoEstaNuloOuVazio(produto.getGenero())) {
1196
                                sql.append("AND l.produto.genero = :tipoGenero ");
1197
                        }
1198
                }
1199
                if (VerificadorUtil.naoEstaNulo(marca)) {
1200
                        sql.append("AND l.produto.modelo.marca.sequencial = :sequencialMarcaDoModelo ");
1201
                }
1202
 
1203
                sql.append("GROUP BY l.produto ");
1204
                if (tipoOrdenacao.equals(TipoOrdenacaoMaisVendidos.LUCRO.getValor())) {
1205
                        sql.append("ORDER BY SUM(l.valorVenda - l.valorCompra) DESC ");
1206
                } else if (tipoOrdenacao.equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
1207
                        sql.append("ORDER BY COUNT(l.produto) DESC ");
1208
                } else if (tipoOrdenacao.equals(TipoOrdenacaoMaisVendidos.VALOR_VENDIDO.getValor())) {
1209
                        sql.append("ORDER BY SUM(l.valorVenda) DESC ");
1210
                }
1211
                try {
1212
                        TypedQuery<RankingProdutoDTO> query = getEntityManager().createQuery(sql.toString(), RankingProdutoDTO.class)
1213
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial))
1214
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal))
1215
                                        .setMaxResults(quantidadeProdutos);
1216
                        if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1217
                                query.setParameter("sequencialLoja", sequencialLoja);
1218
                        }
1219
                        if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1220
                                query.setParameter("tipoProduto", tipoProduto);
1221
                        }
1222
                        if (VerificadorUtil.naoEstaNulo(produto)) {
1223
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getCodigo())) {
1224
                                        query.setParameter("codigo", produto.getCodigoProdutoPadrao());
1225
                                }
1226
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getDescricao())) {
1227
                                        query.setParameter("descricao", "%" + removerAcentuacao(produto.getDescricao()) + "%");
1228
                                }
1229
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getEstilo())) {
1230
                                        query.setParameter("tipoEstilo", produto.getEstilo());
1231
                                }
1232
                                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getGenero())) {
1233
                                        query.setParameter("tipoGenero", produto.getGenero());
1234
                                }
1235
                        }
1236
                        if (VerificadorUtil.naoEstaNulo(marca)) {
1237
                                query.setParameter("sequencialMarcaDoModelo", marca.getSequencial());
1238
                        }
1239
                        return query.getResultList();
1240
                } catch(Exception ex) {
1241
                        ex.printStackTrace();
1242
                        return null;
1243
                }
1244
        }
1245
 
1246
        @Override
1247
        public List<RankingModeloDTO> consultarModelosMaisVendidos(ParametrosConsultaModelosMaisVendidosDTO parametrosConsulta) {
1248
                StringBuilder sql = new StringBuilder();
1249
                sql.append("SELECT new br.com.ec.domain.dto.RankingModeloDTO(l.produto.modelo, SUM(l.valorVenda), SUM(l.valorCompra), COUNT(l.produto.modelo), ");
1250
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1251
                        sql.append("(");
1252
                        sql.append(adicionarConsultaDoEstoque(parametrosConsulta.getSequencialLoja(), "l.produto.modelo", parametrosConsulta.getTipoProduto(), parametrosConsulta.getEstiloProduto()));
1253
                        sql.append("), ");
1254
                }
1255
                sql.append("(");
1256
                sql.append(adicionarConsultaDoEstoque(null, "l.produto.modelo", parametrosConsulta.getTipoProduto(), parametrosConsulta.getEstiloProduto()));
1257
                sql.append(")) FROM Lancamento l ");
1258
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1259
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1260
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1261
                }
1262
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1263
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1264
                }
1265
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1266
                        sql.append("AND l.produto.modelo = :modelo ");
1267
                }
1268
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getEstiloProduto())) {
1269
                        sql.append("AND l.produto.estilo = :estiloProduto ");
1270
                }
1271
                sql.append("GROUP BY l.produto.modelo ");
1272
                if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.LUCRO.getValor())) {
1273
                        sql.append("ORDER BY SUM(l.valorVenda - l.valorCompra) DESC ");
1274
                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.QUANTIDADE.getValor())) {
1275
                        sql.append("ORDER BY COUNT(l.produto.modelo) DESC ");
1276
                } else if (parametrosConsulta.getTipoOrdenacao().equals(TipoOrdenacaoMaisVendidos.VALOR_VENDIDO.getValor())) {
1277
                        sql.append("ORDER BY SUM(l.valorVenda) DESC ");
1278
                }
1279
                try {
1280
                        TypedQuery<RankingModeloDTO> query = getEntityManager().createQuery(sql.toString(), RankingModeloDTO.class)
1281
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
1282
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1283
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getQuantidadeModelos())) {
1284
                                query.setMaxResults(parametrosConsulta.getQuantidadeModelos());
1285
                        }
1286
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1287
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
1288
                        }
1289
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1290
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1291
                        }
1292
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getModelo())) {
1293
                                query.setParameter("modelo", parametrosConsulta.getModelo());
1294
                        }
1295
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getEstiloProduto())) {
1296
                                query.setParameter("estiloProduto", parametrosConsulta.getEstiloProduto());
1297
                        }
1298
                        return query.getResultList();
1299
                } catch(Exception ex) {
1300
                        ex.printStackTrace();
1301
                        return null;
1302
                }
1303
        }
1304
 
1305
        private String adicionarConsultaDoEstoque(Long sequencialLoja, String modelo, String tipoProduto, String estiloProduto) {
1306
                StringBuilder sql = new StringBuilder();
1307
                sql.append("SELECT SUM(pl.quantidadeEstoque) FROM ProdutoLoja pl ");
1308
                sql.append("WHERE pl.produto.modelo = " + modelo + " ");
1309
                if (VerificadorUtil.naoEstaNuloOuVazio(sequencialLoja)) {
1310
                        sql.append("AND pl.loja.sequencial = :sequencialLoja ");
1311
                }
1312
                if (VerificadorUtil.naoEstaNuloOuVazio(tipoProduto)) {
1313
                        sql.append("AND pl.produto.tipo = :tipoProduto ");
1314
                }
1315
                if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
1316
                        sql.append("AND pl.produto.estilo = :estiloProduto ");
1317
                }
1318
                return sql.toString().trim();
1319
        }
1320
*/     
1321
        /*     
1322
        private String adicionarQueryConsultaDoEstoque(Long sequencialLoja, Modelo modelo, String tipoProduto, String estiloProduto) {
1323
                try {
1324
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
1325
                        if (VerificadorUtil.naoEstaNuloOuVazio(sequencialLoja)) {
1326
                                query.setParameter("sequencialLoja", sequencialLoja);
1327
                        }
1328
                        if (VerificadorUtil.naoEstaNuloOuVazio(tipoProduto)) {
1329
                                query.setParameter("tipoProduto", tipoProduto);
1330
                        }
1331
                        if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
1332
                                query.setParameter("estiloProduto", estiloProduto);
1333
                        }
1334
//                              if (VerificadorUtil.naoEstaNuloOuVazio(genero)) {
1335
//                                      query.setParameter("tipoGenero", genero);
1336
//                              }
1337
                        query.setParameter("sequencialModelo", modelo.getSequencial());
1338
//                              if (VerificadorUtil.naoEstaNuloOuVazio(descricaoProduto)) {
1339
//                                      query.setParameter("descricaoProduto", "%" + removerAcentuacao(descricaoProduto) + "%");
1340
//                              }
1341
                        return sql.toString();
1342
        }
1343
*/
1344
/*
1345
        @Override
1346
        public List<VendasDTO> consultarVendas(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
1347
                StringBuilder sql = new StringBuilder();
1348
                try {
1349
                        sql.append("SELECT ");
1350
                        sql.append("v.seq_venda, ");
1351
                        sql.append("l.dsc_loja, v.dth_venda, ");
1352
                        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), ");
1353
                        sql.append("v.tip_situacao, ");
1354
                        sql.append("us.dsc_nome, v.dsc_observacao, ");
1355
                        sql.append("p.cod_produto, m.dsc_modelo, p.dsc_produto, lanc.val_venda ");
1356
                        sql.append("FROM sc_sec.sec_venda v ");
1357
                        sql.append("LEFT JOIN sc_sec.sec_loja l ON l.seq_loja = v.seq_loja ");
1358
                        sql.append("LEFT JOIN sc_sec.sec_vendedor ve ON ve.seq_vendedor = v.seq_vendedor ");
1359
                        sql.append("LEFT JOIN sc_sec.sec_usuario us ON us.seq_pessoa = ve.seq_pessoa ");
1360
                        sql.append("LEFT JOIN sc_sec.sec_lancamento lanc ON lanc.seq_venda = v.seq_venda ");
1361
                        sql.append("LEFT JOIN sc_sec.sec_produto p ON p.seq_produto = lanc.seq_produto ");
1362
                        sql.append("LEFT JOIN sc_sec.sec_modelo m ON m.seq_modelo = p.seq_modelo ");
1363
                        sql.append("WHERE 1=1 ");
1364
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getLoja())) {
1365
                                sql.append("AND l.seq_loja.sequencial = :sequencialLoja ");
1366
                        }
1367
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getSituacaoVenda())) {
1368
                                sql.append("AND v.tip_situacao = :tipoSituacao ");
1369
                        }
1370
//                      if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaVendasDTO)parametros).getVendedor())) {
1371
//                              sql.append("AND e.vendedor.sequencial = :sequencialVendedor ");
1372
//                      }
1373
//                      if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getIndicacao())) {
1374
//                              sql.append("AND e.indicacao.sequencial = :sequencialIndicacao ");
1375
//                      }
1376
*/
1377
                        //TODO: VERIFICAR LANÇAMENTOS COM MAIS PAGAMENTOS QUE LANÇAMENTOS
1378
                        /*
1379
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda())) {
1380
                                if (parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.NENHUMA.getValor())) {
1381
                                        sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e) = 0 ");
1382
//                                              sql.append("AND ((SELECT COUNT(vf) FROM VendaFormaPagamento vf WHERE vf.venda = e) > (SELECT COUNT(cr) FROM ContaAReceber cr WHERE cr.venda = e)) ");
1383
                                }
1384
                                if (parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.QUITADO.getValor())) {
1385
                                        sql.append("AND (SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) = 0 ");
1386
                                        sql.append("AND (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) > 0 ");
1387
                                }
1388
                                if (parametrosConsultaVendasDTO.getSituacaoFinanceiraVenda().equals(br.com.ec.domain.model.tipos.TipoSituacaoFinanceira.PENDENCIAS.getValor())) {
1389
                                        sql.append("AND ((SELECT COUNT(p) FROM Parcela p WHERE p.conta.venda = e AND p.dataPagamento is null AND p.indicadorAtivo = true) > 0 ");
1390
                                        sql.append("OR (SELECT COUNT(c) FROM Conta c WHERE c.venda = e AND c.indicadorAtivo = true) = 0) ");
1391
                                }
1392
                        }
1393
                        */
1394
/*     
1395
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataVendas())
1396
                                        || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataInicial())
1397
                                        || VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataFinal())) {
1398
                                sql.append("AND v.dth_venda >= :dataInicial ");
1399
                                sql.append("AND v.dth_venda <= :dataFinal ");
1400
                        }
1401
 
1402
                        sql.append("ORDER BY v.seq_venda ");
1403
 
1404
                        Query query = getEntityManager().createNativeQuery(sql.toString());
1405
 
1406
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getLoja())) {
1407
                                query.setParameter("sequencialLoja", parametrosConsultaVendasDTO.getLoja().getSequencial());
1408
                        }
1409
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getSituacaoVenda())) {
1410
                                query.setParameter("tipoSituacao", parametrosConsultaVendasDTO.getSituacaoVenda());
1411
                        }
1412
//                      if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getVendedor())) {
1413
//                              query.setParameter("sequencialVendedor", parametrosConsultaVendasDTO.getVendedor().getSequencial());
1414
//                      }
1415
//                      if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getIndicacao())) {
1416
//                              query.setParameter("sequencialIndicacao", ((ParametrosConsultaVendasDTO)parametros).getIndicacao().getSequencial());
1417
//                      }
1418
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataInicial())
1419
                                        && VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataFinal())) {
1420
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsultaVendasDTO.getDataInicial());
1421
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsultaVendasDTO.getDataFinal());
1422
                                query.setParameter("dataInicial", dataInicial);
1423
                                query.setParameter("dataFinal", dataFinal);
1424
                        } else if (VerificadorUtil.naoEstaNuloOuVazio(parametrosConsultaVendasDTO.getDataVendas())) {
1425
                                Date dataInicial = DataUtils.getDataComHorarioMinimo(parametrosConsultaVendasDTO.getDataVendas());
1426
                                Date dataFinal = DataUtils.getDataComHorarioMaximo(parametrosConsultaVendasDTO.getDataVendas());
1427
                                query.setParameter("dataInicial", dataInicial);
1428
                                query.setParameter("dataFinal", dataFinal);
1429
                        }
1430
 
1431
                        List<Object[]> resultList = query.getResultList();
1432
 
1433
                        List<VendasDTO> vendas = new ArrayList<VendasDTO>();
1434
 
1435
                        // PREENCHER VENDAS
1436
                        for (Object[] objects : resultList) {
1437
                                VendasDTO venda = new VendasDTO();
1438
                                venda.setSequencial(Long.parseLong(objects[0].toString()));
1439
                                if (!vendas.contains(venda)) {
1440
                                        venda.setDescricaoLoja(objects[1].toString());
1441
//                                      System.out.println(objects[2].toString());
1442
//                                      venda.setDataVenda(new Date(objects[2].toString()));
1443
                                        venda.setValorVenda(Double.parseDouble(objects[3].toString()));
1444
                                        venda.setTipoSituacao(objects[4].toString());
1445
                                        venda.setNomeUsuario(objects[5].toString());
1446
                                        venda.setObservacao(objects[6].toString());
1447
                                        vendas.add(venda);
1448
                                }
1449
                        }
1450
 
1451
                        for (Object[] objects : resultList) {
1452
                                VendasDTO venda = new VendasDTO();
1453
                                venda.setSequencial(Long.parseLong(objects[0].toString()));
1454
 
1455
                                VendasLancamentoDTO lancamento = new VendasLancamentoDTO();
1456
                                lancamento.setCodigoProduto(objects[7].toString());
1457
                                if (VerificadorUtil.naoEstaNulo(objects[8])) {
1458
                                        lancamento.setDescricaoModelo(objects[8].toString());
1459
                                }
1460
                                lancamento.setDescricaoProduto(objects[9].toString());
1461
                                lancamento.setValorVenda(Double.parseDouble(objects[10].toString()));
1462
 
1463
                                VendasDTO vendaCompleta = vendas.get(vendas.indexOf(venda));
1464
                                vendaCompleta.getLancamentos().add(lancamento);
1465
                                vendas.remove(vendas.indexOf(venda));
1466
                                vendas.add(vendaCompleta);
1467
                        }
1468
                        return vendas;
1469
                } catch (NoResultException e) {
1470
                        return null;
1471
                }
1472
        }
1473
 
1474
        @Override
1475
        public Integer obterQuantidadeProdutosVendidosPorEstiloEeGenero(Date dataInicial, Date dataFinal, Long sequencialLoja, Long sequencialModelo, String tipoProduto, String estiloProduto, String tipoGenero) {
1476
                StringBuilder sql = new StringBuilder();
1477
                sql.append("SELECT COUNT(l) FROM Lancamento l ");
1478
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1479
                if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1480
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1481
                }
1482
                if (VerificadorUtil.naoEstaNulo(sequencialModelo)) {
1483
                        sql.append("AND l.produto.modelo.sequencial = :sequencialModelo ");
1484
                }
1485
                if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1486
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1487
                }
1488
                if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
1489
                        sql.append("AND l.produto.estilo = :tipoEstilo ");
1490
                }
1491
                if (VerificadorUtil.naoEstaNuloOuVazio(tipoGenero)) {
1492
                        sql.append("AND l.produto.genero = :tipoGenero ");
1493
                }
1494
*/             
1495
                /*sql.append("GROUP BY l.produto.estilo ");*/
1496
/*     
1497
                try {
1498
                        TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class)
1499
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial))
1500
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
1501
                        if (VerificadorUtil.naoEstaNulo(sequencialLoja)) {
1502
                                query.setParameter("sequencialLoja", sequencialLoja);
1503
                        }
1504
                        if (VerificadorUtil.naoEstaNulo(sequencialModelo)) {
1505
                                query.setParameter("sequencialModelo", sequencialModelo);
1506
                        }
1507
                        if (VerificadorUtil.naoEstaNulo(tipoProduto)) {
1508
                                query.setParameter("tipoProduto", tipoProduto);
1509
                        }
1510
                        if (VerificadorUtil.naoEstaNuloOuVazio(estiloProduto)) {
1511
                                query.setParameter("tipoEstilo", estiloProduto);
1512
                        }
1513
                        if (VerificadorUtil.naoEstaNuloOuVazio(tipoGenero)) {
1514
                                query.setParameter("tipoGenero", tipoGenero);
1515
                        }
1516
                        return query.getSingleResult().intValue();
1517
                } catch(Exception ex) {
1518
                        ex.printStackTrace();
1519
                        return null;
1520
                }
1521
        }
1522
*/     
1523
        /*
1524
        @Override
1525
        public RankingComprasTransferenciasEstiloDTO consultarVendasPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, Modelo modelo) {
1526
                StringBuilder sql = new StringBuilder();
1527
                sql.append("SELECT new br.com.ec.domain.dto.RankingComprasTransferenciasEstiloDTO(");
1528
                sql.append("l.produto.estilo");
1529
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, null) + ")");
1530
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor()) + ")");
1531
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor()) + ")");
1532
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor()) + ")");
1533
                sql.append(", COUNT(0), COUNT(0), COUNT(0), COUNT(0)");
1534
                sql.append(") FROM Lancamento l ");
1535
                sql.append("WHERE l.venda.dataVenda >= :dataInicial AND l.venda.dataVenda <= :dataFinal ");
1536
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1537
                        sql.append("AND l.venda.loja.sequencial = :sequencialLoja ");
1538
                }
1539
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1540
                        sql.append("AND l.produto.tipo = :tipoProduto ");
1541
                }
1542
                sql.append("AND l.produto.modelo = :modelo ");
1543
                sql.append("AND l.produto.estilo = :estiloProduto ");
1544
                sql.append("GROUP BY l.produto.estilo ");
1545
                try {
1546
                        TypedQuery<RankingComprasTransferenciasEstiloDTO> query = getEntityManager().createQuery(sql.toString(), RankingComprasTransferenciasEstiloDTO.class)
1547
                                        .setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()))
1548
                                        .setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1549
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1550
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
1551
                        }
1552
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1553
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1554
                        }
1555
                        if (VerificadorUtil.naoEstaNulo(modelo)) {
1556
                                query.setParameter("modelo", modelo);
1557
                        }
1558
                        query.setParameter("estiloProduto", parametrosConsulta.getEstilo());
1559
                        return query.getSingleResult();
1560
                } catch(NoResultException nr) {
1561
                        RankingComprasTransferenciasEstiloDTO rankingComprasTransferenciasEstilo = new RankingComprasTransferenciasEstiloDTO();
1562
                        rankingComprasTransferenciasEstilo.setEstilo(TipoEstiloProduto.parse(parametrosConsulta.getEstilo()));
1563
                        return rankingComprasTransferenciasEstilo;
1564
                } catch(Exception ex) {
1565
                        ex.printStackTrace();
1566
                        return null;
1567
                }
1568
        }
1569
*/
1570
/*
1571
        private String adicionarConsultaQuantidadeVendasPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, String genero, Boolean consultarPorLoja) {
1572
                StringBuilder sql = new StringBuilder();
1573
                sql.append("SELECT COUNT(lanc) FROM Lancamento lanc ");
1574
                sql.append("WHERE lanc.venda.dataVenda >= :dataInicial AND lanc.venda.dataVenda <= :dataFinal ");
1575
                sql.append("AND lanc.produto.modelo = :modelo ");
1576
                sql.append("AND lanc.produto.estilo = :estiloProduto ");
1577
                if (consultarPorLoja) {
1578
                        sql.append("AND lanc.venda.loja = l ");
1579
                }
1580
                sql.append("AND lanc.produto.genero = '" + genero + "' ");
1581
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1582
                        sql.append("AND lanc.produto.tipo = :tipoProduto ");
1583
                }
1584
                return sql.toString().trim();
1585
        }
1586
 
1587
        @Override
1588
        public RankingComprasTransferenciasEstiloDTO consultarEstoqueEeVendasPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, Modelo modelo) {
1589
                StringBuilder sql = new StringBuilder();
1590
                sql.append("SELECT new br.com.ec.domain.dto.RankingComprasTransferenciasEstiloDTO(");
1591
                sql.append("pLoja.produto.estilo");
1592
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), false) + ")");
1593
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), false) + ")");
1594
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), false) + ")");
1595
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), false) + ")");
1596
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), false) + ")");
1597
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), false) + ")");
1598
                sql.append(", (" + adicionarConsultaPedidosCompraPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor()) + ")");
1599
                sql.append(", (" + adicionarConsultaPedidosCompraPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor()) + ")");
1600
                sql.append(", (" + adicionarConsultaPedidosCompraPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor()) + ")");
1601
                // ADICIONAR QUANTIDADE JÁ SOLCITADO PARA COMPRA (VERIFICADO + SOLICITADO)
1602
                sql.append(") FROM ProdutoLoja pLoja ");
1603
                sql.append("WHERE pLoja.produto.estilo = :estiloProduto ");
1604
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1605
                        sql.append("AND pLoja.loja.sequencialLoja = :sequencialLoja ");
1606
                }
1607
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1608
                        sql.append("AND pLoja.produto.tipo = :tipoProduto ");
1609
                }
1610
                sql.append("AND pLoja.produto.modelo = :modelo ");
1611
                sql.append("GROUP BY pLoja.produto.estilo ");
1612
                try {
1613
                        TypedQuery<RankingComprasTransferenciasEstiloDTO> query = getEntityManager().createQuery(sql.toString(), RankingComprasTransferenciasEstiloDTO.class);
1614
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()));
1615
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1616
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1617
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
1618
                        }
1619
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1620
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1621
                        }
1622
                        if (VerificadorUtil.naoEstaNulo(modelo)) {
1623
                                query.setParameter("modelo", modelo);
1624
                        }
1625
                        query.setParameter("estiloProduto", parametrosConsulta.getEstilo());
1626
                        return query.getSingleResult();
1627
                } catch(NoResultException nr) {
1628
                        RankingComprasTransferenciasEstiloDTO rankingComprasTransferenciasEstilo = new RankingComprasTransferenciasEstiloDTO();
1629
                        rankingComprasTransferenciasEstilo.setEstilo(TipoEstiloProduto.parse(parametrosConsulta.getEstilo()));
1630
                        return rankingComprasTransferenciasEstilo;
1631
                } catch(Exception ex) {
1632
                        ex.printStackTrace();
1633
                        return null;
1634
                }
1635
        }
1636
 
1637
        private String adicionarConsultaEstoquePorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, String genero, Boolean consultarPorLoja) {
1638
                StringBuilder sql = new StringBuilder();
1639
                sql.append("SELECT SUM(pl.quantidadeEstoque) FROM ProdutoLoja pl ");
1640
                sql.append("WHERE pl.produto.modelo = :modelo ");
1641
                sql.append("AND pl.produto.estilo = :estiloProduto ");
1642
                if (consultarPorLoja) {
1643
                        sql.append("AND pl.loja = l ");
1644
                }
1645
                sql.append("AND pl.produto.genero = '" + genero + "' ");
1646
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1647
                        sql.append("AND pl.produto.tipo = :tipoProduto ");
1648
                }
1649
                return sql.toString().trim();
1650
        }
1651
 
1652
        private String adicionarConsultaPedidosCompraPorEstilo(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, String genero) {
1653
                StringBuilder sql = new StringBuilder();
1654
                sql.append("SELECT SUM(ppc.quantidadeParaComprar) FROM ProdutoPedidoCompra ppc ");
1655
                sql.append("WHERE ppc.status IN ('" + TipoStatusPedidoCompra.VERIFICADO.getValor() + "','" + TipoStatusPedidoCompra.SOLICITADO.getValor() + "') ");
1656
                sql.append("AND ppc.produto.modelo = :modelo ");
1657
                sql.append("AND ppc.produto.estilo = :estiloProduto ");
1658
                sql.append("AND ppc.produto.genero = '" + genero + "' ");
1659
                if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1660
                        sql.append("AND ppc.produto.tipo = :tipoProduto ");
1661
                }
1662
                return sql.toString().trim();
1663
        }
1664
 
1665
        @Override
1666
        public List<RankingComprasTransferenciasEstiloPorLoja> consultarEstoqueEeVendasEstiloPorLoja(ParametrosConsultaParaComprasTransferenciasDTO parametrosConsulta, Modelo modelo) {
1667
                StringBuilder sql = new StringBuilder();
1668
                sql.append("SELECT new br.com.ec.domain.dto.RankingComprasTransferenciasEstiloPorLoja(");
1669
                sql.append("l");
1670
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), true) + ")");
1671
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), true) + ")");
1672
                sql.append(", (" + adicionarConsultaQuantidadeVendasPorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), true) + ")");
1673
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.UNISSEX.getValor(), true) + ")");
1674
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.MASCULINO.getValor(), true) + ")");
1675
                sql.append(", (" + adicionarConsultaEstoquePorEstilo(parametrosConsulta, TipoGenero.FEMININO.getValor(), true) + ")");
1676
                sql.append(", " + parametrosConsulta.getQuantidadeMinimaComprar());
1677
                // ADICIONAR QUANTIDADE JÁ SOLICITADO PARA COMPRA (VERIFICADO + SOLICITADO)
1678
                sql.append(") FROM Loja l ");
1679
                sql.append("WHERE l.ativo IS TRUE ");
1680
                sql.append("GROUP BY l, l.ordenador ");
1681
                sql.append("ORDER BY l.ordenador ");
1682
                try {
1683
                        TypedQuery<RankingComprasTransferenciasEstiloPorLoja> query = getEntityManager().createQuery(sql.toString(), RankingComprasTransferenciasEstiloPorLoja.class);
1684
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataInicial()));
1685
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(parametrosConsulta.getDataFinal()));
1686
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getSequencialLoja())) {
1687
                                query.setParameter("sequencialLoja", parametrosConsulta.getSequencialLoja());
1688
                        }
1689
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoProduto())) {
1690
                                query.setParameter("tipoProduto", parametrosConsulta.getTipoProduto());
1691
                        }
1692
                        if (VerificadorUtil.naoEstaNulo(modelo)) {
1693
                                query.setParameter("modelo", modelo);
1694
                        }
1695
                        query.setParameter("estiloProduto", parametrosConsulta.getEstilo());
1696
                        return query.getResultList();
1697
                } catch(Exception ex) {
1698
                        ex.printStackTrace();
1699
                        return null;
1700
                }
1701
        }
1702
*/
1703
}