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.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;
}
}