Subversion Repositories Integrator Subversion

Rev

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