Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

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