Subversion Repositories Integrator Subversion

Rev

Rev 106 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.service.vendavivo.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.ec.core.consulta.ParametrosConsulta;
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.interfaces.Cadastrar;
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.ParametrosConsultaVendasVivoDTO;
import br.com.ec.domain.dto.ProdutoVivoDTO;
import br.com.ec.domain.dto.VendasDTO;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.VendaVivo;
import br.com.ec.domain.model.Vendedor;
import br.com.ec.domain.service.email.impl.GerenciadorEmailImpl;
import br.com.ec.domain.service.linhavivo.LinhaVivoService;
import br.com.ec.domain.service.vendavivo.VendaVivoService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.infrastructure.repository.VendaVivoRepository;

@Service
public class VendaVivoServiceImpl extends AbstractService<VendaVivo> implements VendaVivoService {
       
        private LinhaVivoService linhaVivoService;
        private VendaVivoRepository vendaVivoRepository;
       
        @Autowired
        public VendaVivoServiceImpl(Validador validador, LinhaVivoService linhaVivoService, VendaVivoRepository vendaVivoRepository) {
                super(validador);
                this.linhaVivoService = linhaVivoService;
                this.vendaVivoRepository = vendaVivoRepository;
        }

        @Override
        protected GenericRepository<VendaVivo> getRepository() {
                return vendaVivoRepository;
        }
       
        @Override
        protected void regrasNegocioCadastrar(VendaVivo vendaVivo) {
                if (VerificadorUtil.estaNulo(vendaVivo.getVendedor())) {
                        throw new NegocioException("Obrigatório informar o vendedor.");
                }
                if (VerificadorUtil.estaNulo(vendaVivo.getDataVenda())) {
                        vendaVivo.setDataVenda(DataUtils.getDataAtual());
                }
        }
       
        @Override
        public VendaVivo detalharVendaVivo(VendaVivo vendaVivo) {
                return vendaVivoRepository.detalharVendaVivo(vendaVivo);
        }
       
        @Override
        public void excluirVendaVivo(VendaVivo vendaVivo, Usuario usuario) {
                super.excluir(vendaVivo);
                enviarEmail(vendaVivo, usuario);
        }

        private void enviarEmail(VendaVivo vendaVivo, Usuario usuario) {
                String diaAtual = DataUtils.converterDataParaString(DataUtils.getDataAtual());
                StringBuilder conteudo = new StringBuilder();
                conteudo.append("OPERAÇÃO REALIZADA POR: " + usuario.getNome() + "\n");
                conteudo.append("DATA DA VENDA: " + DataUtils.converterDataComHorarioParaString(vendaVivo.getDataVenda()) + "\n");
                conteudo.append("LOJA: " + vendaVivo.getLoja().getDescricao() + "\n");
                conteudo.append("VENDEDOR: " + vendaVivo.getVendedor().getNomeDaPessoa() + "\n");
                conteudo.append("PRODUTO: " + vendaVivo.getProdutoVivo().getDescricaoCompleta() + "\n");
                conteudo.append("OBS.: " + vendaVivo.getObservacao() + "\n");
                conteudo.append("JUSTIFICATIVA: " + vendaVivo.getJustificativaParaExcluir() + "\n");
                conteudo.append("__________________________________________________\n\n");
                new GerenciadorEmailImpl()
                        .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_DIRECAO)
                        .comAssunto("ESPAÇO CASE - OPERAÇÃO DE EXCLUSÃO DE VENDA: " + diaAtual)
                        .comConteudo(conteudo.toString())
                        .enviar();
        }
       
        @Override
        public void cadastrarVendaVivoPeloPDV(VendaVivo vendaVivo) {
                lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(vendaVivo);
                validarEntidadeNoContextoInformado(vendaVivo, Cadastrar.class);
                if (VerificadorUtil.naoEstaNuloOuVazio(vendaVivo.getIndicadorMigracao())) {
                        if (!vendaVivo.getIndicadorMigracao()) {
                                vendaVivo.setValorAssinatura(vendaVivo.getProdutoVivo().getValorAssinatura());
                                if (vendaVivo.getIndicadorPortabilidade()) {
                                        vendaVivo.setValorRecebido(vendaVivo.getProdutoVivo().getValorAssinatura() * ConstantesSEC.Vivo.COMISSSAO_VIVO_PORTABILIDADE_1_9);
                                        vendaVivo.setValorComissao(vendaVivo.getProdutoVivo().getValorComissao() * ConstantesSEC.Vivo.COMISSSAO_PORTABILIDADE_1_3);
                                } else {
                                        vendaVivo.setValorRecebido(vendaVivo.getProdutoVivo().getValorAssinatura() * ConstantesSEC.Vivo.COMISSAO_VIVO_1_6);
                                        vendaVivo.setValorComissao(vendaVivo.getProdutoVivo().getValorComissao());
                                }
                        }
                }
                vendaVivo.getLinhaVivo().setPlanoAtual(vendaVivo.getProdutoVivo());
                vendaVivo.getLinhaVivo().setDataAtualizacao(DataUtils.getDataAtual());
                if (VerificadorUtil.estaNulo(vendaVivo.getSequencialDaLinha())) {
                        linhaVivoService.cadastrar(vendaVivo.getLinhaVivo());
                } else {
                        linhaVivoService.alterar(vendaVivo.getLinhaVivo());
                }
                cadastrar(vendaVivo);
        }

        @Override
        public void alterarVendaVivoPeloPDV(VendaVivo vendaVivo) {
                linhaVivoService.alterar(vendaVivo.getLinhaVivo());
                alterar(vendaVivo);
        }

        @Override
        public List<VendaVivo> consultarVendasVivoDoDia(Long sequencialLoja, Date dataVendas) {
                return vendaVivoRepository.consultarVendasDoDia(sequencialLoja, dataVendas);
        }
       
        @Override
        public Integer obterQuantidadeDeVendasPorLojaEePeriodo(VendaVivo vendaVivo, Date dataInicial, Date dataFinal) {
                return vendaVivoRepository.obterQuantidadeDeVendasPorLojaEePeriodo(vendaVivo, dataInicial, dataFinal);
        }
       
        @Override
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(Loja loja, Date dataInicial, Date dataFinal) {
                return vendaVivoRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodo(loja, dataInicial, dataFinal);
        }
       
        @Override
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasVivoDTO parametrosConsulta) {
                return vendaVivoRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
        }
       
        @Override
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodo(ParametrosConsultaVendasVivoDTO parametrosConsultaVendas) {
                return vendaVivoRepository.obterQuantidadeProdutosVendidosPorLojaEePeriodo(parametrosConsultaVendas);
        }
       
        private void lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(VendaVivo vendaVivo) {
                if (VerificadorUtil.estaNulo(vendaVivo.getLoja())) {
                        throw new NegocioException("Informe a loja");
                }
        }

        @Override
        public List<VendaVivo> consultarVendasPorDemanda(ParametrosConsulta<VendaVivo> parametrosConsulta, Integer primeiroRegistro,
                        Integer tamanhoPagina, String sortField, String orderSort, Map<String, Object> filters) {
                return vendaVivoRepository.consultarVendasPorDemanda(parametrosConsulta, primeiroRegistro, tamanhoPagina, sortField, orderSort, filters);
        }
       
        @Override
        public List<VendaVivo> consultarVendaPorParametros(ParametrosConsultaVendasVivoDTO parametrosConsultaVendas) {
                return vendaVivoRepository.consultarVendaPorParametros(parametrosConsultaVendas);
        }
       
        @Override
        public List<ProdutoVivoDTO> consultarVendasVivo(Date dataInicial, Date dataFinal, Vendedor vendedor, Integer homologado) {
                return vendaVivoRepository.consultarVendasVivo(dataInicial, dataFinal, vendedor, homologado);
        }
       
        @Override
        public List<VendasDTO> consultarVendas(ParametrosConsultaVendasVivoDTO parametrosConsultaVendasDTO) {
                return vendaVivoRepository.consultarVendas(parametrosConsultaVendasDTO);
        }
       
}