Subversion Repositories Integrator Subversion

Rev

Rev 636 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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

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.ComercialPosVendaDTO;
import br.com.ec.domain.dto.NpsPosVendaDTO;
import br.com.ec.domain.dto.PosVendaDTO;
import br.com.ec.domain.model.PosVenda;
import br.com.ec.domain.model.tipos.TipoNpsPosVenda;
import br.com.ec.domain.service.NpsPosVendaService;
import br.com.ec.domain.service.PosVendaService;
import br.com.ec.domain.service.VendaService;
import br.com.ec.repository.PosVendaRepository;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.ConstantesWebHelper.Mensagem;

@Service
public class PosVendaServiceImpl extends AbstractService<PosVenda> implements PosVendaService {

        private PosVendaRepository posVendaRepository;
        private NpsPosVendaService npsPosVendaService;
        private VendaService vendaService;

        @Autowired
        public PosVendaServiceImpl(Validador validador, PosVendaRepository posVendaRepository, NpsPosVendaService npsPosVendaService,
                        VendaService vendaService) {
                super(validador);
                this.posVendaRepository = posVendaRepository;
                this.npsPosVendaService = npsPosVendaService;
                this.vendaService = vendaService;
        }

        @Override
        protected GenericRepository<PosVenda> getRepository() {
                return posVendaRepository;
        }
       
        @Override
        public ComercialPosVendaDTO consultarPosVendaEmAndamento() {
                ComercialPosVendaDTO comercialPosVendaDTO = new ComercialPosVendaDTO();
                List<PosVendaDTO> listaPosVendaNaoFinalizadas = posVendaRepository.consultarNaoFinalizadas();
                for (PosVendaDTO posVendaNaoFinalizada : listaPosVendaNaoFinalizadas) {
                        if (VerificadorUtil.naoEstaNulo(posVendaNaoFinalizada.getSequencialDaVenda())) {
                                posVendaNaoFinalizada.setVendaDTO(vendaService.detalharPorSequencial(posVendaNaoFinalizada.getSequencialDaVenda()));
                        }
                        NpsPosVendaDTO npsPosVendaAgradecimento = npsPosVendaService.consultarPorPosVendaEeTipo(posVendaNaoFinalizada.getSequencial(), TipoNpsPosVenda.ATENDIMENTO_A.getValor());
                        if (VerificadorUtil.naoEstaNulo(npsPosVendaAgradecimento)) {
                                if (VerificadorUtil.estaNulo(npsPosVendaAgradecimento.getDataFinalizacao())) {
                                        posVendaNaoFinalizada.setNpsPosVendaAgradecimento(npsPosVendaAgradecimento);
                                        comercialPosVendaDTO.getListaPosVendaAgradecimento().add(posVendaNaoFinalizada);
                                }
                        } else {
                                comercialPosVendaDTO.getListaPosVendaAgradecimento().add(posVendaNaoFinalizada);
                        }
                        posVendaNaoFinalizada.setNpsPosVendaAgradecimento(npsPosVendaService.consultarPorPosVendaEeTipo(posVendaNaoFinalizada.getSequencial(), TipoNpsPosVenda.ATENDIMENTO_A.getValor()));
                }
                comercialPosVendaDTO.setListaEmAndamento(listaPosVendaNaoFinalizadas);
                return comercialPosVendaDTO;
        }
       
        @Override
        public void iniciarAtendimento(PosVendaDTO posVendaDTO) {
                try {
                        PosVenda posVendaParaAlterar = this.consultarPorId(new PosVenda(posVendaDTO.getSequencial()));
                        posVendaParaAlterar.setDataInicio(DataUtils.getDataAtual());
                        posVendaParaAlterar.setObservacao(posVendaDTO.getObservacao());
                        posVendaParaAlterar.setTipoFinalizacao(posVendaDTO.getTipoFinalizacao());
                        this.alterar(posVendaParaAlterar);
                } catch (Exception e) {
                        throw new NegocioException(e.getMessage());
                }
        }
       
        @Override
        public void finalizarAtendimento(PosVendaDTO posVendaDTO) {
                try {
                        PosVenda posVendaParaFinalizar = this.consultarPorId(new PosVenda(posVendaDTO.getSequencial()));
                        if (VerificadorUtil.estaNulo(posVendaParaFinalizar.getDataInicio())) {
                                posVendaParaFinalizar.setDataInicio(DataUtils.getDataAtual());
                        }
                        posVendaParaFinalizar.setDataFinalizacao(DataUtils.getDataAtual());
                        posVendaParaFinalizar.setObservacao(posVendaDTO.getObservacao());
                        if (VerificadorUtil.estaNulo(posVendaDTO.getTipoFinalizacao())) {
                                throw new NegocioException("OBRIGATÓRIO INFORMAR O TIPO DE FINALIZAÇÃO");
                        }
                        posVendaParaFinalizar.setTipoFinalizacao(posVendaDTO.getTipoFinalizacao());
                        this.alterar(posVendaParaFinalizar);
                } catch (Exception e) {
                        throw new NegocioException(e.getMessage());
                }
        }
       
}