package br.com.ec.domain.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.springframework.stereotype.Service;
import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.AlertasGeralDTO;
import br.com.ec.domain.dto.RankingModeloDTO;
import br.com.ec.domain.dto.RankingProdutoDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaModelosMaisVendidosDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaProdutosVendidosDTO;
import br.com.ec.domain.model.SubtipoProduto;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.service.AlertasService;
import br.com.ec.domain.service.LojaService;
import br.com.ec.domain.service.ModeloService;
import br.com.ec.domain.service.SubtipoProdutoService;
import br.com.ec.domain.service.VendaService;
@Service
public class AlertasServiceImpl
extends AbstractService
<AlertasGeralDTO
> implements AlertasService
{
private LojaService lojaService
;
private ModeloService modeloService
;
private SubtipoProdutoService subtipoProdutoService
;
private VendaService vendaService
;
public AlertasServiceImpl
(Validador validador, LojaService lojaService, ModeloService modeloService, SubtipoProdutoService subtipoProdutoService,
VendaService vendaService
) {
super(validador
);
this.
lojaService = lojaService
;
this.
modeloService = modeloService
;
this.
subtipoProdutoService = subtipoProdutoService
;
this.
vendaService = vendaService
;
}
@
Override
protected GenericRepository
<AlertasGeralDTO
> getRepository
() {
return null;
}
@
Override
public AlertasGeralDTO consultarAlertasComprasGeral
(AlertasGeralDTO alertasGeralDTO
) {
// CONSULTAR TODOS OS PRODUTOS VENDIDOS NOS ULTIMOS 90 DIAS
List<RankingProdutoDTO
> rankingProdutosDTO =
new ArrayList<RankingProdutoDTO
>();
ParametrosConsultaProdutosVendidosDTO parametrosConsulta =
new ParametrosConsultaProdutosVendidosDTO
();
parametrosConsulta.
setDataFinal(DataUtils.
getDataAtual());
parametrosConsulta.
setDataInicial(DataUtils.
acrescentarDias(DataUtils.
getDataAtual(), alertasGeralDTO.
getQuantidadeDiasVendas()*-
1));
for (TipoProduto tipoProdutoSelecionado : alertasGeralDTO.
getTiposProdutoSelecionados()) {
parametrosConsulta.
setTipoProduto(tipoProdutoSelecionado.
getValor());
rankingProdutosDTO.
addAll(vendaService.
consultarProdutosVendidos(parametrosConsulta
));
}
for (RankingProdutoDTO rankingProdutoDTO : rankingProdutosDTO
) {
System.
out.
print(rankingProdutoDTO.
getProduto().
getCodigo() +
" : " + rankingProdutoDTO.
getProduto().
getDescricaoCompleta() +
" :: ");
if (VerificadorUtil.
naoEstaNulo(rankingProdutoDTO.
getProduto().
getSubtipoProduto())) {
System.
out.
print(rankingProdutoDTO.
getProduto().
getSubtipoProduto().
getDescricao());
} else {
System.
out.
print("NÃO TEM SUBTIPO");
}
System.
out.
println(" - VENDAS: " + rankingProdutoDTO.
getQuantidadeVendas() +
", ESTOQUE: " + rankingProdutoDTO.
getQuantidadeEstoque());
}
// VERIFICAR ITENS POR TIPO, SEM SUBTIPO
// CONSULTAR ITENS SEM SUBTIPO: TOTAL DE VENDAS (90 DIAS), TOTAL DE ESTOQUE, TEMPO DE ESTOQUE E QNT PARA COMPRAR (90 DIAS)
/*
List<SubtipoProduto> subtiposProduto = new ArrayList<SubtipoProduto>();
for (TipoProduto tipoProduto : tiposProduto) {
if (!tipoProduto.getValor().equals(TipoProduto.CAPA.getValor())) {
subtiposProduto.addAll(subtipoProdutoService.consultarPorTipo(tipoProduto.getValor()));
}
}
*/
// ALERTA PARA CADA PRODUTO COM MENOS DE 15 DIAS
// LISTA DE TODOS OS SUBTIPOS DO TIPO
// CONSULTAR ITENS DO SUBTIPO: TOTAL DE VENDAS (90 DIAS), TOTAL DE ESTOQUE, TEMPO DE ESTOQUE E QNT PARA COMPRAR (90 DIAS)
// ALERTA PARA CADA SUBTIPO COM MENOS DE 15 DIAS DE ESTOQUE
// PERMITIR DETALHAR A LISTA DOS ITENS DO SUBTIPO
return alertasGeralDTO
;
}
private List<RankingModeloDTO
> consultarModelosMaisVendidos
(AlertasGeralDTO alertasGeralDTO
) {
List<RankingModeloDTO
> modelosMaisVendidos =
new ArrayList<RankingModeloDTO
>();
ParametrosConsultaModelosMaisVendidosDTO parametrosConsulta =
new ParametrosConsultaModelosMaisVendidosDTO
();
parametrosConsulta.
setDataFinal(DataUtils.
getDataAtual());
parametrosConsulta.
setDataInicial(DataUtils.
acrescentarDias(DataUtils.
getDataAtual(), alertasGeralDTO.
getQuantidadeDiasVendas()*-
1));
modelosMaisVendidos.
addAll(vendaService.
consultarRankingModelos(parametrosConsulta, alertasGeralDTO.
getAdicionarModelosFavoritosSemVendas()));
return modelosMaisVendidos
;
}
}