public ActionResult Edit([Bind(Include = "Id,Name,HouseAccountId,TransactionTypeId,BudgetItemId,EnteredById,Discription,Date,Amount,Reconciled,ReconciledAmount")] Transaction transaction) { if (ModelState.IsValid) { if (!transaction.Reconciled) { //var oldBalance = db.Transactions.AsNoTracking().Where(t => t.Id == transaction.Id).FirstOrDefault().ReconciledAmount; if (transaction.ReconciledAmount > 0) { transaction.Reconciled = true; } } var oldTransaction = db.Transactions.AsNoTracking().FirstOrDefault(t => t.Id == transaction.Id); if (transaction.TransactionTypeId == 3 && transaction.TransactionTypeId != oldTransaction.TransactionTypeId) //Deposit { decimal modAmount = 0.00M; if (transaction.Amount > 0) { modAmount = transaction.Amount + (oldTransaction.Amount * -1); } else { modAmount = (transaction.Amount + oldTransaction.Amount) * -1; transaction.Amount *= -1; } //Logic change from withdraw to deposit (run add old ammount add new mount) transactionsHelper.AddToAccount(transaction.HouseAccountId, modAmount); transactionsHelper.AddToBudgetItem(transaction.BudgetItemId, (oldTransaction.Amount * -1)); } else if (transaction.TransactionTypeId == 4 && transaction.TransactionTypeId != oldTransaction.TransactionTypeId) //Withdraw { //Logic change from deposit to withdraw (run sub old and then new ammount) decimal modAmount = 0.00M; decimal budgetAmount = 0.00M; if (transaction.Amount < 0) { oldTransaction.Amount *= -1; modAmount = transaction.Amount + oldTransaction.Amount; budgetAmount = transaction.Amount; } else { modAmount = transaction.Amount + oldTransaction.Amount; modAmount *= -1; transaction.Amount *= -1; budgetAmount = transaction.Amount; } //These will properly handle negative or poitive numbers. transactionsHelper.SubtractFromAccount(transaction.HouseAccountId, modAmount); transactionsHelper.SubtractFromBudgetItem(transaction.BudgetItemId, budgetAmount); } else if (transaction.TransactionTypeId == 3 && transaction.Amount != oldTransaction.Amount) //Deposit { if (transaction.Amount < 0) //Safety Mechanism { transaction.Amount *= -1; } if (transaction.Amount > oldTransaction.Amount) { var modAmount = transaction.Amount - oldTransaction.Amount; transactionsHelper.AddToAccount(transaction.HouseAccountId, modAmount); //transactionsHelper.AddToBudgetItem(transaction.BudgetItemId, modAmount); } else if (transaction.Amount < oldTransaction.Amount) { var modAmount = oldTransaction.Amount - transaction.Amount; transactionsHelper.SubtractFromAccount(transaction.HouseAccountId, modAmount); //transactionsHelper.SubtractFromBudgetItem(transaction.BudgetItemId, modAmount); } } else if (transaction.TransactionTypeId == 4 && transaction.Amount != oldTransaction.Amount) //Withdraw { if (transaction.Amount > 0) { transaction.Amount *= -1; } if (transaction.Amount > oldTransaction.Amount) { var modAmount = oldTransaction.Amount - transaction.Amount; modAmount *= -1; //Add helpers don't turn negative numbers positive transactionsHelper.AddToAccount(transaction.HouseAccountId, modAmount); transactionsHelper.AddToBudgetItem(transaction.BudgetItemId, modAmount); } else if (transaction.Amount < oldTransaction.Amount) { var modAmount = oldTransaction.Amount - transaction.Amount; transactionsHelper.SubtractFromAccount(transaction.HouseAccountId, modAmount); transactionsHelper.SubtractFromBudgetItem(transaction.BudgetItemId, modAmount); } } if (transaction.BudgetItemId != oldTransaction.BudgetItemId) { //Amount should already be postive for Deposit and Negative for Withdraw. transactionsHelper.ChangeBudgetItem(oldTransaction.BudgetItemId, transaction.BudgetItemId, transaction.Amount); } db.Entry(transaction).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index", "Households")); } ViewBag.EnteredById = new SelectList(db.Users, "Id", "FirstName", transaction.EnteredById); ViewBag.HouseAccountId = new SelectList(db.HouseAccounts, "Id", "Name", transaction.HouseAccountId); ViewBag.TransactionTypeId = new SelectList(db.TransactionTypes, "Id", "Name", transaction.TransactionTypeId); return(View(transaction)); }