Subversion Repositories Integrator Subversion

Rev

Rev 182 | Details | Compare with Previous | 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.ArrayList;
5
import java.util.List;
6
 
7
import javax.inject.Inject;
8
import javax.inject.Named;
9
 
10
import org.primefaces.model.chart.MeterGaugeChartModel;
11
import org.springframework.context.annotation.Scope;
12
 
13
import br.com.ec.domain.dto.ParametrosConsultaVendasDTO;
14
import br.com.ec.domain.model.Loja;
15
import br.com.ec.domain.service.avaliacaoloja.AvaliacaoLojaService;
16
import br.com.ec.domain.service.loja.LojaService;
17
import br.com.ec.domain.service.venda.VendaService;
18
import br.edu.cesmac.core.util.DataUtils;
19
import br.edu.cesmac.core.util.VerificadorUtil;
20
 
21
@Named
22
@Scope("view")
23
public class MetasBean implements Serializable {
24
 
25
        private static final long serialVersionUID = 1L;
26
 
27
        private VendaService vendaService;
28
        private LojaService lojaService;
29
        private AvaliacaoLojaService avaliacaoLojaService;
30
 
31
        private List<Loja> listaLojasAtivasComMetas;
32
        private Double percentualMetaDiariaLiquida = null;
33
        private Double metaDiariaLiquida = null;
34
 
35
        @Inject
36
        public MetasBean(VendaService vendaService, LojaService lojaService, AvaliacaoLojaService avaliacaoLojaService) {
37
                this.vendaService = vendaService;
38
                this.lojaService = lojaService;
39
                this.avaliacaoLojaService = avaliacaoLojaService;
40
        }
41
 
42
        public List<Loja> getListaLojasAtivasComMetas() {
43
                if (VerificadorUtil.estaNulo(listaLojasAtivasComMetas)) {
44
                        List<Loja> lojasComMetas = new ArrayList<Loja>();
45
                        List<Loja> lojasAtivas = lojaService.listarLojasAtivas();
46
                        for (Loja loja : lojasAtivas) {
47
                                loja.setMetaMensal(consultarMetaMensal(loja));
48
                                loja.setMetaDiariaLiquida(consultarMetaDiariaLiquidaDaLoja(loja));
49
                                loja.setTotalVendasNoMes(consultarTotalVendasNoMes(loja));
50
                                loja.setColorComissao(colorComissao(loja));
51
                                lojasComMetas.add(loja);
52
                        }
53
                        setListaLojasAtivasComMetas(lojasComMetas);
54
                }
55
                return listaLojasAtivasComMetas;
56
        }
57
        public void setListaLojasAtivasComMetas(List<Loja> listaLojasAtivasComMetas) {
58
                this.listaLojasAtivasComMetas = listaLojasAtivasComMetas;
59
        }
60
 
61
        public Double getPercentualMetaDiariaLiquida() {
62
                return percentualMetaDiariaLiquida;
63
        }
64
        public void setPercentualMetaDiariaLiquida(Double percentualMetaDiariaLiquida) {
65
                this.percentualMetaDiariaLiquida = percentualMetaDiariaLiquida;
66
        }
67
        public Double percentualMetaDiariaLiquida(final Loja loja) {
68
        try {
69
                if (VerificadorUtil.estaNulo(getPercentualMetaDiariaLiquida())) {
70
                        Double valorMetaMensal = consultarMetaMensal(loja);
71
                        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
72
                        Double totalVendasAnterioresDoMesAtual = consultarTotalVendasAnterioresDoMes(loja);
73
                        Double valorTotal = (valorMetaMensal - totalVendasAnterioresDoMesAtual) / quantidadeDiasNoMesAtual;
74
                        if (valorTotal < 0.0) {
75
                                setPercentualMetaDiariaLiquida(100.0);
76
                                return getPercentualMetaDiariaLiquida();
77
                        }
78
                        Double percentual = (consultarTotalVendasNoDia(loja) * 100)/valorTotal;
79
                        if (percentual > 100) {
80
                                setPercentualMetaDiariaLiquida(100.0);
81
                                return getPercentualMetaDiariaLiquida();
82
                        }
83
                        setPercentualMetaDiariaLiquida(percentual);
84
                }
85
                return getPercentualMetaDiariaLiquida();
86
        } catch (Exception e) {
87
                        return 0.0;
88
                }
89
    }
90
 
91
    public MeterGaugeChartModel consultarMeta(final Loja loja, boolean apresentarLabels) {
92
        Double valorTotalVendas = consultarTotalVendasNoMes(loja);
93
        Double valorMetaMensal = consularValorComissaoTotal(loja);
94
 
95
        List<Number> metaComissao = new ArrayList<Number>();
96
        metaComissao.add(valorMetaMensal/1.5);
97
        metaComissao.add(valorMetaMensal);
98
        if (valorTotalVendas > valorMetaMensal) {
99
                metaComissao.add(valorTotalVendas*1.5);
100
        } else {
101
                metaComissao.add(valorMetaMensal*1.5);
102
        }
103
 
104
        MeterGaugeChartModel graficoMeta = new MeterGaugeChartModel();
105
        graficoMeta = new MeterGaugeChartModel(valorTotalVendas.intValue(), metaComissao);
106
        graficoMeta.setSeriesColors("cc6666,E7E658,66cc66");
107
        graficoMeta.setShowTickLabels(apresentarLabels);
108
        return graficoMeta;
109
    }
110
 
111
    public String estiloComissao(final Loja loja) {
112
        Double valorRestante = consultarTotalVendasNoMes(loja) - consularValorComissaoTotal(loja);
113
        if (valorRestante < new Double(0.0)) {
114
                return "pink";
115
        }
116
        return "turquoise";
117
    }
118
 
119
    public String colorComissao(final Loja loja) {
120
        Double valorRestante = consultarTotalVendasNoMes(loja) - consularValorComissaoTotal(loja);
121
        if (valorRestante < new Double(0.0)) {
122
                return "#e35b5a";
123
        }
124
        return "#44b6ae";
125
    }
126
 
127
    public Double consultarTotalVendasNoMes(final Loja loja) {
128
        if (VerificadorUtil.naoEstaNulo(loja)) {
129
                if (VerificadorUtil.naoEstaNulo(loja.getTotalVendasNoMes())) {
130
                        return loja.getTotalVendasNoMes();
131
                }
132
        }
133
        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
134
        parametrosConsultaVendas.setLoja(loja);
135
        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()));
136
        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()));
137
        return vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas)
138
                        - vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
139
    }
140
 
141
    public Double consultarTotalVendasAnterioresDoMes(final Loja loja) {
142
        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
143
        parametrosConsultaVendas.setLoja(loja);
144
        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()));
145
        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -1)));
146
        return vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas)
147
                        - vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
148
    }
149
 
150
    public Double consultarTotalVendasNoDia(final Loja loja) {
151
        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
152
        parametrosConsultaVendas.setLoja(loja);
153
        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()));
154
        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getDataAtual()));
155
        return vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas)
156
                        - vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
157
    }
158
 
159
    public Double consultarMetaDiariaBruta(final Loja loja) {
160
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual())) + 1;
161
        Double valorMetaMensal = consultarMetaMensal(loja);
162
                return valorMetaMensal > 0? valorMetaMensal / quantidadeDiasNoMesAtual : null;
163
    }
164
 
165
    public Double consultarMetaDiariaLiquidaComVendasDoDia(final Loja loja) {
166
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
167
        Double totalVendasAnterioresDoMesAtual = consultarTotalVendasAnterioresDoMes(loja);
168
        Double valorMetaMensal = consultarMetaMensal(loja);
169
                return valorMetaMensal > 0? ((valorMetaMensal - totalVendasAnterioresDoMesAtual) / quantidadeDiasNoMesAtual) : null;
170
    }
171
 
172
    public Double getMetaDiariaLiquida() {
173
                return metaDiariaLiquida;
174
        }
175
    public void setMetaDiariaLiquida(Double metaDiariaLiquida) {
176
                this.metaDiariaLiquida = metaDiariaLiquida;
177
        }
178
    public Double consultarMetaDiariaLiquida(final Loja loja) {
179
        if (VerificadorUtil.estaNulo(getMetaDiariaLiquida())) {
180
                setMetaDiariaLiquida(consultarMetaDiariaLiquidaDaLoja(loja));
181
        }
182
        return getMetaDiariaLiquida();
183
    }
184
 
185
    public Double consultarMetaDiariaLiquidaDaLoja(final Loja loja) {
186
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
187
        Double totalVendasAnterioresDoMesAtual = consultarTotalVendasAnterioresDoMes(loja);
188
        Double valorMetaMensal = null;
189
        if (VerificadorUtil.naoEstaNulo(loja.getMetaMensal())) {
190
                valorMetaMensal = loja.getMetaMensal();
191
        } else {
192
                valorMetaMensal = consultarMetaMensal(loja);
193
        }
194
        return valorMetaMensal > 0? ((valorMetaMensal - totalVendasAnterioresDoMesAtual) / quantidadeDiasNoMesAtual) - consultarTotalVendasNoDia(loja) : 0.0;
195
    }
196
 
197
    public Double consultarMetaDiariaGeral() {
198
        Double metaGeral = consultarMetaGeral();
199
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
200
        Double totalVendasNoMesAtual = consultarTotalVendasNoMes(null);
201
        return metaGeral > 0? (metaGeral - totalVendasNoMesAtual) / quantidadeDiasNoMesAtual : null;
202
    }
203
 
204
    private Double consularValorComissaoTotal(Loja loja) {
205
        if (VerificadorUtil.naoEstaNulo(loja)) {
206
                if (VerificadorUtil.estaNulo(loja.getMetaMensal())) {
207
                        return consultarMetaMensal(loja);
208
                }
209
                return loja.getMetaMensal();
210
        }
211
                Double valorComissaoTotal = new Double(0.0);
212
                for (Loja lojaAtiva : getListaLojasAtivasComMetas()) {
213
                        if (VerificadorUtil.estaNulo(lojaAtiva.getMetaMensal())) {
214
                                valorComissaoTotal = valorComissaoTotal + consultarMetaMensal(lojaAtiva);
215
                        } else {
216
                                valorComissaoTotal = valorComissaoTotal + lojaAtiva.getMetaMensal();
217
                        }
218
                }
219
                return valorComissaoTotal;
220
    }
221
 
222
    public Double consultarMetaMensal(Loja loja) {
223
        return avaliacaoLojaService.consultarValorMetaMensalLojaPelaData(loja.getSequencial(), DataUtils.getDataAtual());
224
    }
225
 
226
    public Double consultarMetaGeral() {
227
        return avaliacaoLojaService.consultarValorMetaMensalLojaPelaData(null, DataUtils.getDataAtual());
228
    }
229
 
230
    public Boolean lojaPossuiMeta(Loja loja) {
231
        return consultarMetaMensal(loja) > 0.0;
232
    }
233
 
234
}