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));
        }