Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

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