package br.com.ec.controller.managedbean;
import java.io.Serializable;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import br.com.ec.controller.managedbean.consultademanda.PessoaConsultaPorDemanda;
import br.com.ec.core.generic.GenericService;
import br.com.ec.domain.dto.ColaboradorDTO;
import br.com.ec.domain.dto.ParametrosConsultaPessoaDTO;
import br.com.ec.domain.model.Funcionario;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.tipos.TipoColaborador;
import br.com.ec.domain.service.funcionario.FuncionarioService;
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.web.generic.AbstractBean;
@Named
@Scope
("view")
public class ColaboradorBean
extends AbstractBean
<ColaboradorDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private ParametrosConsultaPessoaDTO parametrosConsultaPessoaDTO
;
private PessoaConsultaPorDemanda lazy
;
private FuncionarioService funcionarioService
;
/*
private UsuarioService usuarioService;
private VendaService vendaService;
private VendedorService vendedorService;
private VigenciaService vigenciaService;
private AvaliacaoFuncionarioService avaliacaoFuncionarioService;
private Vigencia vigenciaAtual;
private Vigencia vigenciaAnterior;
private ColaboradorDTO resumoAntigo;
private ColaboradorDTO resumoPromocaoInterna;
private ColaboradorDTO resumoPromocaoInternaAnterior;
private ContextoSeguranca contextoSeguranca;
List<Vigencia> ultimasVigencias;
private BarChartModel historico;
private BarChartModel historicoPercentual;
*/
@Inject
public ColaboradorBean
(PessoaConsultaPorDemanda lazy,
FuncionarioService funcionarioService,
//UsuarioService usuarioService, VendaService vendaService, VendedorService vendedorService,
//VigenciaService vigenciaService, AvaliacaoFuncionarioService avaliacaoFuncionarioService,
ContextoSeguranca contextoSeguranca
) {
this.
lazy = lazy
;
this.
funcionarioService = funcionarioService
;
/*
this.usuarioService = usuarioService;
this.vendaService = vendaService;
this.vendedorService = vendedorService;
this.vigenciaService = vigenciaService;
this.avaliacaoFuncionarioService = avaliacaoFuncionarioService;
this.contextoSeguranca = contextoSeguranca;
*/
}
@
Override
public ColaboradorDTO getId
() {
return getEntidade
();
}
@
Override
public GenericService
<ColaboradorDTO
> getService
() {
return null;
}
@
Override
public void limparEntidade
() {
setEntidade
(new ColaboradorDTO
());
}
public ParametrosConsultaPessoaDTO getParametrosConsultaPessoaDTO
() {
return parametrosConsultaPessoaDTO
;
}
public void setParametrosConsultaPessoaDTO
(ParametrosConsultaPessoaDTO parametrosConsultaPessoaDTO
) {
this.
parametrosConsultaPessoaDTO = parametrosConsultaPessoaDTO
;
}
public PessoaConsultaPorDemanda getLazy
() {
return lazy
;
}
public void setLazy
(PessoaConsultaPorDemanda lazy
) {
this.
lazy = lazy
;
}
public void prepararConsultaDemanda
() {
lazy.
setarParametrosConsulta(getParametrosConsultaPessoaDTO
());
}
public TipoColaborador
[] getTiposColaborador
() {
return TipoColaborador.
values();
}
@
Override
public void preCarregamento
() {
parametrosConsultaPessoaDTO =
new ParametrosConsultaPessoaDTO
();
parametrosConsultaPessoaDTO.
setEntidade(new Pessoa
());
parametrosConsultaPessoaDTO.
setConsultarColaboradores(ConstantesSEC.
Pessoa.
CONSULTAR_COLABORADORES_C);
prepararConsultaDemanda
();
limparEntidade
();
}
public Funcionario consultarFuncionarioPorPessoa
(Pessoa pessoa
) {
return funcionarioService.
consultarFuncionarioPorPessoa(pessoa
);
}
/*
@Override
public void preCarregamento() {
setUltimasVigencias(vigenciaService.consultarUltimasVigencias());
Usuario usuarioSelecionado = usuarioService.consultarPorId(contextoSeguranca.obterUsuario());
if (!getUltimasVigencias().isEmpty()) {
if (getUltimasVigencias().size() >= 1) {
setVigenciaAtual(retornarVigenciaDoPeriodo(getUltimasVigencias(), DataUtils.getDataAtual()));
ColaboradorDTO colaborador = new ColaboradorDTO();
colaborador.setUsuario(usuarioSelecionado);
colaborador.setRankingVendedor(vendaService.consultarRankingVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()), getVigenciaAtual(), true));
setEntidade(colaborador);
colaborador.getRankingVendedor().setPercentualMetaMensal(calcularPorcentagemDaMetaMensal());
colaborador.getRankingVendedor().setPercentualMetaMensalVivo(calcularPorcentagemDaMetaMensalVivo());
colaborador.getRankingVendedor().setPercentualMetaDiaria(calcularPorcentagemDaMetaDiaria());
}
if (getUltimasVigencias().size() >= 2) {
Date dataAnterior = DataUtils.acrescentarMeses(DataUtils.getDataAtual(), -1);
setVigenciaAnterior(retornarVigenciaDoPeriodo(getUltimasVigencias(), dataAnterior));
ColaboradorDTO colaboradorAnterior = new ColaboradorDTO();
colaboradorAnterior.setUsuario(usuarioSelecionado);
colaboradorAnterior.setRankingVendedor(vendaService.consultarRankingVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()), getVigenciaAnterior(), true));
setResumoAntigo(colaboradorAnterior);
}
}
ColaboradorDTO colaboradorPromocaoInterna = new ColaboradorDTO();
colaboradorPromocaoInterna.setUsuario(usuarioSelecionado);
colaboradorPromocaoInterna.setRankingVendedor(vendaService.consultarRankingPromocaoInternaDoVendedor(vendedorService.consultarVendedorPorPessoa(usuarioSelecionado.getPessoa()),
DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()),
DataUtils.getDataComHorarioMaximo(DataUtils.getUltimoDiaDoMesAtual())));
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())));
setResumoPromocaoInternaAnterior(colaboradorPromocaoInternaAnterior);
}
private Vigencia retornarVigenciaDoPeriodo(List<Vigencia> ultimasVigencias, Date dataAtual) {
for (Vigencia vigencia : ultimasVigencias) {
if (vigencia.getDataInicio().before(dataAtual) && vigencia.getDataFim().after(dataAtual)) {
return vigencia;
}
}
return null;
}
@Override
public GenericService<ColaboradorDTO> getService() {
return null;
}
@Override
public ColaboradorDTO getEntidade() {
return entidade;
}
public Vigencia getVigenciaAtual() {
return vigenciaAtual;
}
public void setVigenciaAtual(Vigencia vigenciaAtual) {
this.vigenciaAtual = vigenciaAtual;
}
public Vigencia getVigenciaAnterior() {
return vigenciaAnterior;
}
public void setVigenciaAnterior(Vigencia vigenciaAnterior) {
this.vigenciaAnterior = vigenciaAnterior;
}
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 BarChartModel getHistorico() {
if (VerificadorUtil.estaNulo(historico)) {
consultarHistorico();
}
return historico;
}
public void setHistorico(BarChartModel historico) {
this.historico = historico;
}
public BarChartModel getHistoricoPercentual() {
if (VerificadorUtil.estaNulo(historicoPercentual)) {
consultarHistoricoPercentual();
}
return historicoPercentual;
}
public void setHistoricoPercentual(BarChartModel historicoPercentual) {
this.historicoPercentual = historicoPercentual;
}
public Double calcularPorcentagemDaMetaMensal() {
return verificarMetas(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensal(),
getEntidade().getRankingVendedor().getValorTotalVendido()) : 0.0;
}
public Double calcularPorcentagemDaMetaMensalVivo() {
return verificarMetasVivo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
consultarPorcentagem(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensalVivo(),
getEntidade().getRankingVendedor().getValorTotalVendidoVivo()) : 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";
}
public String retornarEstiloMetaMensalVivo() {
return verificarMetasVivo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario()) ?
retornarEstilo(getEntidade().getRankingVendedor().getAvaliacaoFuncionario().getValorMetaMensalVivo(),
getEntidade().getRankingVendedor().getValorTotalVendidoVivo()) : "red-intense";
}
private boolean verificarMetas(AvaliacaoFuncionario avaliacaoFuncionario) {
if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getValorMetaMensal())) {
return true;
}
}
return false;
}
private boolean verificarMetasVivo(AvaliacaoFuncionario avaliacaoFuncionario) {
if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getValorMetaMensalVivo())) {
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;
}
public void consultarHistorico() {
ParametrosRelatorioVendasDTO parametrosRelatorioVendas = new ParametrosRelatorioVendasDTO();
parametrosRelatorioVendas.iniciarDatasAtuais();
if (VerificadorUtil.naoEstaNulo(getEntidade())) {
parametrosRelatorioVendas.setVendedor(getEntidade().getRankingVendedor().getVendedor());
ParametrosConsultaVendasDTO parametrosConsulta = new ParametrosConsultaVendasDTO(parametrosRelatorioVendas);
historico = new BarChartModel();
historico.setShowPointLabels(true);
historico.setDatatipFormat("<span>R$ %2$d</span><span style='display:none;'>%2$d</span>");
historico.setShowDatatip(true);
historico.setTitle("");
Axis xAxis = historico.getAxis(AxisType.X);
xAxis.setLabel("MESES");
Axis yAxis = historico.getAxis(AxisType.Y);
yAxis.setLabel("VALORES");
Integer mesAtual = new Integer(parametrosRelatorioVendas.getMes());
Integer anoAtual = new Integer(parametrosRelatorioVendas.getAno());
Integer quantidadeMesesAnteriores = 13;
mesAtual = mesAtual - quantidadeMesesAnteriores + 1;
if (mesAtual <= 0) {
mesAtual = mesAtual + 12;
anoAtual--;
}
ChartSeries linha = new ChartSeries();
for (int mes = 1; mes <= quantidadeMesesAnteriores; quantidadeMesesAnteriores--) {
if (mesAtual == 13) {
mesAtual = 1;
anoAtual++;
}
Double valorAcumulado = new Double(0.0);
Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, mesAtual - 1, anoAtual));
parametrosConsulta.setDataInicial(dataInicial.getTime());
int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
parametrosConsulta.setDataFinal(DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, mesAtual - 1, anoAtual)).getTime());
parametrosConsulta.setIndicadorComissionado(true);
valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
String descricaoLinha = mesAtual.toString() + "/" + anoAtual;
linha.set(descricaoLinha, valorAcumulado);
mesAtual++;
}
historico.addSeries(linha);
}
}
public void consultarHistoricoPercentual() {
ParametrosRelatorioVendasDTO parametrosRelatorioVendas = new ParametrosRelatorioVendasDTO();
parametrosRelatorioVendas.iniciarDatasAtuais();
if (VerificadorUtil.naoEstaNulo(getEntidade())) {
parametrosRelatorioVendas.setVendedor(getEntidade().getRankingVendedor().getVendedor());
ParametrosConsultaVendasDTO parametrosConsulta = new ParametrosConsultaVendasDTO(parametrosRelatorioVendas);
historicoPercentual = new BarChartModel();
historicoPercentual.setShowPointLabels(true);
historicoPercentual.setDatatipFormat("<span>%2$d%</span><span style='display:none;'>%2$d</span>");
historicoPercentual.setShowDatatip(true);
historicoPercentual.setTitle("");
Axis xAxis = historicoPercentual.getAxis(AxisType.X);
xAxis.setLabel("MESES");
Axis yAxis = historicoPercentual.getAxis(AxisType.Y);
yAxis.setLabel("PERCENTUAIS");
Integer mesAtual = new Integer(parametrosRelatorioVendas.getMes());
Integer anoAtual = new Integer(parametrosRelatorioVendas.getAno());
Integer quantidadeMesesAnteriores = 13;
mesAtual = mesAtual - quantidadeMesesAnteriores + 1;
if (mesAtual <= 0) {
mesAtual = mesAtual + 12;
anoAtual--;
}
ChartSeries linha = new ChartSeries();
for (int mes = 1; mes <= quantidadeMesesAnteriores; quantidadeMesesAnteriores--) {
if (mesAtual == 13) {
mesAtual = 1;
anoAtual++;
}
Double valorAcumulado = new Double(0.0);
Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, mesAtual - 1, anoAtual));
parametrosConsulta.setDataInicial(dataInicial.getTime());
int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
parametrosConsulta.setDataFinal(DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, mesAtual - 1, anoAtual)).getTime());
parametrosConsulta.setIndicadorComissionado(true);
valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
String descricaoLinha = mesAtual.toString() + "/" + anoAtual;
AvaliacaoFuncionario avaliacaoFuncionario = avaliacaoFuncionarioService.consultarAvaliacaoFuncionarioPelaData(parametrosRelatorioVendas.getVendedor(), DataUtils.getDataComHorarioMinimo(parametrosConsulta.getDataFinal()));
Double percentualMetaMensal = 0.0;
if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario)) {
percentualMetaMensal = avaliacaoFuncionario.retornarPercentualRealizado(valorAcumulado);
}
linha.set(descricaoLinha, percentualMetaMensal * 100);
mesAtual++;
}
historicoPercentual.addSeries(linha);
}
}
public String produtosPromocaoInterna() {
return ConstantesSEC.ProdutosPromocaoInterna.PRODUTOS.replace("'", "");
}
*/
}