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); }
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); }