Example #1
0
        /// <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"));
            }
        }
Example #3
0
 /// <summary>
 /// Async version of <see cref="WithdrawDepositMoney"/>
 /// </summary>
 /// <param name="withdrawDeposit"></param>
 /// <returns></returns>
 public Task <Message> WithdrawDepositMoneyAsync(WithdrawDeposit withdrawDeposit)
 {
     return(Channel.WithdrawDepositMoneyAsync(withdrawDeposit));
 }
Example #4
0
 /// <summary>
 /// Execute withdraw action on service
 /// </summary>
 /// <param name="withdrawDeposit"></param>
 /// <returns></returns>
 public Message WithdrawDepositMoney(WithdrawDeposit withdrawDeposit)
 {
     return(Channel.WithdrawDepositMoney(withdrawDeposit));
 }