/// <summary> /// Withdraws or Deposit moeney. /// </summary> /// <param name="withdrawDeposit"><seealso cref="WithdrawDeposit"/> class store the data needed to Withdraw or Deposit, /// returning negative amount in case of Withdraw</param> /// <returns></returns> public Message WithdrawDepositMoney(WithdrawDeposit withdrawDeposit) { var collection = MongoRepository.GetCollection <User>(); var filter = Builders <User> .Filter.Where( x => x.Credentials == withdrawDeposit.Credentials && x.Accounts.Any(a => a.BankAccountNumber == withdrawDeposit.BankAccountNumber)); var user = collection.Find(filter).FirstOrDefault(); var account = user.Accounts .FirstOrDefault(x => x.BankAccountNumber == withdrawDeposit.BankAccountNumber); if (account == null) { return(new ErrorMessage("Nie znaleziono danego konta")); } var newAmount = account.Amount + withdrawDeposit.Amount; if (newAmount < 0) { return(new ErrorMessage("Saldo nie może być ujemne !")); } var update = Builders <User> .Update.Set(x => x.Accounts[-1].Amount, newAmount); var result = MongoRepository.GetCollection <User>() .UpdateOne(filter, update); if (result.IsAcknowledged) { var hist = new History { UserOrdinal = user.Ordinal, Amount = withdrawDeposit.Amount, From = withdrawDeposit.BankAccountNumber, To = withdrawDeposit.BankAccountNumber, Date = DateTime.Now, Type = Constants.WithdrawDepositType, Title = "Wpłata własna" }; var historyCollection = MongoRepository.GetCollection <History>(); historyCollection.InsertOneAsync(hist); return(new ResultMessage("Operacja zakończona sukcesem !")); } return(new ErrorMessage("Aktualizacja stanu konta zakończona niepowodzeniem.")); }
public IActionResult Create(int uId, WithdrawDeposit wd) { var user = dbContext.Users .SingleOrDefault(u => u.UserId == uId); var userTransactions = dbContext.Transactions .Include(t => t.User) .Where(t => t.UserId == user.UserId); ViewBag.Username = $" {user.FirstName} {user.LastName}"; ViewBag.Balance = userTransactions.Sum(t => t.Amount); ViewBag.Transactions = userTransactions.ToList(); if (ModelState.IsValid) { if (wd.WithdrawSelect == "withdraw") { double balance = dbContext.Transactions .Include(t => t.User) .Where(t => t.User.UserId == uId) .Sum(t => t.Amount); if (wd.Amount > balance) { ModelState.AddModelError("Amount", "Insufficient Funds"); return(View("Transactions")); } } Transaction newTransaction = new Transaction(); newTransaction.UserId = uId; if (wd.WithdrawSelect == "withdraw") { newTransaction.Amount = -wd.Amount; } else { newTransaction.Amount = wd.Amount; } dbContext.Add(newTransaction); dbContext.SaveChanges(); return(RedirectToAction("Transactions", new { uId = uId })); } else { return(View("Transactions")); } }
/// <summary> /// Async version of <see cref="WithdrawDepositMoney"/> /// </summary> /// <param name="withdrawDeposit"></param> /// <returns></returns> public Task <Message> WithdrawDepositMoneyAsync(WithdrawDeposit withdrawDeposit) { return(Channel.WithdrawDepositMoneyAsync(withdrawDeposit)); }
/// <summary> /// Execute withdraw action on service /// </summary> /// <param name="withdrawDeposit"></param> /// <returns></returns> public Message WithdrawDepositMoney(WithdrawDeposit withdrawDeposit) { return(Channel.WithdrawDepositMoney(withdrawDeposit)); }