Subversion Repositories Integrator Subversion

Rev

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