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