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
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.core.util.DataUtils;
14
import br.com.ec.core.util.VerificadorUtil;
15
import br.com.ec.domain.dto.ParametrosConsultaVendasDTO;
16
import br.com.ec.domain.model.Loja;
17
import br.com.ec.domain.service.avaliacaoloja.AvaliacaoLojaService;
18
import br.com.ec.domain.service.loja.LojaService;
19
import br.com.ec.domain.service.venda.VendaService;
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
    @Deprecated
166
    public Double consultarMetaDiariaLiquidaComVendasDoDia(final Loja loja) {
167
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
168
        Double totalVendasAnterioresDoMesAtual = consultarTotalVendasAnterioresDoMes(loja);
169
        Double valorMetaMensal = consultarMetaMensal(loja);
170
                return valorMetaMensal > 0? ((valorMetaMensal - totalVendasAnterioresDoMesAtual) / quantidadeDiasNoMesAtual) : null;
171
    }
172
 
173
    public Double getMetaDiariaLiquida() {
174
                return metaDiariaLiquida;
175
        }
176
    public void setMetaDiariaLiquida(Double metaDiariaLiquida) {
177
                this.metaDiariaLiquida = metaDiariaLiquida;
178
        }
179
    public Double consultarMetaDiariaLiquida(final Loja loja) {
180
        if (VerificadorUtil.estaNulo(getMetaDiariaLiquida())) {
181
                setMetaDiariaLiquida(consultarMetaDiariaLiquidaDaLoja(loja));
182
        }
183
        return getMetaDiariaLiquida();
184
    }
185
 
186
    public Double consultarMetaDiariaLiquidaDaLoja(final Loja loja) {
187
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
188
        Double totalVendasAnterioresDoMesAtual = consultarTotalVendasAnterioresDoMes(loja);
189
        Double valorMetaMensal = null;
190
        if (VerificadorUtil.naoEstaNulo(loja.getMetaMensal())) {
191
                valorMetaMensal = loja.getMetaMensal();
192
        } else {
193
                valorMetaMensal = consultarMetaMensal(loja);
194
        }
195
        return valorMetaMensal > 0? ((valorMetaMensal - totalVendasAnterioresDoMesAtual) / quantidadeDiasNoMesAtual) - consultarTotalVendasNoDia(loja) : 0.0;
196
    }
197
 
198
    public Double consultarMetaDiariaGeral() {
199
        Double metaGeral = consultarMetaGeral();
200
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
201
        Double totalVendasNoMesAtual = consultarTotalVendasNoMes(null);
202
        return metaGeral > 0? (metaGeral - totalVendasNoMesAtual) / quantidadeDiasNoMesAtual : null;
203
    }
204
 
205
    private Double consularValorComissaoTotal(Loja loja) {
206
        if (VerificadorUtil.naoEstaNulo(loja)) {
207
                if (VerificadorUtil.estaNulo(loja.getMetaMensal())) {
208
                        return consultarMetaMensal(loja);
209
                }
210
                return loja.getMetaMensal();
211
        }
212
                Double valorComissaoTotal = new Double(0.0);
213
                for (Loja lojaAtiva : getListaLojasAtivasComMetas()) {
214
                        if (VerificadorUtil.estaNulo(lojaAtiva.getMetaMensal())) {
215
                                valorComissaoTotal = valorComissaoTotal + consultarMetaMensal(lojaAtiva);
216
                        } else {
217
                                valorComissaoTotal = valorComissaoTotal + lojaAtiva.getMetaMensal();
218
                        }
219
                }
220
                return valorComissaoTotal;
221
    }
222
 
223
    public Double consultarMetaMensal(Loja loja) {
224
        return avaliacaoLojaService.consultarValorMetaMensalLojaPelaData(loja.getSequencial(), DataUtils.getDataAtual());
225
    }
226
 
227
    public Double consultarMetaGeral() {
228
        return avaliacaoLojaService.consultarValorMetaMensalLojaPelaData(null, DataUtils.getDataAtual());
229
    }
230
 
231
    public Boolean lojaPossuiMeta(Loja loja) {
232
        return consultarMetaMensal(loja) > 0.0;
233
    }
234
 
235
}