package br.com.ec.domain.service.impl;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.ExtratoEntregasDTO;
import br.com.ec.domain.model.Pedido;
import br.com.ec.domain.service.PedidoService;
import br.com.ec.domain.service.UsuarioService;
import br.com.ec.repository.PedidoRepository;
@Service
public class PedidoServiceImpl
extends AbstractService
<Pedido
> implements PedidoService
{
private UsuarioService usuarioService
;
private PedidoRepository pedidoRepository
;
@Autowired
public PedidoServiceImpl
(Validador validador, UsuarioService usuarioService, PedidoRepository pedidoRepository
) {
super(validador
);
this.
usuarioService = usuarioService
;
this.
pedidoRepository = pedidoRepository
;
}
@
Override
protected GenericRepository
<Pedido
> getRepository
() {
return pedidoRepository
;
}
@
Override
public ExtratoEntregasDTO consultarExtratoEntregas
(ExtratoEntregasDTO extratoEntregasDTO
) {
extratoEntregasDTO.
setEntregasDTO(pedidoRepository.
consultarEntregas(extratoEntregasDTO
));
return extratoEntregasDTO
;
}
@
Override
public Integer obterQuantidadePedidosPorSituacaoEePeriodo
(String tipoPedido,
String tipoSituacaoPedido,
Date dataInicial,
Date dataFinal
) {
return pedidoRepository.
obterQuantidadePedidosPorSituacaoEePeriodo(tipoPedido, tipoSituacaoPedido, dataInicial, dataFinal
);
}
/*
@Override
protected void regrasNegocioAlterar(Pedido pedido) {
super.regrasNegocioAlterar(pedido);
verificarParametros(pedido);
}
*/
/*
@Override
public Pedido consultarPedidoCompleto(Pedido pedido) {
return pedidoRepository.consultarPedidoCompleto(pedido);
}
@Override
public Pedido adicionarPedido(final Pedido pedido, final String senhaUsuario) {
verificarParametros(pedido);
pedido.setUsuarioPedido(usuarioService.consultarUsuarioPorSenha(senhaUsuario));
pedido.setDataPedido(DataUtils.getDataAtual());
pedido.setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
List<PedidoProduto> produtos = pedido.getProdutos();
if (produtos.isEmpty()) {
produtos = null;
}
pedido.setProdutos(null);
cadastrar(pedido);
pedido.setProdutos(produtos);
alterar(pedido);
return pedido;
}
@Override
public Long cadastrarPedidoVendaPersonalizada(Venda vendaCadastrada, ParametrosVendaDTO parametrosVendaDTO) {
Boolean cadastrarPedido = false;
for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getTipoPersonalizacao())) {
cadastrarPedido = true;
break;
}
if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getEstampa())) {
cadastrarPedido = true;
break;
}
}
if (cadastrarPedido) {
Pedido pedido = new Pedido();
pedido.setTipoPedido(TipoPedido.PERSONALIZACAO.getValor());
pedido.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
pedido.setDataPedido(DataUtils.getDataAtual());
pedido.setLoja(vendaCadastrada.getLoja());
if (VerificadorUtil.estaNulo(vendaCadastrada.getCliente())) {
pedido.setContatoCliente(vendaCadastrada.getObservacao());
}
pedido.setCliente(vendaCadastrada.getCliente());
pedido.setObservacao(vendaCadastrada.getObservacao());
pedido.setUsuarioPedido(usuarioService.consultarUsuarioPorPessoa(vendaCadastrada.getVendedor().getPessoa()));
pedido.setVenda(vendaCadastrada);
this.cadastrar(pedido);
List<PedidoHistorico> historico = new ArrayList<PedidoHistorico>();
PedidoHistorico pedidoHistorico = new PedidoHistorico();
pedidoHistorico.setPedido(pedido);
pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
pedidoHistorico.setObservacao("VENDA: " + vendaCadastrada.getSequencial());
pedidoHistorico.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
pedidoHistorico.setUsuario(pedido.getUsuarioPedido());
historico.add(pedidoHistorico);
pedido.setHistorico(historico);
List<PedidoProduto> pedidosProduto = new ArrayList<PedidoProduto>();
for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
if ((VerificadorUtil.naoEstaNuloOuVazio(lancamento.getTipoPersonalizacao())) ||
(VerificadorUtil.naoEstaNuloOuVazio(lancamento.getEstampa()))) {
PedidoProduto pedidoProduto = new PedidoProduto();
pedidoProduto.setPedido(pedido);
pedidoProduto.setProduto(lancamento.getProduto());
pedidoProduto.setValor(lancamento.getValorVenda());
pedidoProduto.setEstampa(lancamento.getEstampa());
pedidoProduto.setTipoPersonalizacao(lancamento.getTipoPersonalizacao());
pedidoProduto.setObservacao(lancamento.getObservacao());
pedidosProduto.add(pedidoProduto);
}
}
pedido.setProdutos(pedidosProduto);
this.alterar(pedido);
return pedido.getSequencial();
}
return null;
}
private void verificarParametros(final Pedido pedido) {
if (VerificadorUtil.estaNulo(pedido.getCliente()) &&
VerificadorUtil.estaNuloOuVazio(pedido.getContatoCliente())) {
throw new NegocioException("Informe o contato do cliente.");
}
if (VerificadorUtil.estaNulo(pedido.getProdutos())) {
pedido.setProdutos(new ArrayList<PedidoProduto>());
}
if (pedido.getProdutos().isEmpty() && (VerificadorUtil.estaNulo(pedido.getModelo()))) {
throw new NegocioException("Informe algum produto ou o modelo");
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getProdutos())) {
if (pedido.getProdutos().size() == 1) {
Produto primeiroProduto = pedido.getProdutos().get(0).getProduto();
pedido.setModelo(primeiroProduto.getModelo());
pedido.setTipoProduto(primeiroProduto.getTipo());
pedido.setGenero(primeiroProduto.getGenero());
pedido.setEstiloProduto(primeiroProduto.getEstilo());
pedido.setCorProduto(primeiroProduto.getCor());
}
}
if (VerificadorUtil.estaNuloOuVazio(pedido.getTipoSituacao())) {
pedido.setTipoSituacao(TipoSituacaoPedido.NOVO.getValor());
}
}
@Override
public List<RankingPedidoDTO> consultarRankingPedidosNaoAtendidos(String generoPedidos, Date dataInicial, Date dataFinal) {
return pedidoRepository.consultarRankingPedidosNaoAtendidos(generoPedidos, dataInicial, dataFinal);
}
@Override
public List<RankingPedidoDTO> consultarRankingPedidos(String generoPedidos, Date dataInicial, Date dataFinal) {
return pedidoRepository.consultarRankingPedidos(generoPedidos, dataInicial, dataFinal);
}
@Override
public Integer obterQuantidadePedidosPorSituacao(String tipoPedido, String tipoSituacaoPedido) {
return pedidoRepository.obterQuantidadePedidosPorSituacao(tipoPedido, tipoSituacaoPedido);
}
@Override
public void excluirHistoricosDoPedido(Pedido pedido) {
pedidoRepository.excluirHistoricosDoPedido(pedido);
}
@Override
public void solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(Loja lojaEntrada, Produto produto) {
pedidoRepository.solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(lojaEntrada, produto);
}
@Override
public List<PedidoProduto> consultarPedidosNaoAtendidos(Produto produto) {
return pedidoRepository.consultarPedidosNaoAtendidos(produto);
}
@Override
public List<Pedido> consultarPedidosDoProdutoOuModeloPendentes(Produto produto) {
return pedidoRepository.consultarPedidosDoProdutoOuModeloPendentes(produto);
}
@Override
public List<Pedido> consultarPedidosDoCliente(Cliente cliente) {
return pedidoRepository.consultarPedidosDoCliente(cliente);
}
@Override
public Pedido consultarPedidoCompletoDaVenda(Venda venda) {
return pedidoRepository.consultarPedidoCompletoDaVenda(venda);
}
@Override
public StreamedContent gerarArquivoExcel(ParametrosConsulta<Pedido> parametrosConsulta) {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet aba = ExcelUtil.criarAbas(wb, "PEDIDOS");
ExcelUtil.configurarCabecalho(wb, aba);
// CONSULTAR
ArrayList<Pedido> pedidos = (ArrayList<Pedido>) pedidoRepository.consultarPassandoParametrosConsulta(parametrosConsulta, 0,
pedidoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta), null, null, new HashMap<String, Object>());
// PREENCHER
Integer numeroLinha = 1;
for (Pedido pedido : pedidos) {
Row linha = aba.createRow(numeroLinha);
ExcelUtil.criarCelula(wb, aba, linha, 0, ExcelUtil.configurarCelulaTexto(wb), pedido.getSequencial().toString());
StringBuilder produtos = new StringBuilder();
for (PedidoProduto pedidoProduto : pedido.getProdutos()) {
produtos.append(pedidoProduto.getProduto().getDescricaoComModeloCompletaComCodigo());
produtos.append(", ");
produtos.append(pedidoProduto.getProduto().getDescricaoDoEstilo());
produtos.append("; ");
}
ExcelUtil.criarCelula(wb, aba, linha, 1, ExcelUtil.configurarCelulaTexto(wb), produtos.toString());
ExcelUtil.criarCelula(wb, aba, linha, 2, ExcelUtil.configurarCelulaNumerico(wb), pedido.getObservacao());
numeroLinha++;
}
try {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
wb.write(stream);
stream.close();
wb.close();
System.out.println("Finalizado!");
return new DefaultStreamedContent(ArquivoUtil.gerarInputStreamDeArquivo(stream.toByteArray()), TipoExtensao.EXCEL.getDescricao(), "pedidos.xls");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
*/
}