Subversion Repositories Integrator Subversion

Rev

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