Subversion Repositories Integrator Subversion

Rev

Rev 195 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
128 espaco 1
package br.com.ec.controller.managedbean;
2
 
3
import java.io.Serializable;
4
import java.util.Calendar;
5
import java.util.Date;
6
import java.util.GregorianCalendar;
7
import java.util.List;
8
 
9
import javax.inject.Inject;
10
import javax.inject.Named;
11
 
12
import org.primefaces.model.chart.Axis;
13
import org.primefaces.model.chart.AxisType;
14
import org.primefaces.model.chart.BarChartModel;
15
import org.primefaces.model.chart.ChartSeries;
16
import org.springframework.context.annotation.Scope;
17
 
195 espaco 18
import br.com.ec.core.generic.GenericService;
19
import br.com.ec.core.util.DataUtils;
20
import br.com.ec.core.util.VerificadorUtil;
128 espaco 21
import br.com.ec.domain.dto.MeusResultadosDTO;
22
import br.com.ec.domain.dto.ParametrosConsultaVendasDTO;
23
import br.com.ec.domain.dto.ParametrosRelatorioVendasDTO;
24
import br.com.ec.domain.model.AvaliacaoFuncionario;
25
import br.com.ec.domain.model.Usuario;
26
import br.com.ec.domain.model.Vigencia;
27
import br.com.ec.domain.service.avaliacaofuncionario.AvaliacaoFuncionarioService;
28
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
29
import br.com.ec.domain.service.usuario.UsuarioService;
30
import br.com.ec.domain.service.venda.VendaService;
31
import br.com.ec.domain.service.vendedor.VendedorService;
32
import br.com.ec.domain.service.vigencia.VigenciaService;
33
import br.com.ec.domain.shared.ConstantesSEC;
195 espaco 34
import br.com.ec.web.generic.AbstractBean;
128 espaco 35
 
36
@Named
37
@Scope("view")
38
public class MeusResultadosBean extends AbstractBean<MeusResultadosDTO> implements Serializable {
39
 
40
        private static final long serialVersionUID = 1L;
41
 
42
        private UsuarioService usuarioService;
43
        private VendaService vendaService;
44
        private VendedorService vendedorService;
45
        private VigenciaService vigenciaService;
46
        private AvaliacaoFuncionarioService avaliacaoFuncionarioService;
47
 
48
        private Vigencia vigenciaAtual;
49
        private Vigencia vigenciaAnterior;
50
        private MeusResultadosDTO resumoAntigo;
51
        private MeusResultadosDTO resumoPromocaoInterna;
52
        private MeusResultadosDTO resumoPromocaoInternaAnterior;
53
 
54
        private ContextoSeguranca contextoSeguranca;
55
 
56
        List<Vigencia> ultimasVigencias;
57
 
58
        private BarChartModel historico;
59
        private BarChartModel historicoPercentual;
60
 
61
        @Inject
62
        public MeusResultadosBean(UsuarioService usuarioService, VendaService vendaService, VendedorService vendedorService,
63
                        VigenciaService vigenciaService, AvaliacaoFuncionarioService avaliacaoFuncionarioService, ContextoSeguranca contextoSeguranca) {
64
                this.usuarioService = usuarioService;
65
                this.vendaService = vendaService;
66
                this.vendedorService = vendedorService;
67
                this.vigenciaService = vigenciaService;
68
                this.avaliacaoFuncionarioService = avaliacaoFuncionarioService;
69
                this.contextoSeguranca = contextoSeguranca;
70
        }
71
 
72
        @Override
73
        public void preCarregamento() {
74
                setUltimasVigencias(vigenciaService.consultarUltimasVigencias());
75
                Usuario usuarioSelecionado = usuarioService.consultarPorId(contextoSeguranca.obterUsuario());
76
 
77
                if (!getUltimasVigencias().isEmpty()) {
78
                        if (getUltimasVigencias().size() >= 1) {
79
                                setVigenciaAtual(retornarVigenciaDoPeriodo(getUltimasVigencias(), DataUtils.getDataAtual()));
80
                                MeusResultadosDTO colaborador = new MeusResultadosDTO();
81
                                colaborador.setUsuario(usuarioSelecionado);
82
                                colaborador.setRankingVendedor(vendaService.consultarRankingVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()), getVigenciaAtual(), true));
83
                                setEntidade(colaborador);
84
                                colaborador.getRankingVendedor().setPercentualMetaMensal(calcularPorcentagemDaMetaMensal());
85
                                colaborador.getRankingVendedor().setPercentualMetaMensalVivo(calcularPorcentagemDaMetaMensalVivo());
86
                                colaborador.getRankingVendedor().setPercentualMetaDiaria(calcularPorcentagemDaMetaDiaria());
87
                        }
88
                        if (getUltimasVigencias().size() >= 2) {
89
                                Date dataAnterior = DataUtils.acrescentarMeses(DataUtils.getDataAtual(), -1);
90
                                setVigenciaAnterior(retornarVigenciaDoPeriodo(getUltimasVigencias(), dataAnterior));
91
                                MeusResultadosDTO colaboradorAnterior = new MeusResultadosDTO();
92
                                colaboradorAnterior.setUsuario(usuarioSelecionado);
93
                                colaboradorAnterior.setRankingVendedor(vendaService.consultarRankingVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()), getVigenciaAnterior(), true));
94
                                setResumoAntigo(colaboradorAnterior);
95
                        }
96
                }
97
                MeusResultadosDTO colaboradorPromocaoInterna = new MeusResultadosDTO();
98
                colaboradorPromocaoInterna.setUsuario(usuarioSelecionado);
99
                colaboradorPromocaoInterna.setRankingVendedor(vendaService.consultarRankingPromocaoInternaDoVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()),
100
                                DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()),
252 espaco 101
                                DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()),
102
                                ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS));
128 espaco 103
                setResumoPromocaoInterna(colaboradorPromocaoInterna);
104
 
105
                MeusResultadosDTO colaboradorPromocaoInternaAnterior = new MeusResultadosDTO();
106
                colaboradorPromocaoInternaAnterior.setUsuario(usuarioSelecionado);
107
                colaboradorPromocaoInternaAnterior.setRankingVendedor(vendaService.consultarRankingPromocaoInternaDoVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()),
108
                                DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAnterior()),
252 espaco 109
                                DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAnterior()),
110
                                ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS_MES_ANTERIOR));
128 espaco 111
                setResumoPromocaoInternaAnterior(colaboradorPromocaoInternaAnterior);
112
        }
113
 
114
        private Vigencia retornarVigenciaDoPeriodo(List<Vigencia> ultimasVigencias, Date dataAtual) {
115
                for (Vigencia vigencia : ultimasVigencias) {
116
                        if (vigencia.getDataInicio().before(dataAtual) && vigencia.getDataFim().after(dataAtual)) {
117
                                return vigencia;
118
                        }
119
                }
120
                return null;
121
        }
122
 
123
        @Override
124
        public void limparEntidade() {
125
                setEntidade(new MeusResultadosDTO());
126
        }
127
 
128
        @Override
129
        public GenericService<MeusResultadosDTO> getService() {
130
                return null;
131
        }
132
 
133
        @Override
134
        public MeusResultadosDTO getEntidade() {
135
                return entidade;
136
        }
137
 
138
        @Override
139
        public MeusResultadosDTO getId() {
140
                return getEntidade();
141
        }
142
 
143
        public Vigencia getVigenciaAtual() {
144
                return vigenciaAtual;
145
        }
146
        public void setVigenciaAtual(Vigencia vigenciaAtual) {
147
                this.vigenciaAtual = vigenciaAtual;
148
        }
149
 
150
        public Vigencia getVigenciaAnterior() {
151
                return vigenciaAnterior;
152
        }
153
        public void setVigenciaAnterior(Vigencia vigenciaAnterior) {
154
                this.vigenciaAnterior = vigenciaAnterior;
155
        }
156
 
157
        public MeusResultadosDTO getResumoAntigo() {
158
                return resumoAntigo;
159
        }
160
        public void setResumoAntigo(MeusResultadosDTO resumoAntigo) {
161
                this.resumoAntigo = resumoAntigo;
162
        }
163
 
164
        public MeusResultadosDTO getResumoPromocaoInterna() {
165
                return resumoPromocaoInterna;
166
        }
167
        public void setResumoPromocaoInterna(MeusResultadosDTO resumoPromocaoInterna) {
168
                this.resumoPromocaoInterna = resumoPromocaoInterna;
169
        }
170
 
171
        public MeusResultadosDTO getResumoPromocaoInternaAnterior() {
172
                return resumoPromocaoInternaAnterior;
173
        }
174
        public void setResumoPromocaoInternaAnterior(MeusResultadosDTO resumoPromocaoInternaAnterior) {
175
                this.resumoPromocaoInternaAnterior = resumoPromocaoInternaAnterior;
176
        }
177
 
178
        public List<Vigencia> getUltimasVigencias() {
179
                return ultimasVigencias;
180
        }
181
        public void setUltimasVigencias(List<Vigencia> ultimasVigencias) {
182
                this.ultimasVigencias = ultimasVigencias;
183
        }
184
 
185
        public BarChartModel getHistorico() {
186
                if (VerificadorUtil.estaNulo(historico)) {
187
                        consultarHistorico();
188
                }
189
                return historico;
190
        }
191
        public void setHistorico(BarChartModel historico) {
192
                this.historico = historico;
193
        }
194
 
195
        public BarChartModel getHistoricoPercentual() {
196
                if (VerificadorUtil.estaNulo(historicoPercentual)) {
197
                        consultarHistoricoPercentual();
198
                }
199
                return historicoPercentual;
200
        }
201
        public void setHistoricoPercentual(BarChartModel historicoPercentual) {
202
                this.historicoPercentual = historicoPercentual;
203
        }
204
 
205
        /***************************************************************/
206
 
207
        public Double calcularPorcentagemDaMetaMensal() {
208
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
209
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal(),
210
                                        getEntidade().getRankingVendedor().getValorTotalVendido()) : 0.0;
211
        }
212
 
213
        public Double calcularPorcentagemDaMetaMensalVivo() {
214
                return verificarMetasVivo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
215
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensalVivo(),
216
                                        getEntidade().getRankingVendedor().getValorTotalVendidoVivo()) : 0.0;
217
        }
218
 
219
        public Double calcularPorcentagemDaMetaDiaria() {
220
                Integer quantidadeDiasNoMes = new GregorianCalendar().getActualMaximum (Calendar.DAY_OF_MONTH);
221
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
222
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal() / quantidadeDiasNoMes,
223
                                        getEntidade().getRankingVendedor().getValorTotalVendidoDoDia()) : 0.0;
224
        }
225
 
226
        public String retornarEstiloMetaDiaria() {
227
                Integer quantidadeDiasNoMes = new GregorianCalendar().getActualMaximum (Calendar.DAY_OF_MONTH);
228
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
229
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal() / quantidadeDiasNoMes,
230
                                        getEntidade().getRankingVendedor().getValorTotalVendidoDoDia()) : "red-intense";
231
        }
232
 
233
        public String retornarEstiloMetaMensal() {
234
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
235
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal(),
236
                                        getEntidade().getRankingVendedor().getValorTotalVendido()) : "red-intense";
237
        }
238
 
239
        public String retornarEstiloMetaMensalVivo() {
240
                return verificarMetasVivo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
241
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensalVivo(),
242
                                        getEntidade().getRankingVendedor().getValorTotalVendidoVivo()) : "red-intense";
243
        }
244
 
245
        private boolean verificarMetas(AvaliacaoFuncionario avaliacaoFuncionario) {
246
                if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
247
                        if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getValorMetaMensal())) {
248
                                return true;
249
                        }
250
                }
251
                return false;
252
        }
253
 
254
        private boolean verificarMetasVivo(AvaliacaoFuncionario avaliacaoFuncionario) {
255
                if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
256
                        if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getValorMetaMensalVivo())) {
257
                                return true;
258
                        }
259
                }
260
                return false;
261
        }
262
 
263
        private String retornarEstilo(Double valorMetaMensal, Double valorTotal) {
264
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
265
                        Double percentualRealizado = valorTotal * 100 / valorMetaMensal;
266
                        if (percentualRealizado < 75) {
267
                                return "red-intense";
268
                        } else {
269
                                if (percentualRealizado < 100) {
270
                                        return "blue-madison";
271
                                } else {
272
                                        if (percentualRealizado < 125) {
273
                                                return "green-haze";
274
                                        } else {
275
                                                return "green-seagreen";
276
                                        }
277
                                }
278
                        }
279
                }
280
                return "purple";
281
        }
282
 
283
        private Double consultarPorcentagem(Double valorTotal, Double valor) {
284
                if (VerificadorUtil.naoEstaNuloOuVazio(valorTotal) && VerificadorUtil.naoEstaNuloOuVazio(valor)) {
285
                        return (valor * 100 / valorTotal) / 100;
286
                }
287
                return 0.0;
288
        }
289
 
290
        public Integer getQuantidadeMinimaComissaoPromocaoInterna() {
291
                return ConstantesSEC.ProdutosPromocaoInterna.QUANTIDADE_MINIMA_RECEBIMENTO;
292
        }
293
 
294
        public void consultarHistorico() {
295
                ParametrosRelatorioVendasDTO parametrosRelatorioVendas = new ParametrosRelatorioVendasDTO();
296
                parametrosRelatorioVendas.iniciarDatasAtuais();
297
                if (VerificadorUtil.naoEstaNulo(getEntidade())) {
298
                        parametrosRelatorioVendas.setVendedor(getEntidade().getRankingVendedor().getVendedor());
299
 
300
                        ParametrosConsultaVendasDTO parametrosConsulta = new ParametrosConsultaVendasDTO(parametrosRelatorioVendas);
301
                        historico = new BarChartModel();
302
                        historico.setShowPointLabels(true);
303
                        historico.setDatatipFormat("<span>R$ %2$d</span><span style='display:none;'>%2$d</span>");
304
                        historico.setShowDatatip(true);
305
                        historico.setTitle("");
306
                        Axis xAxis = historico.getAxis(AxisType.X);
307
                        xAxis.setLabel("MESES");
308
                        Axis yAxis = historico.getAxis(AxisType.Y);
309
                    yAxis.setLabel("VALORES");
310
                        Integer mesAtual = new Integer(parametrosRelatorioVendas.getMes());
311
                        Integer anoAtual = new Integer(parametrosRelatorioVendas.getAno());
312
                        Integer quantidadeMesesAnteriores = 13;
313
 
314
                        mesAtual = mesAtual - quantidadeMesesAnteriores + 1;
315
                        if (mesAtual <= 0) {
316
                                mesAtual = mesAtual + 12;
317
                                anoAtual--;
318
                        }
319
                        ChartSeries linha = new ChartSeries();
320
                        for (int mes = 1; mes <= quantidadeMesesAnteriores; quantidadeMesesAnteriores--) {
321
                                if (mesAtual == 13) {
322
                                        mesAtual = 1;
323
                                        anoAtual++;
324
                                }
325
                                Double valorAcumulado = new Double(0.0);
326
                                Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, mesAtual - 1, anoAtual));
327
                                parametrosConsulta.setDataInicial(dataInicial.getTime());
328
                                int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
329
                                parametrosConsulta.setDataFinal(DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, mesAtual - 1, anoAtual)).getTime());
330
                                parametrosConsulta.setIndicadorComissionado(true);
331
                                valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
332
                                String descricaoLinha = mesAtual.toString() + "/" + anoAtual;
333
                                linha.set(descricaoLinha, valorAcumulado);
334
                        mesAtual++;
335
                        }
336
                        historico.addSeries(linha);
337
                }
338
        }
339
 
340
        public void consultarHistoricoPercentual() {
341
                ParametrosRelatorioVendasDTO parametrosRelatorioVendas = new ParametrosRelatorioVendasDTO();
342
                parametrosRelatorioVendas.iniciarDatasAtuais();
343
                if (VerificadorUtil.naoEstaNulo(getEntidade())) {
344
                        parametrosRelatorioVendas.setVendedor(getEntidade().getRankingVendedor().getVendedor());
345
 
346
                        ParametrosConsultaVendasDTO parametrosConsulta = new ParametrosConsultaVendasDTO(parametrosRelatorioVendas);
347
                        historicoPercentual = new BarChartModel();
348
                        historicoPercentual.setShowPointLabels(true);
349
                        historicoPercentual.setDatatipFormat("<span>%2$d%</span><span style='display:none;'>%2$d</span>");
350
                        historicoPercentual.setShowDatatip(true);
351
                        historicoPercentual.setTitle("");
352
                        Axis xAxis = historicoPercentual.getAxis(AxisType.X);
353
                        xAxis.setLabel("MESES");
354
                        Axis yAxis = historicoPercentual.getAxis(AxisType.Y);
355
                    yAxis.setLabel("PERCENTUAIS");
356
                        Integer mesAtual = new Integer(parametrosRelatorioVendas.getMes());
357
                        Integer anoAtual = new Integer(parametrosRelatorioVendas.getAno());
358
                        Integer quantidadeMesesAnteriores = 13;
359
 
360
                        mesAtual = mesAtual - quantidadeMesesAnteriores + 1;
361
                        if (mesAtual <= 0) {
362
                                mesAtual = mesAtual + 12;
363
                                anoAtual--;
364
                        }
365
                        ChartSeries linha = new ChartSeries();
366
                        for (int mes = 1; mes <= quantidadeMesesAnteriores; quantidadeMesesAnteriores--) {
367
                                if (mesAtual == 13) {
368
                                        mesAtual = 1;
369
                                        anoAtual++;
370
                                }
371
                                Double valorAcumulado = new Double(0.0);
372
                                Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, mesAtual - 1, anoAtual));
373
                                parametrosConsulta.setDataInicial(dataInicial.getTime());
374
                                int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
375
                                parametrosConsulta.setDataFinal(DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, mesAtual - 1, anoAtual)).getTime());
376
                                parametrosConsulta.setIndicadorComissionado(true);
377
                                valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
378
                                String descricaoLinha = mesAtual.toString() + "/" + anoAtual;
379
 
380
                                AvaliacaoFuncionario avaliacaoFuncionario = avaliacaoFuncionarioService.consultarAvaliacaoFuncionarioPelaData(parametrosRelatorioVendas.getVendedor(), DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataFinal()));
381
                                Double percentualMetaMensal = 0.0;
382
                                if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
383
                                        percentualMetaMensal = avaliacaoFuncionario.retornarPercentualRealizado(valorAcumulado);
384
                                }
385
 
386
                                linha.set(descricaoLinha, percentualMetaMensal * 100);
387
                        mesAtual++;
388
                        }
389
                        historicoPercentual.addSeries(linha);
390
                }
391
        }
392
 
393
        public String produtosPromocaoInterna() {
394
                return ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS.replace("'", "");
395
        }
396
 
252 espaco 397
        public String produtosPromocaoInternaMesAnterior() {
398
                return ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS_MES_ANTERIOR.replace("'", "");
399
        }
400
 
128 espaco 401
}