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.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

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

import org.springframework.context.annotation.Scope;

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.ColaboradorDTO;
import br.com.ec.domain.model.AvaliacaoFuncionario;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.Vigencia;
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
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.domain.service.vigencia.VigenciaService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.web.generic.AbstractBean;

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

        private static final long serialVersionUID = 1L;
       
        private UsuarioService usuarioService;
        private VendaService vendaService;
        private VendedorService vendedorService;
        private VigenciaService vigenciaService;
       
        private ColaboradorDTO resumoAntigo;
        private ColaboradorDTO resumoPromocaoInterna;
        private ColaboradorDTO resumoPromocaoInternaAnterior;
       
        private ContextoSeguranca contextoSeguranca;
       
        List<Vigencia> ultimasVigencias;

        @Inject
        public ColaboradorVivoBean(UsuarioService usuarioService, VendaService vendaService, VendedorService vendedorService,
                        VigenciaService vigenciaService, ContextoSeguranca contextoSeguranca) {
                this.usuarioService = usuarioService;
                this.vendaService = vendaService;
                this.vendedorService = vendedorService;
                this.vigenciaService = vigenciaService;
                this.contextoSeguranca = contextoSeguranca;
        }
       
        @Override
        public void preCarregamento() {
                setUltimasVigencias(vigenciaService.consultarUltimasVigencias());
                Usuario usuarioSelecionado = usuarioService.consultarPorId(contextoSeguranca.obterUsuario());
               
                if (!getUltimasVigencias().isEmpty()) {
                        if (getUltimasVigencias().size() >= 1) {
                                Vigencia primeiraVigencia = getUltimasVigencias().get(0);
                                ColaboradorDTO colaborador = new ColaboradorDTO();
                                colaborador.setUsuario(usuarioSelecionado);
                                colaborador.setRankingVendedor(vendaService.consultarRankingVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()), primeiraVigencia, null));
                                setEntidade(colaborador);
                                colaborador.getRankingVendedor().setPercentualMetaMensal(calcularPorcentagemDaMetaMensal());
                                colaborador.getRankingVendedor().setPercentualMetaDiaria(calcularPorcentagemDaMetaDiaria());
                        }
                        if (getUltimasVigencias().size() >= 2) {
                                Vigencia segundaVigencia = getUltimasVigencias().get(1);
                                ColaboradorDTO colaboradorAnterior = new ColaboradorDTO();
                                colaboradorAnterior.setUsuario(usuarioSelecionado);
                                colaboradorAnterior.setRankingVendedor(vendaService.consultarRankingVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()), segundaVigencia, null));
                                setResumoAntigo(colaboradorAnterior);
//                              colaboradorAnterior.getRankingVendedor().setPercentualMetaMensal(calcularPorcentagemDaMetaMensal());
//                              colaboradorAnterior.getRankingVendedor().setPercentualMetaDiaria(calcularPorcentagemDaMetaDiaria());
                        }
                }
                       
                ColaboradorDTO colaboradorPromocaoInterna = new ColaboradorDTO();
                colaboradorPromocaoInterna.setUsuario(usuarioSelecionado);
                colaboradorPromocaoInterna.setRankingVendedor(vendaService.consultarRankingPromocaoInternaDoVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()),
                                DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()),
                                DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual()),
                                ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS));
                setResumoPromocaoInterna(colaboradorPromocaoInterna);
               
                ColaboradorDTO colaboradorPromocaoInternaAnterior = new ColaboradorDTO();
                colaboradorPromocaoInternaAnterior.setUsuario(usuarioSelecionado);
                colaboradorPromocaoInternaAnterior.setRankingVendedor(vendaService.consultarRankingPromocaoInternaDoVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()),
                                DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAnterior()),
                                DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAnterior()),
                                ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS_MES_ANTERIOR));
                setResumoPromocaoInternaAnterior(colaboradorPromocaoInternaAnterior);
        }
       
        @Override
        public void limparEntidade() {
                setEntidade(new ColaboradorDTO());
        }

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

        @Override
        public ColaboradorDTO getId() {
                return getEntidade();
        }
       
        public ColaboradorDTO getResumoAntigo() {
                return resumoAntigo;
        }
        public void setResumoAntigo(ColaboradorDTO resumoAntigo) {
                this.resumoAntigo = resumoAntigo;
        }
       
        public ColaboradorDTO getResumoPromocaoInterna() {
                return resumoPromocaoInterna;
        }
        public void setResumoPromocaoInterna(ColaboradorDTO resumoPromocaoInterna) {
                this.resumoPromocaoInterna = resumoPromocaoInterna;
        }
       
        public ColaboradorDTO getResumoPromocaoInternaAnterior() {
                return resumoPromocaoInternaAnterior;
        }
        public void setResumoPromocaoInternaAnterior(ColaboradorDTO resumoPromocaoInternaAnterior) {
                this.resumoPromocaoInternaAnterior = resumoPromocaoInternaAnterior;
        }
       
        public List<Vigencia> getUltimasVigencias() {
                return ultimasVigencias;
        }
        public void setUltimasVigencias(List<Vigencia> ultimasVigencias) {
                this.ultimasVigencias = ultimasVigencias;
        }
       
        /***************************************************************/

        public Double calcularPorcentagemDaMetaMensal() {
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal(),
                                        getEntidade().getRankingVendedor().getValorTotalVendido()) : 0.0;
        }
       
        public Double calcularPorcentagemDaMetaDiaria() {
                Integer quantidadeDiasNoMes = new GregorianCalendar().getActualMaximum (Calendar.DAY_OF_MONTH);
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
                                consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal() / quantidadeDiasNoMes,
                                        getEntidade().getRankingVendedor().getValorTotalVendidoDoDia()) : 0.0;
        }
       
        public String retornarEstiloMetaDiaria() {
                Integer quantidadeDiasNoMes = new GregorianCalendar().getActualMaximum (Calendar.DAY_OF_MONTH);
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal() / quantidadeDiasNoMes,
                                        getEntidade().getRankingVendedor().getValorTotalVendidoDoDia()) : "red-intense";
        }
       
        public String retornarEstiloMetaMensal() {
                return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
                                retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal(),
                                        getEntidade().getRankingVendedor().getValorTotalVendido()) : "red-intense";
        }
       
        private boolean verificarMetas(AvaliacaoFuncionario avaliacaoFuncionario) {
                if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
                        if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getValorMetaMensal())) {
                                return true;
                        }
                }
                return false;
        }
       
        private String retornarEstilo(Double valorMetaMensal, Double valorTotal) {
                if (VerificadorUtil.naoEstaNuloOuVazio(valorMetaMensal)) {
                        Double percentualRealizado = valorTotal * 100 / valorMetaMensal;
                        if (percentualRealizado < 75) {
                                return "red-intense";
                        } else {
                                if (percentualRealizado < 100) {
                                        return "blue-madison";
                                } else {
                                        if (percentualRealizado < 125) {
                                                return "green-haze";
                                        } else {
                                                return "green-seagreen";
                                        }
                                }
                        }
                }
                return "purple";
        }
       
        private Double consultarPorcentagem(Double valorTotal, Double valor) {
                if (VerificadorUtil.naoEstaNuloOuVazio(valorTotal) && VerificadorUtil.naoEstaNuloOuVazio(valor)) {
                        return (valor * 100 / valorTotal) / 100;
                }
                return 0.0;
        }
       
        public Integer getQuantidadeMinimaComissaoPromocaoInterna() {
                return ConstantesSEC.ProdutosPromocaoInterna.QUANTIDADE_MINIMA_RECEBIMENTO;
        }
       
}