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.Collections;
6
import java.util.Comparator;
7
import java.util.HashSet;
8
import java.util.List;
9
import java.util.Set;
10
 
11
import javax.annotation.PostConstruct;
12
import javax.inject.Inject;
13
import javax.inject.Named;
14
import javax.persistence.Transient;
15
 
16
import org.springframework.context.annotation.Scope;
17
 
18
import br.com.ec.domain.dto.CarroDTO;
19
import br.com.ec.domain.dto.ParametrosConsultaVendasDTO;
20
import br.com.ec.domain.model.AvaliacaoLoja;
21
import br.com.ec.domain.model.Loja;
22
import br.com.ec.domain.service.avaliacaoloja.AvaliacaoLojaService;
23
import br.com.ec.domain.service.loja.LojaService;
24
import br.com.ec.domain.service.venda.VendaService;
25
import br.edu.cesmac.core.util.DataUtils;
26
import br.edu.cesmac.core.util.VerificadorUtil;
27
 
28
@Named
29
@Scope("view")
30
public class CorridaBean implements Serializable {
31
 
32
        private static final long serialVersionUID = 1L;
33
 
34
        private Set<CarroDTO> carros;
35
 
36
        private VendaService vendaService;
37
        private LojaService lojaService;
38
        private AvaliacaoLojaService avaliacaoLojaService;
39
 
40
        @Inject
41
        public CorridaBean(VendaService vendaService, LojaService lojaService, AvaliacaoLojaService avaliacaoLojaService) {
42
                this.vendaService = vendaService;
43
                this.lojaService = lojaService;
44
                this.avaliacaoLojaService = avaliacaoLojaService;
45
        }
46
 
47
        public List<CarroDTO> getCarros() {
48
                return new ArrayList<CarroDTO>(carros);
49
        }
50
        public void setCarros(Set<CarroDTO> carros) {
51
                this.carros = carros;
52
        }
53
 
54
        @PostConstruct
55
        public void preCarregamento() {
56
                carros = new HashSet<CarroDTO>();
57
                List<Loja> lojas = lojaService.listarLojasAtivasEspacoCase();
58
                Integer identificador = 0;
59
                for (Loja loja : lojas) {
60
                        if (VerificadorUtil.naoEstaNulo(consultarMetaDiaria(loja))) {
61
                                CarroDTO carro = new CarroDTO();
62
                                carro.setAltura(identificador * 72);
63
                                identificador++;
64
                                carro.setIdentificador(loja.getSequencial().intValue());
65
                                carro.setSequencialLoja(loja.getSequencial());
66
                                carro.setDescricao(loja.getDescricao());
67
                                carro.setVendasDoDia(consultarTotalVendasNoDia(loja));
68
                                carro.setMetaDiaria(consultarMetaDiaria(loja));
69
                                carro.calcularPercentual();
70
                                carros.add(carro);
71
                        }
72
                }
73
        }
74
 
75
        @Transient
76
        public List<CarroDTO> getPodio() {
77
                List<CarroDTO> carrosOrdenados = null;
78
                if (VerificadorUtil.naoEstaNulo(getCarros())) {
79
                        carrosOrdenados = new ArrayList<CarroDTO>(getCarros());
80
                        Collections.sort(carrosOrdenados, new Comparator<CarroDTO>() {
81
                                public int compare(CarroDTO p1, CarroDTO p2) {
82
                                        return p2.getPercentual().compareTo(p1.getPercentual());
83
                                };
84
                        });
85
                }
86
                List<CarroDTO> podio = new ArrayList<CarroDTO>();
87
                Integer colocacao = 1;
88
                for (CarroDTO carro : carrosOrdenados) {
89
                        carro.setColocacao(colocacao);
90
                        colocacao++;
91
                        podio.add(carro);
92
                }
93
                return podio;
94
        }
95
 
96
        public Double consultarMetaDiaria(final Loja loja) {
97
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
98
        Double totalVendasAnterioresDoMesAtual = consultarTotalVendasAnterioresDoMes(loja);
99
        Double valorMetaMensal = consultarMetaMensal(loja);
100
        return valorMetaMensal > 0? ((valorMetaMensal - totalVendasAnterioresDoMesAtual) / quantidadeDiasNoMesAtual) : null;
101
    }
102
 
103
    public String estiloComissao(final Loja loja) {
104
        Double valorRestante = consultarTotalVendasNoMes(loja) - consularValorComissaoTotal(loja);
105
        if (valorRestante < new Double(0.0)) {
106
                return "red-intense";
107
        }
108
        return "green-haze";
109
    }
110
 
111
    public Double consultarTotalVendasNoMes(final Loja loja) {
112
        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
113
        parametrosConsultaVendas.setLoja(loja);
114
        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()));
115
        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()));
116
        return vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas) -
117
                        vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
118
    }
119
 
120
    public Double consultarTotalVendasAnterioresDoMes(final Loja loja) {
121
        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
122
        parametrosConsultaVendas.setLoja(loja);
123
        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()));
124
        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -1)));
125
        return vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas) -
126
                        vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
127
    }
128
 
129
    public Double consultarTotalVendasNoDia(final Loja loja) {
130
        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
131
        parametrosConsultaVendas.setLoja(loja);
132
        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()));
133
        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getDataAtual()));
134
        return vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas) -
135
                        vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
136
    }
137
 
138
    public Double consultarMetaDiariaBruta(final Loja loja) {
139
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual())) + 1;
140
        Double valorMetaMensal = consultarMetaMensal(loja);
141
        return valorMetaMensal > 0? valorMetaMensal / quantidadeDiasNoMesAtual : null;
142
    }
143
 
144
    public Double consultarMetaDiariaLiquidaComVendasDoDia(final Loja loja) {
145
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
146
        Double totalVendasAnterioresDoMesAtual = consultarTotalVendasAnterioresDoMes(loja);
147
        Double valorMetaMensal = consultarMetaMensal(loja);
148
        return valorMetaMensal > 0? ((valorMetaMensal - totalVendasAnterioresDoMesAtual) / quantidadeDiasNoMesAtual) : null;
149
    }
150
 
151
    public Double consultarMetaGeral() {
152
        List<Loja> lojas = lojaService.listarLojasAtivas();
153
        Double metaGeral = new Double(0.0);
154
        for (Loja loja : lojas) {
155
                metaGeral = metaGeral + consultarMetaMensal(loja);
156
        }
157
        return metaGeral;
158
    }
159
 
160
    public Double consultarMetaDiariaGeral() {
161
        Double metaGeral = consultarMetaGeral();
162
        Integer quantidadeDiasNoMesAtual = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()), DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual())) + 1;
163
        Double totalVendasNoMesAtual = consultarTotalVendasNoMes(null);
164
        return metaGeral > 0? (metaGeral - totalVendasNoMesAtual) / quantidadeDiasNoMesAtual : null;
165
    }
166
 
167
    private Double consularValorComissaoTotal(Loja loja) {
168
        if (VerificadorUtil.naoEstaNulo(loja)) {
169
                return consultarMetaMensal(loja);
170
        }
171
        List<Loja> lojasAtivas = lojaService.listarLojasAtivas();
172
                Double valorComissaoTotal = new Double(0.0);
173
                for (Loja lojaAtiva : lojasAtivas) {
174
                        valorComissaoTotal = valorComissaoTotal + consultarMetaMensal(lojaAtiva);
175
                }
176
                return valorComissaoTotal;
177
    }
178
 
179
    private Double consultarMetaMensal(Loja loja) {
180
        Double valorMetaMensal = 0.0;
181
        AvaliacaoLoja avaliacaoLoja = avaliacaoLojaService.consultarAvaliacaoLojaPelaData(loja, DataUtils.getDataAtual());
182
                if (VerificadorUtil.naoEstaNulo(avaliacaoLoja)) {
183
                        return avaliacaoLoja.getValorMetaMensal();
184
                }
185
                return valorMetaMensal;
186
    }
187
 
188
}