Esempio n. 1
0
        public async Task <IActionResult> Create([Bind("Id,FromAccountId, FromAccount, ToAccountId, ToAccount,TransactionDate,TransactionAmount,FromBalance,ToBalance")] Transaction transaction)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var transferAmount = transaction.TransactionAmount;
                    var fromAcct       = GetAccount(transaction.FromAccountId);
                    if (fromAcct.Balance < transferAmount)
                    {
                        TempData["ErrorMessage"] = "Transfer amount cannot be greater than available balance.  Please select a different amount.";
                        return(RedirectToAction(nameof(Create)));
                    }

                    var toAcct = GetAccount(transaction.ToAccountId);
                    if (fromAcct.Id == toAcct.Id)
                    {
                        TempData["ErrorMessage"] = "You cannot transfer to the same account.  Please choose another account";
                        return(RedirectToAction(nameof(Create)));
                    }

                    transaction.FromAccount     = fromAcct.Name;
                    transaction.ToAccount       = toAcct.Name;
                    transaction.TransactionDate = DateTime.Now;
                    transaction.FromBalance     = fromAcct.Balance;
                    transaction.ToBalance       = toAcct.Balance;

                    //do balance transfer
                    if (fromAcct.Balance < transferAmount)
                    {
                        throw new ArgumentOutOfRangeException();
                    }

                    fromAcct.Balance -= transferAmount;
                    toAcct.Balance   += transferAmount;

                    //save transaction
                    _context.UpdateRange(fromAcct, toAcct);
                    _context.AddRange(transaction);
                    await _context.SaveChangesAsync();

                    return(RedirectToAction(nameof(Index)));
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error Occurred: {0} ", ex);
                }
            }
            return(View(transaction));
        }