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.StringUtil;
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.model.Vendedor;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.venda.VendaService;
import br.com.ec.domain.service.vendedor.VendedorService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.util.DataUtil;
@Named
@Scope
("view")
public class CockpitBean
extends AbstractBean
<CockpitDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private VendaService vendaService
;
private VendedorService vendedorService
;
private LojaService lojaService
;
private Date dataInicial
;
private Date dataFinal
;
private Double percentualVendidoMesAtual
;
private Double percentualPercorridoMesAtual
;
private Loja lojaParcial
;
private Loja lojaVendedores
;
private String parcialEmTexto
;
@Inject
public CockpitBean
(VendaService vendaService, VendedorService vendedorService, LojaService lojaService
) {
this.
vendaService = vendaService
;
this.
vendedorService = vendedorService
;
this.
lojaService = lojaService
;
}
@
Override
public void preCarregamento
() {
setDataInicial
(DataUtils.
getPrimeiroDiaDoMesAtual());
setDataFinal
(DataUtils.
getUltimoDiaDoMesAtual());
preencherPercentuais
();
}
@
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
> rankingVendedorVivo =
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
);
}
if (vendedor.
getValorTotalVendidoVivo() > new Double(0.0)) {
rankingVendedorVivo.
add(vendedor
);
}
}
entidade.
setRankingVendedores(rankingVendedor
);
entidade.
setRankingVendedoresVivo(rankingVendedorVivo
);
}
public void consultarRankingLojas
() {
if (VerificadorUtil.
estaNulo(getEntidade
())) {
entidade =
new CockpitDTO
();
}
entidade.
setRankingLojas(vendaService.
consultarRankingLojas(getDataInicial
(), getDataFinal
()));
entidade.
setRankingLojasExtras(vendaService.
consultarRankingLojasExtras(getDataInicial
(), getDataFinal
()));
Double valorTotalVendido =
new Double(0.0);
for (RankingLojaDTO rankingLoja : entidade.
getRankingLojas()) {
valorTotalVendido = valorTotalVendido + rankingLoja.
getValorTotalVendido();
}
setPercentualVendidoMesAtual
(new Double(valorTotalVendido/entidade.
getValorTotalMeta()));
}
public void consultarRankingPromocaoInterna
() {
if (VerificadorUtil.
estaNulo(getEntidade
())) {
entidade =
new CockpitDTO
();
}
entidade.
setRankingPromocaoInterna(vendaService.
consultarRankingPromocaoInterna(getDataInicial
(), getDataFinal
()));
}
private void preencherPercentuais
() {
Integer ultimoDiaDoMes = DataUtils.
getUltimoDiaDoMesAtual().
getDate();
Integer diaAtual = DataUtils.
getDataAtual().
getDate();
setPercentualPercorridoMesAtual
(new Double(100*diaAtual/ultimoDiaDoMes
));
}
public void consultarRankings
() {
consultarRankingVendedores
();
consultarRankingLojas
();
consultarRankingPromocaoInterna
();
}
public void consultarParciais
() {
StringBuilder parcial =
new StringBuilder();
List<Loja
> lojas =
new ArrayList<Loja
>();
if (VerificadorUtil.
estaNulo(getLojaParcial
())) {
lojas.
addAll(lojaService.
listarLojasAtivas());
} else {
lojas.
add(getLojaParcial
());
}
for (Loja loja : lojas
) {
parcial.
append("PARCIAL DE ");
parcial.
append(DataUtil.
retornarDataFormatadaEmFormatoTexto("dd/MM", getDataInicial
()));
parcial.
append(" A ");
parcial.
append(DataUtil.
retornarDataFormatadaEmFormatoTexto("dd/MM", getDataFinal
()));
parcial.
append(": ");
parcial.
append(loja.
getDescricao());
parcial.
append("\n");
List<Vendedor
> vendedores = vendedorService.
consultarVendedoresColaboradoresAtivos(loja
);
for (Vendedor vendedor : vendedores
) {
for (RankingVendedorDTO rankingVendedor : getEntidade
().
getRankingVendedores()) {
if (loja.
equals(vendedor.
getLoja()) && vendedor.
equals(rankingVendedor.
getVendedor())) {
parcial.
append("\n");
parcial.
append(rankingVendedor.
getVendedor().
getNome());
parcial.
append(" = ");
if (VerificadorUtil.
naoEstaNulo(rankingVendedor.
getPercentualMetaMensal())) {
parcial.
append(StringUtil.
formatarPercentual(rankingVendedor.
getPercentualMetaMensal()));
} else {
parcial.
append("0");
}
parcial.
append(" (TICKET MÉDIO: R$");
parcial.
append(StringUtil.
formatarValor(rankingVendedor.
getTicketMedio()));
parcial.
append(", CONTAGENS: ");
parcial.
append(rankingVendedor.
getQuantidadeContagens());
parcial.
append(", PEDIDOS: ");
parcial.
append(rankingVendedor.
getQuantidadePedidos());
parcial.
append(", PEDIDOS INVÁLIDOS: ");
parcial.
append(rankingVendedor.
getQuantidadePedidosInvalidos());
parcial.
append(", ATENDIMENTOS: ");
parcial.
append(rankingVendedor.
getQuantidadeAtendimentos());
parcial.
append(")");
}
}
}
parcial.
append("\n\n");
for (RankingLojaDTO rankingLoja : getEntidade
().
getRankingLojas()) {
if (loja.
equals(rankingLoja.
getLoja())) {
parcial.
append("META DA LOJA: ");
parcial.
append(StringUtil.
formatarPercentual(rankingLoja.
getPercentualMetaMensal()));
}
}
parcial.
append("\n");
parcial.
append("META IDEAL: ATÉ DIA 10: 33%. ATÉ DIA 20: 66%");
if (VerificadorUtil.
estaNulo(getLojaParcial
())) {
parcial.
append("\n\n");
}
}
setParcialEmTexto
(parcial.
toString());
}
}