예제 #1
0
        public ClienteMovimentacao AdicionarClienteMovimentacao(ClienteMovimentacao movimentacaoNova)
        {
            var clienteExistente = _repoCliente.GetAsync(c =>
                                                         c.ClienteId == movimentacaoNova.ClienteId).Result.FirstOrDefault();

            if (clienteExistente == null)
            {
                throw new ClienteNaoEncontradoException("Cliente não encontrado!");
            }

            var lojaExistente = _repoLoja.GetAsync(c => c.Ativo &&
                                                   c.LojaId == movimentacaoNova.LojaId).Result.FirstOrDefault();

            if (lojaExistente == null)
            {
                throw new LojaNaoEncontradaException("Loja não encontrada!");
            }

            var valorFinal = clienteExistente.SaldoAtual ?? 0;

            if (movimentacaoNova.Operacao == Models.Enums.Operacao.Debito)
            {
                valorFinal -= movimentacaoNova.Valor;
            }
            else
            {
                valorFinal += movimentacaoNova.Valor;
            }

            if (valorFinal < 0)
            {
                throw new SaldoInsuficienteException("Cliente sem saldo suficiente!");
            }

            movimentacaoNova.SaldoAtual            = valorFinal;
            movimentacaoNova.ClienteMovimentacaoId = Guid.NewGuid();
            movimentacaoNova.DataOperacao          = DateTime.Now;

            var mensagensValidacao = ValidacaoHelper.ValidateModel(movimentacaoNova);

            if (mensagensValidacao.Any())
            {
                throw new EntidadeInvalidaException(string.Join(",", mensagensValidacao));
            }

            _repoClienteMovimentacaoe.Add(movimentacaoNova);
            _repoClienteMovimentacaoe.SaveChangesAsync();
            return(movimentacaoNova);
        }
예제 #2
0
        async Task IServiceBase <ClienteResgate> .Adicionar(ClienteResgate pObj)
        {
            var objClienteMoviementacao = new ClienteMovimentacao();

            objClienteMoviementacao.TipoMovimentacao     = ETipoMovimentacao.Debito;
            objClienteMoviementacao.QtdePontosUtilizados = pObj.QtdePontosUtilizados;
            objClienteMoviementacao.CodigoCliente        = pObj.CodigoCliente;

            await this._clienteMovimentacaoService.Adicionar(objClienteMoviementacao);

            await this._clienteResgateRepository.Adicionar(pObj);

            var objPedido = new ClientePedido();

            objPedido.CodigoCliente         = pObj.CodigoCliente;
            objPedido.CodigoClienteResgate  = pObj.Codigo;
            objPedido.CodigoClienteEndereco = 1;
            objPedido.EstatusEntrega        = EStatusEntrega.PreparandoEnvio;
            await this._clientePedidoRepository.Adicionar(objPedido);
        }