public async Task<IActionResult> Withdraw([FromRoute]Guid id, [FromBody]WithdrawDto dto, CancellationToken cancellationToken = default)
        {
            if (null == dto)
                return BadRequest();

            var currency = Currency.FromCode(dto.CurrencyCode);
            var amount = new Money(currency, dto.Amount);
            var command = new Withdraw(id, amount);
            await _mediator.Publish(command, cancellationToken);
            return Ok();
        }
Exemple #2
0
        public ActionResult <IncomeDto> WithdrawFromBankToChurch([FromBody] WithdrawDto dto)
        {
            try
            {
                _transactionService.CreateWithdrawalTransaction(dto);
            }
            catch (InsufficientFundsInBankBalanceException e)
            {
                return(BadRequest(e.Message));
            }

            return(Ok());
        }
        public async Task <CurrentAccountDtoResult> UpdateWithdraw(WithdrawDto withdrawDto, Guid userId)
        {
            var entity = await FindByUserId(userId);

            ValidateBalance(entity.Balance, withdrawDto.Value);

            entity.Balance -= withdrawDto.Value;

            var result = await _repository.UpdateAsync(entity, entity.Id);

            await InsertHistory(HistoricCurrentAccountMapper.Description.Withdraw.Key, withdrawDto.Value, entity.Id);

            return(_mapper.Map <CurrentAccountDtoResult>(result));
        }
Exemple #4
0
        public void CreateWithdrawalTransaction(WithdrawDto dto)
        {
            decimal bankBalance   = 0;
            decimal churchBalance = 0;

            var latestBankTransaction = Context.Transactions.LastOrDefault(t =>
                                                                           t.TransactionSourceTypeId == (int)SiriusEnums.TransactionSourceTypes.BankAccount);

            var latestChurchTransaction = Context.Transactions.LastOrDefault(t =>
                                                                             t.TransactionSourceTypeId == (int)SiriusEnums.TransactionSourceTypes.ChurchAccount);

            if (latestBankTransaction != null)
            {
                bankBalance = latestBankTransaction.Balance;
            }

            if (bankBalance - dto.WithdrawalAmount < 0)
            {
                throw new InsufficientFundsInBankBalanceException();
            }

            if (latestChurchTransaction != null)
            {
                churchBalance = latestChurchTransaction.Balance;
            }

            var transactionDebit = new Transaction
            {
                Debit                   = dto.WithdrawalAmount,
                Balance                 = churchBalance + dto.WithdrawalAmount,
                TransactionDate         = DateTime.Now,
                TransactionSourceTypeId = (int)SiriusEnums.TransactionSourceTypes.ChurchAccount,
            };

            var transactionCredit = new Transaction
            {
                Credit                  = dto.WithdrawalAmount,
                Balance                 = bankBalance - dto.WithdrawalAmount,
                TransactionDate         = DateTime.Now,
                TransactionSourceTypeId = (int)SiriusEnums.TransactionSourceTypes.BankAccount,
            };

            Context.Transactions.Add(transactionDebit);
            Context.Transactions.Add(transactionCredit);

            Context.SaveChanges();
        }
Exemple #5
0
        public async Task <ActionResult> Withdraw([FromBody] WithdrawDto dto, Guid userId)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                //var userId = new Guid(User.Identity.Name);
                var result = await _service.UpdateWithdraw(dto, userId);

                return(Ok(result));
            }
            catch (ArgumentException ex)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Exemple #6
0
        public async Task <IActionResult> Withdraw([FromBody] WithdrawDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            LoanVoucher v = _context.LoanVouchers.Include(p => p.Records).FirstOrDefault(p => p.ID == dto.LoanVoucherID);

            if (v == null)
            {
                return(this.AlpsActionWarning("无此ID"));
            }
            if (v.Amount < dto.Amount)
            {
                return(this.AlpsActionError("取款金额超过存款金额"));
            }
            var r = v.Withdraw(dto.OperateTime, dto.Amount, dto.Memo, User.Identity.Name, GetInterestRates(), DoGetLoanSetting().MinDepositDay);
            await _context.SaveChangesAsync();

            return(this.AlpsActionOk(r.ID));
        }
Exemple #7
0
        public async Task <IActionResult> MakeWithdraw(WithdrawDto withdrawDto)
        {
            var user = await _auth.LoginWithAllData(User.FindFirst(ClaimTypes.Name).Value, withdrawDto.Pin);

            if (user == null)
            {
                return(BadRequest("Incorrect Secret Pin"));
            }

            // if(!(user.Point.Points >= withdrawDto.Amount))
            //     return BadRequest("Insufficient Points");

            // if (!CardPayment.PayClient(withdrawDto))
            //     return BadRequest("Transaction failed, please try again later");

            // _repo.Update(user);

            // user.Point.Points -= withdrawDto.Amount;
            // if(!await _repo.SaveAll())
            //     return BadRequest("Failed to save transaction");

            return(NoContent());
        }
Exemple #8
0
 public static Boolean PayClient(WithdrawDto withdrawDto)
 {
     return(true);
 }
Exemple #9
0
        public CurrentAccountTest()
        {
            Id      = Guid.NewGuid();
            Balance = 1000;
            UserId  = new Guid("3362d96b-e3ff-4cc8-85b5-da08a612e62f");

            HistoricCurrentAccountId = Guid.NewGuid();
            Movement    = "D";
            AmountMoved = Balance;

            entity = new CurrentAccountEntity()
            {
                Id      = Id,
                Balance = 1000,
                UserId  = UserId
            };

            entityHistoric = new HistoricCurrentAccountEntity()
            {
                Id               = Guid.NewGuid(),
                Movement         = Movement,
                AmountMoved      = AmountMoved,
                CurrentAccountId = Id
            };

            currentAccountDtoResult = new CurrentAccountDtoResult()
            {
                Id      = Id,
                Balance = Balance,
                UserId  = UserId
            };

            historicCurrentAccountDtoResult = new HistoricCurrentAccountDtoResult()
            {
                Id               = HistoricCurrentAccountId,
                Movement         = Movement,
                AmountMoved      = AmountMoved,
                CurrentAccountId = Id
            };

            listHistoricDtoResult.Add(historicCurrentAccountDtoResult);

            depositDto = new DepositDto {
                Value = 500
            };
            paymentDto = new PaymentDto {
                Value = 300
            };
            transferDto = new TransferDto {
                Value = 400, CpfRecipient = "26687020544"
            };
            withdrawDto = new WithdrawDto {
                Value = 200
            };

            currentAccountDtoResultDeposit = new CurrentAccountDtoResult()
            {
                Id      = Id,
                Balance = Balance + depositDto.Value,
                UserId  = UserId
            };

            currentAccountDtoResultPayment = new CurrentAccountDtoResult()
            {
                Id      = Id,
                Balance = Balance - paymentDto.Value,
                UserId  = UserId
            };

            currentAccountDtoResultTransfer = new CurrentAccountDtoResult()
            {
                Id      = Id,
                Balance = Balance - transferDto.Value,
                UserId  = UserId
            };

            currentAccountDtoResultWithdraw = new CurrentAccountDtoResult()
            {
                Id      = Id,
                Balance = Balance - withdrawDto.Value,
                UserId  = UserId
            };
        }