Subversion Repositories Integrator Subversion

Rev

Rev 356 | 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.Date;
6
import java.util.List;
7
 
8
import javax.inject.Inject;
9
import javax.inject.Named;
10
 
11
import org.springframework.context.annotation.Scope;
12
 
13
import br.com.ec.controller.util.UtilBean;
557 blopes 14
import br.com.ec.core.exception.NegocioException;
195 espaco 15
import br.com.ec.core.generic.GenericService;
16
import br.com.ec.core.util.DataUtils;
17
import br.com.ec.core.util.StringUtil;
18
import br.com.ec.core.util.VerificadorUtil;
106 espaco 19
import br.com.ec.domain.dto.CockpitDTO;
20
import br.com.ec.domain.dto.RankingLojaDTO;
21
import br.com.ec.domain.dto.RankingVendedorDTO;
22
import br.com.ec.domain.model.Loja;
557 blopes 23
import br.com.ec.domain.model.Usuario;
106 espaco 24
import br.com.ec.domain.model.Vendedor;
25
import br.com.ec.domain.service.loja.LojaService;
557 blopes 26
import br.com.ec.domain.service.perfil.PerfilService;
27
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
106 espaco 28
import br.com.ec.domain.service.venda.VendaService;
29
import br.com.ec.domain.service.vendedor.VendedorService;
557 blopes 30
import br.com.ec.web.exception.VerificadorLancamentoException;
31
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
195 espaco 32
import br.com.ec.web.generic.AbstractBean;
557 blopes 33
import br.com.ec.web.message.LancadorMensagem;
195 espaco 34
import br.com.ec.web.util.DataUtil;
106 espaco 35
 
36
@Named
37
@Scope("view")
38
public class CockpitBean extends AbstractBean<CockpitDTO> implements Serializable {
39
 
40
        private static final long serialVersionUID = 1L;
41
 
42
        private VendaService vendaService;
43
        private VendedorService vendedorService;
44
        private LojaService lojaService;
557 blopes 45
        private PerfilService perfilService;
46
        private ContextoSeguranca contextoSeguranca;
106 espaco 47
        private Date dataInicial;
48
        private Date dataFinal;
49
 
50
        private Double percentualVendidoMesAtual;
51
        private Double percentualPercorridoMesAtual;
52
 
53
        private Loja lojaParcial;
122 espaco 54
        private Loja lojaVendedores;
106 espaco 55
        private String parcialEmTexto;
56
 
57
        @Inject
557 blopes 58
        public CockpitBean(VendaService vendaService, VendedorService vendedorService, LojaService lojaService, PerfilService perfilService,
59
                        ContextoSeguranca contextoSeguranca) {
106 espaco 60
                this.vendaService = vendaService;
61
                this.vendedorService = vendedorService;
62
                this.lojaService = lojaService;
557 blopes 63
                this.perfilService = perfilService;
64
                this.contextoSeguranca = contextoSeguranca;
106 espaco 65
        }
66
 
67
        @Override
68
        public void preCarregamento() {
69
                setDataInicial(DataUtils.getPrimeiroDiaDoMesAtual());
70
                setDataFinal(DataUtils.getUltimoDiaDoMesAtual());
71
                preencherPercentuais();
72
        }
73
 
74
        @Override
75
        public void limparEntidade() {
76
                setEntidade(new CockpitDTO());
77
        }
78
 
79
        @Override
80
        public GenericService<CockpitDTO> getService() {
81
                return null;
82
        }
83
 
84
        @Override
85
        public CockpitDTO getEntidade() {
86
                return entidade;
87
        }
88
 
89
        @Override
90
        public CockpitDTO getId() {
91
                return getEntidade();
92
        }
93
 
94
        public String estiloValor(Double valor) {
95
                return UtilBean.estiloValor(valor);
96
        }
97
 
98
        public Date getDataInicial() {
99
                return dataInicial;
100
        }
101
        public void setDataInicial(Date dataInicial) {
102
                this.dataInicial = dataInicial;
103
        }
104
 
105
        public Date getDataFinal() {
106
                return dataFinal;
107
        }
108
        public void setDataFinal(Date dataFinal) {
109
                this.dataFinal = dataFinal;
110
        }
111
 
112
        public Double getPercentualVendidoMesAtual() {
113
                return percentualVendidoMesAtual;
114
        }
115
        public void setPercentualVendidoMesAtual(Double percentualVendidoMesAtual) {
116
                this.percentualVendidoMesAtual = percentualVendidoMesAtual;
117
        }
118
 
119
        public Double getPercentualPercorridoMesAtual() {
120
                return percentualPercorridoMesAtual;
121
        }
122
        public void setPercentualPercorridoMesAtual(Double percentualPercorridoMesAtual) {
123
                this.percentualPercorridoMesAtual = percentualPercorridoMesAtual;
124
        }
125
 
126
        public Loja getLojaParcial() {
127
                return lojaParcial;
128
        }
129
        public void setLojaParcial(Loja lojaParcial) {
130
                this.lojaParcial = lojaParcial;
131
        }
132
 
122 espaco 133
        public Loja getLojaVendedores() {
134
                return lojaVendedores;
135
        }
136
        public void setLojaVendedores(Loja lojaVendedores) {
137
                this.lojaVendedores = lojaVendedores;
138
        }
139
 
106 espaco 140
        public String getParcialEmTexto() {
141
                return parcialEmTexto;
142
        }
143
        public void setParcialEmTexto(String parcialEmTexto) {
144
                this.parcialEmTexto = parcialEmTexto;
145
        }
146
 
147
        public void consultarRankingVendedores() {
557 blopes 148
                verificarPermissaoDataInicial();
149
 
106 espaco 150
                if (VerificadorUtil.estaNulo(getEntidade())) {
151
                        entidade = new CockpitDTO();
152
                }
153
                List<RankingVendedorDTO> rankingVendedor = new ArrayList<RankingVendedorDTO>();
154
                List<RankingVendedorDTO> rankingVendedorVivo = new ArrayList<RankingVendedorDTO>();
122 espaco 155
                List<RankingVendedorDTO> ranking = vendaService.consultarRankingVendedores(dataInicial, dataFinal, true, getLojaVendedores());
106 espaco 156
                for (RankingVendedorDTO vendedor : ranking) {
157
                        if (vendedor.getValorTotalVendido() > new Double(0.0)) {
158
                                rankingVendedor.add(vendedor);
159
                        }
160
                        if (vendedor.getValorTotalVendidoVivo() > new Double(0.0)) {
161
                                rankingVendedorVivo.add(vendedor);
162
                        }
163
                }
164
                entidade.setRankingVendedores(rankingVendedor);
165
                entidade.setRankingVendedoresVivo(rankingVendedorVivo);
166
        }
167
 
168
        public void consultarRankingLojas() {
557 blopes 169
                verificarPermissaoDataInicial();
170
 
106 espaco 171
                if (VerificadorUtil.estaNulo(getEntidade())) {
172
                        entidade = new CockpitDTO();
173
                }
174
                entidade.setRankingLojas(vendaService.consultarRankingLojas(getDataInicial(), getDataFinal()));
175
                entidade.setRankingLojasExtras(vendaService.consultarRankingLojasExtras(getDataInicial(), getDataFinal()));
176
                Double valorTotalVendido = new Double(0.0);
177
                for (RankingLojaDTO rankingLoja : entidade.getRankingLojas()) {
178
                        valorTotalVendido = valorTotalVendido + rankingLoja.getValorTotalVendido();
179
                }
180
                setPercentualVendidoMesAtual(new Double(valorTotalVendido/entidade.getValorTotalMeta()));
181
        }
182
 
183
        public void consultarRankingPromocaoInterna() {
184
                if (VerificadorUtil.estaNulo(getEntidade())) {
185
                        entidade = new CockpitDTO();
186
                }
356 espaco 187
                entidade.setRankingPromocaoInterna(vendaService.consultarRankingPromocaoInterna(getDataInicial(), getDataFinal()));
106 espaco 188
        }
189
 
190
        private void preencherPercentuais() {
191
                Integer ultimoDiaDoMes = DataUtils.getUltimoDiaDoMesAtual().getDate();
192
                Integer diaAtual = DataUtils.getDataAtual().getDate();
193
                setPercentualPercorridoMesAtual(new Double(100*diaAtual/ultimoDiaDoMes));
194
        }
195
 
196
        public void consultarRankings() {
557 blopes 197
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
198
                        public void execute() {
199
                                consultarRankingVendedores();
200
                                consultarRankingLojas();
201
                                consultarRankingPromocaoInterna();
202
                        }
203
                });
106 espaco 204
        }
205
 
557 blopes 206
        private void verificarPermissaoDataInicial() {
207
                Usuario usuario = contextoSeguranca.obterUsuario();
208
                if (!perfilService.temPerfilAdministrador(usuario)) {
209
                        Date dataUmAnoAnterior = DataUtils.acrescentarAnos(DataUtils.getDataAtual(), -1);
210
                        if (getDataInicial().before(dataUmAnoAnterior)) {
211
                                throw new NegocioException("Sem permissão para esta operação. Limite de 1 ano");
212
                        }
213
                }
214
        }
215
 
106 espaco 216
        public void consultarParciais() {
217
                StringBuilder parcial = new StringBuilder();
218
                List<Loja> lojas = new ArrayList<Loja>();
219
                if (VerificadorUtil.estaNulo(getLojaParcial())) {
220
                        lojas.addAll(lojaService.listarLojasAtivas());
221
                } else {
222
                        lojas.add(getLojaParcial());
223
                }
224
                for (Loja loja : lojas) {
225
                        parcial.append("PARCIAL DE ");
226
                        parcial.append(DataUtil.retornarDataFormatadaEmFormatoTexto("dd/MM", getDataInicial()));
227
                        parcial.append(" A ");
228
                        parcial.append(DataUtil.retornarDataFormatadaEmFormatoTexto("dd/MM", getDataFinal()));
229
                        parcial.append(": ");
230
                        parcial.append(loja.getDescricao());
231
                        parcial.append("\n");
232
                        List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradoresAtivos(loja);
233
                        for (Vendedor vendedor : vendedores) {
234
                                for (RankingVendedorDTO rankingVendedor : getEntidade().getRankingVendedores()) {
235
                                        if (loja.equals(vendedor.getLoja()) && vendedor.equals(rankingVendedor.getVendedor())) {
236
                                                parcial.append("\n");
237
                                                parcial.append(rankingVendedor.getVendedor().getNome());
238
                                                parcial.append(" = ");
239
                                                if (VerificadorUtil.naoEstaNulo(rankingVendedor.getPercentualMetaMensal())) {
240
                                                        parcial.append(StringUtil.formatarPercentual(rankingVendedor.getPercentualMetaMensal()));
241
                                                } else {
242
                                                        parcial.append("0");
243
                                                }
244
                                                parcial.append(" (TICKET MÉDIO: R$");
245
                                                parcial.append(StringUtil.formatarValor(rankingVendedor.getTicketMedio()));
246
                                                parcial.append(", CONTAGENS: ");
247
                                                parcial.append(rankingVendedor.getQuantidadeContagens());
248
                                                parcial.append(", PEDIDOS: ");
249
                                                parcial.append(rankingVendedor.getQuantidadePedidos());
250
                                                parcial.append(", PEDIDOS INVÁLIDOS: ");
251
                                                parcial.append(rankingVendedor.getQuantidadePedidosInvalidos());
252
                                                parcial.append(", ATENDIMENTOS: ");
253
                                                parcial.append(rankingVendedor.getQuantidadeAtendimentos());
254
                                                parcial.append(")");
255
                                        }
256
                                }
257
                        }
258
                        parcial.append("\n\n");
259
                        for (RankingLojaDTO rankingLoja : getEntidade().getRankingLojas()) {
260
                                if (loja.equals(rankingLoja.getLoja())) {
261
                                        parcial.append("META DA LOJA: ");
262
                                        parcial.append(StringUtil.formatarPercentual(rankingLoja.getPercentualMetaMensal()));
263
                                }
264
                        }
265
                        parcial.append("\n");
266
                        parcial.append("META IDEAL: ATÉ DIA 10: 33%. ATÉ DIA 20: 66%");
267
                        if (VerificadorUtil.estaNulo(getLojaParcial())) {
268
                                parcial.append("\n\n");
269
                        }
270
                }
271
                setParcialEmTexto(parcial.toString());
272
        }
273
 
274
}