package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.domain.dto.DashboardLogisticaDTO;
import br.com.ec.domain.dto.LojaDTO;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Perfil;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.pendencia.PendenciaService;
import br.com.ec.domain.service.produto.ProdutoService;
import br.com.ec.domain.service.produtodaloja.ProdutoLojaService;
import br.com.ec.domain.service.transferencia.TransferenciaService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.web.generic.AbstractBean;
@Named
@Scope
("view")
public class DashboardLogisticaBean
extends AbstractBean
<DashboardLogisticaDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private LojaService lojaService
;
private ProdutoLojaService produtoLojaService
;
private ProdutoService produtoService
;
private PendenciaService pendenciaService
;
private TransferenciaService transferenciaService
;
private List<DashboardLogisticaDTO
> acompanhamentos
;
@Inject
public DashboardLogisticaBean
(LojaService lojaService, ProdutoLojaService produtoLojaService, ProdutoService produtoService,
PendenciaService pendenciaService, TransferenciaService transferenciaService
) {
this.
lojaService = lojaService
;
this.
produtoLojaService = produtoLojaService
;
this.
produtoService = produtoService
;
this.
pendenciaService = pendenciaService
;
this.
transferenciaService = transferenciaService
;
}
@PostConstruct
private void iniciarDashboard
() {
List<DashboardLogisticaDTO
> acompanhamentos =
new ArrayList<DashboardLogisticaDTO
>();
List<Loja
> lojas = lojaService.
listarLojasAtivasEspacoCaseEeCasaDasCapas();
for (Loja loja : lojas
) {
DashboardLogisticaDTO acompanhamento =
new DashboardLogisticaDTO
();
LojaDTO lojaDTO =
new LojaDTO
();
lojaDTO.
setSequencial(loja.
getSequencial());
lojaDTO.
setDescricao(loja.
getDescricao());
lojaDTO.
setLimitadorProdutos(loja.
getLimitadorProdutos());
acompanhamento.
setLojaDTO(lojaDTO
);
acompanhamento.
setQuantidadeEstoqueTotal(produtoLojaService.
consultarEstoqueTipoProdutoEeLoja(TipoProduto.
CAPA.
getValor(), loja.
getSequencial()));
acompanhamento.
setQuantidadePendencias(pendenciaService.
obterQuantidadePendenciasNaoFinalizadasPorLojaPerfilEePeriodo(loja,
new Perfil
(ConstantesSEC.
PERFIL_GERENTE_LOJISTICA_4),
null,
null));
acompanhamento.
setQuantidadeTransferenciasParaReceberAbertas(transferenciaService.
obterQuantidadeDeTransferenciasParaReceberAbertas(loja,
null,
null));
acompanhamento.
setQuantidadeContagensAbertas(produtoService.
quantidadeParaContagem(loja
));
acompanhamento.
setQuantidadeContagensRealizadas(produtoLojaService.
obterQuantidadeDeContagens(loja, DataUtils.
getDataAtual(), DataUtils.
getDataAtual()));
Date cincoDiasAntes = DataUtils.
acrescentarDias(DataUtils.
getDataAtual(), -
5);
acompanhamento.
setQuantidadeAlertaTransferenciasAbertasPorMaiorPeriodo(transferenciaService.
obterQuantidadeDeTransferenciasParaReceberAbertas(loja,
null, cincoDiasAntes
));
Date seteDiasAntes = DataUtils.
acrescentarDias(DataUtils.
getDataAtual(), -
7);
acompanhamento.
setQuantidadeAlertaPendenciasAbertasPorMaiorPeriodo(pendenciaService.
obterQuantidadePendenciasNaoFinalizadasPorLojaPerfilEePeriodo(loja,
new Perfil
(ConstantesSEC.
PERFIL_GERENTE_LOJISTICA_4),
null, seteDiasAntes
));
if (!loja.
getSequencial().
equals(ConstantesSEC.
SEQUENCIAL_CASA_DAS_CAPAS_17)) {
acompanhamento.
setQuantidadeAlertaModelosNaoFavoritos(produtoLojaService.
obterQuantidadeEstoqueModelosNaoFavoritos(TipoProduto.
CAPA.
getValor(), loja.
getSequencial()));
} else {
acompanhamento.
setQuantidadeAlertaModelosNaoFavoritos(0);
}
acompanhamentos.
add(acompanhamento
);
}
setAcompanhamentos
(acompanhamentos
);
}
@
Override
public void preCarregamento
() {
entidade =
new DashboardLogisticaDTO
();
parametrosConsulta =
new ParametrosConsulta
<DashboardLogisticaDTO
>();
parametrosConsulta.
setEntidade(entidade
);
}
@
Override
public void limparEntidade
() {
DashboardLogisticaDTO consolidado =
new DashboardLogisticaDTO
();
setEntidade
(consolidado
);
}
@
Override
public GenericService
<DashboardLogisticaDTO
> getService
() {
return null;
}
@
Override
public DashboardLogisticaDTO getEntidade
() {
return entidade
;
}
@
Override
public DashboardLogisticaDTO getId
() {
return getEntidade
();
}
public List<DashboardLogisticaDTO
> getAcompanhamentos
() {
return acompanhamentos
;
}
public void setAcompanhamentos
(List<DashboardLogisticaDTO
> acompanhamentos
) {
this.
acompanhamentos = acompanhamentos
;
}
}