Subversion Repositories Integrator Subversion

Rev

Rev 106 | Details | Compare with Previous | Last modification | View Log | RSS feed

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