Subversion Repositories Integrator Subversion

Rev

Rev 195 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.controller.managedbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

import org.springframework.context.annotation.Scope;

import br.com.ec.controller.util.UtilBean;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.CockpitDTO;
import br.com.ec.domain.dto.RankingLojaDTO;
import br.com.ec.domain.dto.RankingVendedorDTO;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Vendedor;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.venda.VendaService;
import br.com.ec.domain.service.vendedor.VendedorService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.util.DataUtil;

@Named
@Scope("view")
public class CockpitBean extends AbstractBean<CockpitDTO> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private VendaService vendaService;
        private VendedorService vendedorService;
        private LojaService lojaService;
        private Date dataInicial;
        private Date dataFinal;
       
        private Double percentualVendidoMesAtual;
        private Double percentualPercorridoMesAtual;
       
        private Loja lojaParcial;
        private Loja lojaVendedores;
        private String parcialEmTexto;
       
        @Inject
        public CockpitBean(VendaService vendaService, VendedorService vendedorService, LojaService lojaService) {
                this.vendaService = vendaService;
                this.vendedorService = vendedorService;
                this.lojaService = lojaService;
        }
       
        @Override
        public void preCarregamento() {
                setDataInicial(DataUtils.getPrimeiroDiaDoMesAtual());
                setDataFinal(DataUtils.getUltimoDiaDoMesAtual());
                preencherPercentuais();
        }
       
        @Override
        public void limparEntidade() {
                setEntidade(new CockpitDTO());
        }

        @Override
        public GenericService<CockpitDTO> getService() {
                return null;
        }
       
        @Override
        public CockpitDTO getEntidade() {
                return entidade;
        }

        @Override
        public CockpitDTO getId() {
                return getEntidade();
        }
       
        public String estiloValor(Double valor) {
                return UtilBean.estiloValor(valor);
        }
       
        public Date getDataInicial() {
                return dataInicial;
        }
        public void setDataInicial(Date dataInicial) {
                this.dataInicial = dataInicial;
        }
       
        public Date getDataFinal() {
                return dataFinal;
        }
        public void setDataFinal(Date dataFinal) {
                this.dataFinal = dataFinal;
        }
       
        public Double getPercentualVendidoMesAtual() {
                return percentualVendidoMesAtual;
        }
        public void setPercentualVendidoMesAtual(Double percentualVendidoMesAtual) {
                this.percentualVendidoMesAtual = percentualVendidoMesAtual;
        }
       
        public Double getPercentualPercorridoMesAtual() {
                return percentualPercorridoMesAtual;
        }
        public void setPercentualPercorridoMesAtual(Double percentualPercorridoMesAtual) {
                this.percentualPercorridoMesAtual = percentualPercorridoMesAtual;
        }
       
        public Loja getLojaParcial() {
                return lojaParcial;
        }
        public void setLojaParcial(Loja lojaParcial) {
                this.lojaParcial = lojaParcial;
        }
       
        public Loja getLojaVendedores() {
                return lojaVendedores;
        }
        public void setLojaVendedores(Loja lojaVendedores) {
                this.lojaVendedores = lojaVendedores;
        }
       
        public String getParcialEmTexto() {
                return parcialEmTexto;
        }
        public void setParcialEmTexto(String parcialEmTexto) {
                this.parcialEmTexto = parcialEmTexto;
        }
       
        public void consultarRankingVendedores() {
                if (VerificadorUtil.estaNulo(getEntidade())) {
                        entidade = new CockpitDTO();
                }
                List<RankingVendedorDTO> rankingVendedor = new ArrayList<RankingVendedorDTO>();
                List<RankingVendedorDTO> rankingVendedorVivo = new ArrayList<RankingVendedorDTO>();
                List<RankingVendedorDTO> ranking = vendaService.consultarRankingVendedores(dataInicial, dataFinal, true, getLojaVendedores());
                for (RankingVendedorDTO vendedor : ranking) {
                        if (vendedor.getValorTotalVendido() > new Double(0.0)) {
                                rankingVendedor.add(vendedor);
                        }
                        if (vendedor.getValorTotalVendidoVivo() > new Double(0.0)) {
                                rankingVendedorVivo.add(vendedor);
                        }
                }
                entidade.setRankingVendedores(rankingVendedor);
                entidade.setRankingVendedoresVivo(rankingVendedorVivo);
        }

        public void consultarRankingLojas() {
                if (VerificadorUtil.estaNulo(getEntidade())) {
                        entidade = new CockpitDTO();
                }
                entidade.setRankingLojas(vendaService.consultarRankingLojas(getDataInicial(), getDataFinal()));
                entidade.setRankingLojasExtras(vendaService.consultarRankingLojasExtras(getDataInicial(), getDataFinal()));
                Double valorTotalVendido = new Double(0.0);
                for (RankingLojaDTO rankingLoja : entidade.getRankingLojas()) {
                        valorTotalVendido = valorTotalVendido + rankingLoja.getValorTotalVendido();
                }
                setPercentualVendidoMesAtual(new Double(valorTotalVendido/entidade.getValorTotalMeta()));
        }
       
        public void consultarRankingPromocaoInterna() {
                if (VerificadorUtil.estaNulo(getEntidade())) {
                        entidade = new CockpitDTO();
                }
                entidade.setRankingPromocaoInterna(vendaService.consultarRankingPromocaoInterna(getDataInicial(), getDataFinal(), ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS));
        }
       
        private void preencherPercentuais() {
                Integer ultimoDiaDoMes = DataUtils.getUltimoDiaDoMesAtual().getDate();
                Integer diaAtual = DataUtils.getDataAtual().getDate();
                setPercentualPercorridoMesAtual(new Double(100*diaAtual/ultimoDiaDoMes));
        }
       
        public void consultarRankings() {
                consultarRankingVendedores();
                consultarRankingLojas();
                consultarRankingPromocaoInterna();
        }
       
        public String produtosPromocaoInterna() {
                return ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS.replace("'", "");
        }
       
        public void consultarParciais() {
                StringBuilder parcial = new StringBuilder();
                List<Loja> lojas = new ArrayList<Loja>();
                if (VerificadorUtil.estaNulo(getLojaParcial())) {
                        lojas.addAll(lojaService.listarLojasAtivas());
                } else {
                        lojas.add(getLojaParcial());
                }
                for (Loja loja : lojas) {
                        parcial.append("PARCIAL DE ");
                        parcial.append(DataUtil.retornarDataFormatadaEmFormatoTexto("dd/MM", getDataInicial()));
                        parcial.append(" A ");
                        parcial.append(DataUtil.retornarDataFormatadaEmFormatoTexto("dd/MM", getDataFinal()));
                        parcial.append(": ");
                        parcial.append(loja.getDescricao());
                        parcial.append("\n");
                        List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradoresAtivos(loja);
                        for (Vendedor vendedor : vendedores) {
                                for (RankingVendedorDTO rankingVendedor : getEntidade().getRankingVendedores()) {
                                        if (loja.equals(vendedor.getLoja()) && vendedor.equals(rankingVendedor.getVendedor())) {
                                                parcial.append("\n");
                                                parcial.append(rankingVendedor.getVendedor().getNome());
                                                parcial.append(" = ");
                                                if (VerificadorUtil.naoEstaNulo(rankingVendedor.getPercentualMetaMensal())) {
                                                        parcial.append(StringUtil.formatarPercentual(rankingVendedor.getPercentualMetaMensal()));
                                                } else {
                                                        parcial.append("0");
                                                }
                                                parcial.append(" (TICKET MÉDIO: R$");
                                                parcial.append(StringUtil.formatarValor(rankingVendedor.getTicketMedio()));
                                                parcial.append(", CONTAGENS: ");
                                                parcial.append(rankingVendedor.getQuantidadeContagens());
                                                parcial.append(", PEDIDOS: ");
                                                parcial.append(rankingVendedor.getQuantidadePedidos());
                                                parcial.append(", PEDIDOS INVÁLIDOS: ");
                                                parcial.append(rankingVendedor.getQuantidadePedidosInvalidos());
                                                parcial.append(", ATENDIMENTOS: ");
                                                parcial.append(rankingVendedor.getQuantidadeAtendimentos());
                                                parcial.append(")");
                                        }
                                }
                        }
                        parcial.append("\n\n");
                        for (RankingLojaDTO rankingLoja : getEntidade().getRankingLojas()) {
                                if (loja.equals(rankingLoja.getLoja())) {
                                        parcial.append("META DA LOJA: ");
                                        parcial.append(StringUtil.formatarPercentual(rankingLoja.getPercentualMetaMensal()));
                                }
                        }
                        parcial.append("\n");
                        parcial.append("META IDEAL: ATÉ DIA 10: 33%. ATÉ DIA 20: 66%");
                        if (VerificadorUtil.estaNulo(getLojaParcial())) {
                                parcial.append("\n\n");
                        }
                }
                setParcialEmTexto(parcial.toString());
        }
       
}