public ActionResult AddExpense(EditExpenseViewModel vm, bool isDone = false)
        {
            ViewBag.Title = "Edit Expense";

            if (vm.ExpenseId == 0)
            {
                ModelState.Remove("ExpenseId");

                if (!ModelState.IsValid)
                {
                    ViewBag.Title = "Add Expense";
                    return PartialView("EditExpense");
                }

                var expense = ExpenseService.AddExpense(vm, User.Identity.Name);
                vm.ExpenseId = expense.Id;

                if (isDone)
                    return RedirectToAction("Index", new {expenseId = vm.ExpenseId});

                return PartialView("EditExpense", vm);
            }

            return isDone ? RedirectToAction("Index", new { expenseId = vm.ExpenseId }) : EditExpense(vm);
        }
        public Expense AddExpense(EditExpenseViewModel vm, string username)
        {
            var expense = new Expense
            {
                Name = vm.Name,
                Amount = vm.Amount,
                Balance = vm.Amount,
                InterestRate = vm.InterestRate,
                Username = username
            };

            FinancialPlannerRepository.AddExpense(expense);
            FinancialPlannerRepository.Save();

            return expense;
        }
        public EditExpenseViewModel MapEditExpenseViewModel(int id)
        {
            var expense = FinancialPlannerRepository.GetExpenses().FirstOrDefault(m => m.Id == id);

            if (expense == null)
                return null;

            var vm = new EditExpenseViewModel
            {
                ExpenseId = expense.Id,
                Name = expense.Name,
                Amount = expense.Amount,
                InterestRate = expense.InterestRate
            };

            return vm;
        }
        public bool EditExpense(EditExpenseViewModel vm)
        {
            var expense = FinancialPlannerRepository.GetExpenses().FirstOrDefault(m => m.Id == vm.ExpenseId);

            if (expense == null)
                return false;

            var transactions = FinancialPlannerRepository.GetTransactions().Where(m => m.ExpenseId == expense.Id).ToList();

            var withdrawalAmount = transactions.Where(m => m.IsWithdrawal).Sum(m => m.Amount);
            var depositAmount = transactions.Where(m => !m.IsWithdrawal).Sum(m => m.Amount);

            expense.Name = vm.Name;
            expense.Amount = vm.Amount;
            expense.InterestRate = vm.InterestRate;
            expense.Balance = vm.Amount + (depositAmount - withdrawalAmount);

            FinancialPlannerRepository.EditExpense(expense);
            FinancialPlannerRepository.Save();

            return true;
        }
        public ActionResult EditExpense(EditExpenseViewModel vm, bool isDone = false)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.Title = "Edit Expense";
                return View(vm);
            }

            var saved = ExpenseService.EditExpense(vm);

            if (!saved)
                return PartialView("Error");

            if (isDone)
                return RedirectToAction("Index", new { expenseId = vm.ExpenseId });

            return PartialView("EditExpense", vm);
        }