Subversion Repositories Integrator Subversion

Rev

Rev 128 | Rev 252 | 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
 
98
                MeusResultadosDTO colaboradorPromocaoInterna = new MeusResultadosDTO();
99
                colaboradorPromocaoInterna.setUsuario(usuarioSelecionado);
100
                colaboradorPromocaoInterna.setRankingVendedor(vendaService.consultarRankingPromocaoInternaDoVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()),
101
                                DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()),
102
                                DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual())));
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()),
109
                                DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAnterior())));
110
                setResumoPromocaoInternaAnterior(colaboradorPromocaoInternaAnterior);
111
        }
112
 
113
        private Vigencia retornarVigenciaDoPeriodo(List<Vigencia> ultimasVigencias, Date dataAtual) {
114
                for (Vigencia vigencia : ultimasVigencias) {
115
                        if (vigencia.getDataInicio().before(dataAtual) && vigencia.getDataFim().after(dataAtual)) {
116
                                return vigencia;
117
                        }
118
                }
119
                return null;
120
        }
121
 
122
        @Override
123
        public void limparEntidade() {
124
                setEntidade(new MeusResultadosDTO());
125
        }
126
 
127
        @Override
128
        public GenericService<MeusResultadosDTO> getService() {
129
                return null;
130
        }
131
 
132
        @Override
133
        public MeusResultadosDTO getEntidade() {
134
                return entidade;
135
        }
136
 
137
        @Override
138
        public MeusResultadosDTO getId() {
139
                return getEntidade();
140
        }
141
 
142
        public Vigencia getVigenciaAtual() {
143
                return vigenciaAtual;
144
        }
145
        public void setVigenciaAtual(Vigencia vigenciaAtual) {
146
                this.vigenciaAtual = vigenciaAtual;
147
        }
148
 
149
        public Vigencia getVigenciaAnterior() {
150
                return vigenciaAnterior;
151
        }
152
        public void setVigenciaAnterior(Vigencia vigenciaAnterior) {
153
                this.vigenciaAnterior = vigenciaAnterior;
154
        }
155
 
156
        public MeusResultadosDTO getResumoAntigo() {
157
                return resumoAntigo;
158
        }
159
        public void setResumoAntigo(MeusResultadosDTO resumoAntigo) {
160
                this.resumoAntigo = resumoAntigo;
161
        }
162
 
163
        public MeusResultadosDTO getResumoPromocaoInterna() {
164
                return resumoPromocaoInterna;
165
        }
166
        public void setResumoPromocaoInterna(MeusResultadosDTO resumoPromocaoInterna) {
167
                this.resumoPromocaoInterna = resumoPromocaoInterna;
168
        }
169
 
170
        public MeusResultadosDTO getResumoPromocaoInternaAnterior() {
171
                return resumoPromocaoInternaAnterior;
172
        }
173
        public void setResumoPromocaoInternaAnterior(MeusResultadosDTO resumoPromocaoInternaAnterior) {
174
                this.resumoPromocaoInternaAnterior = resumoPromocaoInternaAnterior;
175
        }
176
 
177
        public List<Vigencia> getUltimasVigencias() {
178
                return ultimasVigencias;
179
        }
180
        public void setUltimasVigencias(List<Vigencia> ultimasVigencias) {
181
                this.ultimasVigencias = ultimasVigencias;
182
        }
183
 
184
        public BarChartModel getHistorico() {
185
                if (VerificadorUtil.estaNulo(historico)) {
186
                        consultarHistorico();
187
                }
188
                return historico;
189
        }
190
        public void setHistorico(BarChartModel historico) {
191
                this.historico = historico;
192
        }
193
 
194
        public BarChartModel getHistoricoPercentual() {
195
                if (VerificadorUtil.estaNulo(historicoPercentual)) {
196
                        consultarHistoricoPercentual();
197
                }
198
                return historicoPercentual;
199
        }
200
        public void setHistoricoPercentual(BarChartModel historicoPercentual) {
201
                this.historicoPercentual = historicoPercentual;
202
        }
203
 
204
        /***************************************************************/
205
 
206
        public Double calcularPorcentagemDaMetaMensal() {
207
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
208
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal(),
209
                                        getEntidade().getRankingVendedor().getValorTotalVendido()) : 0.0;
210
        }
211
 
212
        public Double calcularPorcentagemDaMetaMensalVivo() {
213
                return verificarMetasVivo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
214
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensalVivo(),
215
                                        getEntidade().getRankingVendedor().getValorTotalVendidoVivo()) : 0.0;
216
        }
217
 
218
        public Double calcularPorcentagemDaMetaDiaria() {
219
                Integer quantidadeDiasNoMes = new GregorianCalendar().getActualMaximum (Calendar.DAY_OF_MONTH);
220
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
221
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal() / quantidadeDiasNoMes,
222
                                        getEntidade().getRankingVendedor().getValorTotalVendidoDoDia()) : 0.0;
223
        }
224
 
225
        public String retornarEstiloMetaDiaria() {
226
                Integer quantidadeDiasNoMes = new GregorianCalendar().getActualMaximum (Calendar.DAY_OF_MONTH);
227
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
228
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal() / quantidadeDiasNoMes,
229
                                        getEntidade().getRankingVendedor().getValorTotalVendidoDoDia()) : "red-intense";
230
        }
231
 
232
        public String retornarEstiloMetaMensal() {
233
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
234
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal(),
235
                                        getEntidade().getRankingVendedor().getValorTotalVendido()) : "red-intense";
236
        }
237
 
238
        public String retornarEstiloMetaMensalVivo() {
239
                return verificarMetasVivo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
240
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensalVivo(),
241
                                        getEntidade().getRankingVendedor().getValorTotalVendidoVivo()) : "red-intense";
242
        }
243
 
244
        private boolean verificarMetas(AvaliacaoFuncionario avaliacaoFuncionario) {
245
                if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
246
                        if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getValorMetaMensal())) {
247
                                return true;
248
                        }
249
                }
250
                return false;
251
        }
252
 
253
        private boolean verificarMetasVivo(AvaliacaoFuncionario avaliacaoFuncionario) {
254
                if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
255
                        if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getValorMetaMensalVivo())) {
256
                                return true;
257
                        }
258
                }
259
                return false;
260
        }
261
 
262
        private String retornarEstilo(Double valorMetaMensal, Double valorTotal) {
263
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
264
                        Double percentualRealizado = valorTotal * 100 / valorMetaMensal;
265
                        if (percentualRealizado < 75) {
266
                                return "red-intense";
267
                        } else {
268
                                if (percentualRealizado < 100) {
269
                                        return "blue-madison";
270
                                } else {
271
                                        if (percentualRealizado < 125) {
272
                                                return "green-haze";
273
                                        } else {
274
                                                return "green-seagreen";
275
                                        }
276
                                }
277
                        }
278
                }
279
                return "purple";
280
        }
281
 
282
        private Double consultarPorcentagem(Double valorTotal, Double valor) {
283
                if (VerificadorUtil.naoEstaNuloOuVazio(valorTotal) && VerificadorUtil.naoEstaNuloOuVazio(valor)) {
284
                        return (valor * 100 / valorTotal) / 100;
285
                }
286
                return 0.0;
287
        }
288
 
289
        public Integer getQuantidadeMinimaComissaoPromocaoInterna() {
290
                return ConstantesSEC.ProdutosPromocaoInterna.QUANTIDADE_MINIMA_RECEBIMENTO;
291
        }
292
 
293
        public void consultarHistorico() {
294
                ParametrosRelatorioVendasDTO parametrosRelatorioVendas = new ParametrosRelatorioVendasDTO();
295
                parametrosRelatorioVendas.iniciarDatasAtuais();
296
                if (VerificadorUtil.naoEstaNulo(getEntidade())) {
297
                        parametrosRelatorioVendas.setVendedor(getEntidade().getRankingVendedor().getVendedor());
298
 
299
                        ParametrosConsultaVendasDTO parametrosConsulta = new ParametrosConsultaVendasDTO(parametrosRelatorioVendas);
300
                        historico = new BarChartModel();
301
                        historico.setShowPointLabels(true);
302
                        historico.setDatatipFormat("<span>R$ %2$d</span><span style='display:none;'>%2$d</span>");
303
                        historico.setShowDatatip(true);
304
                        historico.setTitle("");
305
                        Axis xAxis = historico.getAxis(AxisType.X);
306
                        xAxis.setLabel("MESES");
307
                        Axis yAxis = historico.getAxis(AxisType.Y);
308
                    yAxis.setLabel("VALORES");
309
                        Integer mesAtual = new Integer(parametrosRelatorioVendas.getMes());
310
                        Integer anoAtual = new Integer(parametrosRelatorioVendas.getAno());
311
                        Integer quantidadeMesesAnteriores = 13;
312
 
313
                        mesAtual = mesAtual - quantidadeMesesAnteriores + 1;
314
                        if (mesAtual <= 0) {
315
                                mesAtual = mesAtual + 12;
316
                                anoAtual--;
317
                        }
318
                        ChartSeries linha = new ChartSeries();
319
                        for (int mes = 1; mes <= quantidadeMesesAnteriores; quantidadeMesesAnteriores--) {
320
                                if (mesAtual == 13) {
321
                                        mesAtual = 1;
322
                                        anoAtual++;
323
                                }
324
                                Double valorAcumulado = new Double(0.0);
325
                                Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, mesAtual - 1, anoAtual));
326
                                parametrosConsulta.setDataInicial(dataInicial.getTime());
327
                                int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
328
                                parametrosConsulta.setDataFinal(DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, mesAtual - 1, anoAtual)).getTime());
329
                                parametrosConsulta.setIndicadorComissionado(true);
330
                                valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
331
                                String descricaoLinha = mesAtual.toString() + "/" + anoAtual;
332
                                linha.set(descricaoLinha, valorAcumulado);
333
                        mesAtual++;
334
                        }
335
                        historico.addSeries(linha);
336
                }
337
        }
338
 
339
        public void consultarHistoricoPercentual() {
340
                ParametrosRelatorioVendasDTO parametrosRelatorioVendas = new ParametrosRelatorioVendasDTO();
341
                parametrosRelatorioVendas.iniciarDatasAtuais();
342
                if (VerificadorUtil.naoEstaNulo(getEntidade())) {
343
                        parametrosRelatorioVendas.setVendedor(getEntidade().getRankingVendedor().getVendedor());
344
 
345
                        ParametrosConsultaVendasDTO parametrosConsulta = new ParametrosConsultaVendasDTO(parametrosRelatorioVendas);
346
                        historicoPercentual = new BarChartModel();
347
                        historicoPercentual.setShowPointLabels(true);
348
                        historicoPercentual.setDatatipFormat("<span>%2$d%</span><span style='display:none;'>%2$d</span>");
349
                        historicoPercentual.setShowDatatip(true);
350
                        historicoPercentual.setTitle("");
351
                        Axis xAxis = historicoPercentual.getAxis(AxisType.X);
352
                        xAxis.setLabel("MESES");
353
                        Axis yAxis = historicoPercentual.getAxis(AxisType.Y);
354
                    yAxis.setLabel("PERCENTUAIS");
355
                        Integer mesAtual = new Integer(parametrosRelatorioVendas.getMes());
356
                        Integer anoAtual = new Integer(parametrosRelatorioVendas.getAno());
357
                        Integer quantidadeMesesAnteriores = 13;
358
 
359
                        mesAtual = mesAtual - quantidadeMesesAnteriores + 1;
360
                        if (mesAtual <= 0) {
361
                                mesAtual = mesAtual + 12;
362
                                anoAtual--;
363
                        }
364
                        ChartSeries linha = new ChartSeries();
365
                        for (int mes = 1; mes <= quantidadeMesesAnteriores; quantidadeMesesAnteriores--) {
366
                                if (mesAtual == 13) {
367
                                        mesAtual = 1;
368
                                        anoAtual++;
369
                                }
370
                                Double valorAcumulado = new Double(0.0);
371
                                Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, mesAtual - 1, anoAtual));
372
                                parametrosConsulta.setDataInicial(dataInicial.getTime());
373
                                int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
374
                                parametrosConsulta.setDataFinal(DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, mesAtual - 1, anoAtual)).getTime());
375
                                parametrosConsulta.setIndicadorComissionado(true);
376
                                valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
377
                                String descricaoLinha = mesAtual.toString() + "/" + anoAtual;
378
 
379
                                AvaliacaoFuncionario avaliacaoFuncionario = avaliacaoFuncionarioService.consultarAvaliacaoFuncionarioPelaData(parametrosRelatorioVendas.getVendedor(), DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataFinal()));
380
                                Double percentualMetaMensal = 0.0;
381
                                if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
382
                                        percentualMetaMensal = avaliacaoFuncionario.retornarPercentualRealizado(valorAcumulado);
383
                                }
384
 
385
                                linha.set(descricaoLinha, percentualMetaMensal * 100);
386
                        mesAtual++;
387
                        }
388
                        historicoPercentual.addSeries(linha);
389
                }
390
        }
391
 
392
        public String produtosPromocaoInterna() {
393
                return ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS.replace("'", "");
394
        }
395
 
396
}