package br.com.ec.domain.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import br.com.ec.core.exception.NegocioException;
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.AnaliseComprasProdutosDTO;
import br.com.ec.domain.dto.AnaliseVendaProdutoDTO;
import br.com.ec.domain.dto.FornecedorDTO;
import br.com.ec.domain.dto.ProdutoDTO;
import br.com.ec.domain.model.Compra;
import br.com.ec.domain.service.CompraService;
import br.com.ec.domain.service.ParcelaService;
import br.com.ec.domain.service.ProdutoService;
import br.com.ec.repository.CompraRepository;
@Service
public class CompraServiceImpl
extends AbstractService
<Compra
> implements CompraService
{
private ParcelaService parcelaService
;
private ProdutoService produtoService
;
private CompraRepository compraRepository
;
@Autowired
public CompraServiceImpl
(Validador validador, ParcelaService parcelaService, ProdutoService produtoService,
CompraRepository compraRepository
) {
super(validador
);
this.
parcelaService = parcelaService
;
this.
produtoService = produtoService
;
this.
compraRepository = compraRepository
;
}
@
Override
protected GenericRepository
<Compra
> getRepository
() {
return compraRepository
;
}
@
Override
public AnaliseComprasProdutosDTO gerarComprasAutomaticamente
(FornecedorDTO fornecedorDTO
) {
if (VerificadorUtil.
estaNulo(fornecedorDTO
)) {
throw new NegocioException
("INFORME O FORNECEDOR");
}
AnaliseComprasProdutosDTO analiseComprasProdutosDTO =
new AnaliseComprasProdutosDTO
();
List<AnaliseVendaProdutoDTO
> analisesVendaProdutoDTO =
new ArrayList<AnaliseVendaProdutoDTO
>();
// CONSULTAR TODOS OS PRODUTOS DO FORNECEDOR INFORMADO
// LISTAR PRODUTOS SEM PEDIDOS DE 'NÃO COMPRAR'
List<ProdutoDTO
> produtosParaAnalise = produtoService.
consultarProdutosDoFornecedor(fornecedorDTO.
getSequencial());
for (ProdutoDTO produtoDTO : produtosParaAnalise
) {
AnaliseVendaProdutoDTO analiseVendaProdutoDTO =
new AnaliseVendaProdutoDTO
();
analiseVendaProdutoDTO.
setProdutoDTO(produtoDTO
);
// VERIFICAR ÚLTIMA DATA DE COMPRA DO PRODUTO
// VERIFICAR QUANTIDADE DE VENDAS REALIZADAS EM 3 MESES, APÓS A ÚLTIMA DATA DE COMPRA
// VERIFICAR A QUANTIDADE DE PRODUTOS VENDIDOS POR MÊS EM 3 MESES OU ATÉ A DATA DA ÚLTIMA VENDA, A QUE FOR MENOR;
analiseVendaProdutoDTO.
setQuantidadeEstoque(5);
analiseVendaProdutoDTO.
setQuantidadeVendas(15);
analiseVendaProdutoDTO.
setQuantidadeDiasParaComprar(90);
analiseVendaProdutoDTO.
setQuantidadeVendasAposCompra(20);
analiseVendaProdutoDTO.
setDataUltimaCompra(DataUtils.
converterStringParaData("16/03/2024"));
analiseVendaProdutoDTO.
setDataUltimaVenda(DataUtils.
converterStringParaData("16/03/2024"));
analisesVendaProdutoDTO.
add(analiseVendaProdutoDTO
);
}
analiseComprasProdutosDTO.
setAnalisesVendaProdutoDTO(analisesVendaProdutoDTO
);
// SUGERIR A COMPRA DE PRODUTOS POR 90 DIAS, COM UM TEMPO DE ESTOQUE INFERIOR À 15 DIAS
/*
ProdutoDTO produtoDTO = new ProdutoDTO(new Long(35479), "032132", "KIT CARREGADOR VEICULAR CABO DE DADOS MICRO USB V8 3.4A 1M HREBOS HS-98");
analiseVendaProdutoDTO.setProdutoDTO(produtoDTO);
analiseVendaProdutoDTO.setQuantidadeEstoque(5);
analiseVendaProdutoDTO.setQuantidadeVendas(15);
analiseVendaProdutoDTO.setQuantidadeDiasParaComprar(90);
analiseVendaProdutoDTO.setQuantidadeVendasAposCompra(20);
analiseVendaProdutoDTO.setDataUltimaCompra(DataUtils.converterStringParaData("16/03/2024"));
analiseVendaProdutoDTO.setDataUltimaVenda(DataUtils.converterStringParaData("16/03/2024"));
// FAZER EXEMPLOS SEM O PEDIDO DE COMPRA
// ProdutoPedidoCompraDTO produtoPedidoCompraDTO = new ProdutoPedidoCompraDTO();
analiseVendaProdutoDTO.setProdutoPedidoCompraDTO(null);
FornecedorDTO fornecedorConsultaDTO = new FornecedorDTO();
analiseVendaProdutoDTO.setFornecedorDTO(fornecedorConsultaDTO);
analisesVendaProdutoDTO.add(analiseVendaProdutoDTO);
analiseComprasProdutosDTO.setAnalisesVendaProdutoDTO(analisesVendaProdutoDTO);
*/
return analiseComprasProdutosDTO
;
}
/*
@Override
public Compra consultarCompraDaConta(Conta conta) {
return compraRepository.consultarCompraDaConta(conta);
}
@Override
public void adicionarParcelasNaCompra(Compra compra, List<Parcela> listaParcelas) {
parcelaService.cadastrarContaComParcelasNaCompra(compra, listaParcelas);
alterar(compra);
}
@Override
public void vincularConta(Compra compra, Conta conta) {
if (VerificadorUtil.estaNulo(conta)) {
throw new NegocioException("CONTA NÃO EXISTE");
}
compra.setConta(conta);
alterar(compra);
}
@Override
public void desvincularConta(Compra compra) {
compra.setConta(null);
alterar(compra);
}
@Override
public void cadastrar(Compra compra) {
if (VerificadorUtil.estaNulo(compra.getFornecedor())) {
throw new NegocioException("OBRIGATÓRIO INFORMAR O FORNECEDOR");
}
super.cadastrar(compra);
}
*/
}