Subversion Repositories Integrator Subversion

Rev

Blame | 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.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.service.loja.LojaService;
import br.com.ec.domain.service.perfil.PerfilService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.domain.service.venda.VendaService;
import br.com.ec.domain.service.vendedor.VendedorService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;

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

        private static final long serialVersionUID = 1L;
       
        private VendaService vendaService;
        private VendedorService vendedorService;
        private LojaService lojaService;
        private PerfilService perfilService;
        private UsuarioService usuarioService;
        private Date dataInicial;
        private Date dataFinal;
       
        private Double percentualVendidoMesAtual;
        private Double percentualPercorridoMesAtual;
       
        private Loja lojaParcial;
        private Loja lojaVendedores;
        private String parcialEmTexto;
       
        @Inject
        public RankingAcompanhamentoBean(VendaService vendaService, VendedorService vendedorService, LojaService lojaService, PerfilService perfilService,
                        UsuarioService usuarioService) {
                this.vendaService = vendaService;
                this.vendedorService = vendedorService;
                this.lojaService = lojaService;
                this.perfilService = perfilService;
                this.usuarioService = usuarioService;
        }
       
        @Override
        public void preCarregamento() {
                setDataInicial(DataUtils.getPrimeiroDiaDoMesAtual());
                setDataFinal(DataUtils.getUltimoDiaDoMesAtual());
                preencherPercentuais();
               
                consultarRankings();
        }
       
        @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> ranking = vendaService.consultarRankingVendedores(dataInicial, dataFinal, true, getLojaVendedores());
                for (RankingVendedorDTO vendedor : ranking) {
                        if (vendedor.getValorTotalVendido() > new Double(0.0)) {
                                rankingVendedor.add(vendedor);
                        }
                }
                entidade.setRankingVendedores(rankingVendedor);
        }

        public void consultarRankingLojas() {
                if (VerificadorUtil.estaNulo(getEntidade())) {
                        entidade = new CockpitDTO();
                }
                entidade.setRankingLojas(vendaService.consultarRankingLojas(getDataInicial(), getDataFinal()));
                Double valorTotalVendido = new Double(0.0);
                for (RankingLojaDTO rankingLoja : entidade.getRankingLojas()) {
                        valorTotalVendido = valorTotalVendido + rankingLoja.getValorTotalVendido();
                }
                setPercentualVendidoMesAtual(new Double(valorTotalVendido/entidade.getValorTotalMeta()));
        }
       
        private void preencherPercentuais() {
                Integer ultimoDiaDoMes = DataUtils.getUltimoDiaDoMesAtual().getDate();
                Integer diaAtual = DataUtils.getDataAtual().getDate();
                setPercentualPercorridoMesAtual(new Double(100*diaAtual/ultimoDiaDoMes));
        }
       
        public void consultarRankings() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                consultarRankingVendedores();
                                consultarRankingLojas();
                        }
                });
        }
       
        public RankingVendedorDTO retornarVendedorPelaColocacao(Integer colocacaoVendedor) {
                Integer colocacao = 1;
                for (RankingVendedorDTO rankingVendedorDTO : entidade.getRankingVendedores()) {
                        if (colocacao.equals(colocacaoVendedor)) {
                                rankingVendedorDTO.setUsuario(usuarioService.consultarUsuarioPorPessoa(rankingVendedorDTO.getVendedor().getPessoa()));
                                return rankingVendedorDTO;
                        }
                        colocacao++;
                }
                return null;
        }
       
        public RankingLojaDTO retornarLojaPelaColocacao(Integer colocacaoLoja) {
                Integer colocacao = 1;
                for (RankingLojaDTO rankingLojaDTO : entidade.getRankingLojas()) {
                        if (colocacao.equals(colocacaoLoja)) {
                                return rankingLojaDTO;
                        }
                        colocacao++;
                }
                return null;
        }
       
}