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