Exemplo n.º 1
0
def display_expense_by_month():
    """ 
    Summarize all expesnses by month 
    :return: All expenses subtotal in last 12 months
    :rtype: dict
    """
    EM = ExpenseManager()
    EM.from_csv(expense_csv)
    return EM.by_month_expense()
Exemplo n.º 2
0
def list_all_expenses():
    """ 
    Lists all expenses in the expenses csv file
    :return: All expenses records
    :rtype: dict
    """
    EM = ExpenseManager()
    EM.from_csv(expense_csv)
    return {"expenses": EM.get_expenses()}
Exemplo n.º 3
0
def display_expense_by_category():
    """ Summarize all expenses by category

    :return: All expenses subtotal by category in last 12 months, with percentage
    :rtype: dict
    """
    EM = ExpenseManager()
    EM.from_csv(expense_csv)
    return EM.by_category()
Exemplo n.º 4
0
def edit(ID):
    EM = ExpenseManager()
    EM.from_csv(expense_csv)
    expense = EM.get_details(ID)
    
    category = getattr(expense, "_Category")
    amount = getattr(expense, "_Amount")
    date = getattr(expense, "_Date")
    category=category.lower()
    
    return render_template("update.html", ID=ID,category=category, amount=amount, date=date)
Exemplo n.º 5
0
def test_get_expenses():
    """
    Tests for the get_expenses method
    """
    manager = ExpenseManager()

    # Checks if method exists
    assert hasattr(manager, "get_expenses")

    # Checks if method returns correct value
    assert manager.get_expenses() == []
Exemplo n.º 6
0
def update_expense(ID, category, amount, date):
    EM = ExpenseManager()
    EM.from_csv(expense_csv)

    expense = Expense(ID, category, amount, date)
    EM.upd_expense(ID, expense)
    EM.override_to_csv(expense_csv)
Exemplo n.º 7
0
def test_to_csv():
    """
    Tests for the to_csv method
    """
    manager = ExpenseManager()

    # Checks if method exists
    assert hasattr(manager, "to_csv")
Exemplo n.º 8
0
def test_read_largest_id():
    """
    Tests for the read_largest_id method
    """
    manager = ExpenseManager()

    # Checks if method exists
    assert hasattr(manager, "read_largest_id")
Exemplo n.º 9
0
def test_get_details():
    """
    Tests for the get_details method
    """
    manager = ExpenseManager()
    expense = Expense(1, "School", 200, "2020-02-13")

    # Checks if method exists
    assert hasattr(manager, "get_details")

    # Adds expense
    manager.add_expense(expense)

    # Checks if correct values are returned
    expense_object = manager.get_details(1)

    assert getattr(expense_object, "_Category") == "School"
    assert getattr(expense_object, "_Amount") == "200.00"
Exemplo n.º 10
0
def test_by_category():
    manager = ExpenseManager()
    Expense1 = Expense(1, "Food", 50, "2020-04-29")
    Expense2 = Expense(2, "School", 20, "2021-04-30")
    Expense3 = Expense(3, "Food", 36.6, "2021-05-01")
    Expense4 = Expense(4, "Family", 100, "2021-05-02")
    Expense5 = Expense(5, "Family", 88.8, "2021-01-02")

    # Add to the manager
    manager.add_expense(Expense1)
    manager.add_expense(Expense2)
    manager.add_expense(Expense3)
    manager.add_expense(Expense4)
    manager.add_expense(Expense5)

    assert manager.by_category()["Food"][0] == 36.6
    assert manager.by_category()["Family"][0] == 188.8
    assert manager.by_category()["Health"][0] == 0
Exemplo n.º 11
0
def delete_expense(ID):
    """ Delete the expense record from the list

    :return: None
    :rtype: None
    """
    # Load the list of expenses from csv, then put it into EM to manipulate
    # Finally put it back to the csv
    EM = ExpenseManager()
    EM.from_csv(expense_csv)
    EM.del_expense(ID)
    EM.override_to_csv(expense_csv)
Exemplo n.º 12
0
def test_attributes():
    """
    Tests if ExpenseManager class has the correct attributes and they are set correctly
    """
    manager = ExpenseManager()

    # Checks if private attribute exists
    assert hasattr(manager, "_expenses")

    # Checks if private attribute was set correctly
    assert manager._expenses == {}
Exemplo n.º 13
0
def test_by_month_expense():
    manager = ExpenseManager()
    Expense1 = Expense(1, "Food", 50, "2020-04-29")
    Expense2 = Expense(2, "School", 20, "2021-04-30")
    Expense3 = Expense(3, "Food", 36.6, "2021-05-01")
    Expense4 = Expense(4, "Family", 100, "2021-05-02")
    Expense5 = Expense(5, "Family", 88.8, "2021-01-02")
    Expense6 = Expense(6, "Health", 62, "2021-01-31")

    # Add to the manager
    manager.add_expense(Expense1)
    manager.add_expense(Expense2)
    manager.add_expense(Expense3)
    manager.add_expense(Expense4)
    manager.add_expense(Expense5)
    manager.add_expense(Expense6)

    assert manager.by_month_expense()["Apr"] == 20
    assert manager.by_month_expense()["May"] == 136.6
    assert manager.by_month_expense()["Jan"] == 150.8
Exemplo n.º 14
0
def update_expense(ID, category, amount, date):
    """ 
    Updates the specified expense
    :param ID: ID of expense to be updated
    :type ID: int
    
    :return: None
    :rtype: None
    """
    EM = ExpenseManager()
    EM.from_csv(expense_csv)

    expense = Expense(ID, category, amount, date)
    EM.upd_expense(ID, expense)
    EM.override_to_csv(expense_csv)
Exemplo n.º 15
0
def update(ID):
    try:
        category = request.form['category']
        amount = float(request.form['amount'])
        date = request.form['date']
    except ValueError:
        flash("Please enter a valid number for expense amount")
        return redirect(url_for("edit", ID=ID))
    except KeyError:
        return redirect(url_for("index"))

    flash(f'Expense #{ID} has been updated!')

    EM = ExpenseManager()
    EM.from_csv(expense_csv)
    expense = EM.get_details(ID)
    original_expense = float(getattr(expense, "_Amount"))

    # Updates balance amount
    bal_dict = from_csv(balance_csv)
    original_balance = float(bal_dict["balance"])
    updated_expense = amount

    # Deducts from balance (expense amount increased)
    if updated_expense > original_expense:
        amount_to_change = updated_expense - original_expense
        updated_balance = original_balance - amount_to_change
        flash(f'${float(amount_to_change)} deducted from balance')

    # Adds to balance (expense amount decreased)
    elif updated_expense < original_expense:
        amount_to_change = original_expense - updated_expense
        updated_balance = original_balance + amount_to_change
        flash(f'${float(amount_to_change)} added to balance')
    else:
        updated_balance = original_balance

    # Save expense
    EM.to_csv(expense_csv)

    # Save balance, budget
    add_to_csv(updated_balance, bal_dict["budget"])

    update_expense(ID, category, amount, date)
    if updated_balance < float(bal_dict["budget"]):
        flash("Your balance has exceeded your budget!")

    return redirect(url_for("index"))
Exemplo n.º 16
0
def expense():
    ## Expense ##

    # Get input from html
    try:
        category = request.form['category']
    except KeyError:
        flash("Please select a category")
        return redirect(url_for("index"))

    try:
        amount = float(request.form['amount'])
    except ValueError:
        flash("Please enter a valid number for expense amount")
        return redirect(url_for("index"))

    if category != "":
        # Store as a class Expense object
        EM = ExpenseManager()
        Next_ID = EM.read_largest_id(expense_csv) + 1  # Assign the next ID#
        expense = Expense(Next_ID, category, amount)

        # Add the expense into the Expense Manager
        EM.add_expense(expense)

        # Deduct expense amount from balance
        bal_dict = from_csv(balance_csv)
        bal_dict["balance"] = float(bal_dict["balance"]) - float(
            expense.Amount)
        if bal_dict["balance"] < float(bal_dict["budget"]):
            flash("Your balance has exceeded your budget!")

        # Save expense
        EM.to_csv(expense_csv)

        # Save balance, budget
        add_to_csv(bal_dict["balance"], bal_dict["budget"])
    elif len(category) == 0:
        flash("Category can't be left empty")
        return redirect(url_for("index"))

    flash(f'Expense #{Next_ID} has been added!')
    flash(f'${expense.Amount} deducted from balance')
    return redirect(url_for("index"))
Exemplo n.º 17
0
def test_upd_expense():
    """
    Tests for the upd_expense method
    """
    manager = ExpenseManager()
    expense = Expense(1, "Health", 300, "2020-05-12")
    updated_expense = Expense(1, "School", 100.1, "2020-05-11")

    # Checks if method exists
    assert hasattr(manager, "upd_expense")

    # Adds expense
    manager.add_expense(expense)
    assert manager._expenses[1] == expense

    # Checks that update expense works correctly
    manager.upd_expense(1, updated_expense)
    assert manager._expenses[1] == updated_expense
Exemplo n.º 18
0
def delete(ID):
    EM = ExpenseManager()
    EM.from_csv(expense_csv)
    expense = EM.get_details(ID)

    category = getattr(expense, "_Category")
    amount = getattr(expense, "_Amount")
    date = getattr(expense, "_Date")

    # Adds expense amount back to balance
    bal_dict = from_csv(balance_csv)
    bal_dict["balance"] = float(bal_dict["balance"]) + float(amount)

    # Save expense
    EM.to_csv(expense_csv)

    # Save balance, budget
    add_to_csv(bal_dict["balance"], bal_dict["budget"])

    delete_expense(ID)
    flash(f'Expense #{ID} has been deleted!')
    flash(f'${amount} added to balance')
    return redirect(url_for("index"))
Exemplo n.º 19
0
def test_add_expense():
    """
    Tests for the add_expense method
    """
    manager = ExpenseManager()
    expense1 = Expense(1, "Health", 300, "2020-05-12")
    expense2 = Expense(2, "School", 1000, "2021-04-20")
    expense3 = Expense(3, "Food", 25.6, "2021-4-30")

    # Checks if method exists
    assert hasattr(manager, "add_expense")

    # Tests that method correctly adds expenses to dictionary
    manager.add_expense(expense1)
    manager.add_expense(expense2)
    manager.add_expense(expense3)

    assert manager._expenses[1] == expense1
    assert manager._expenses[2] == expense2
    assert manager._expenses[3] == expense3
Exemplo n.º 20
0
def test_del_expense():
    """
    Tests for the del_expense method
    """
    manager = ExpenseManager()
    expense1 = Expense(1, "Health", 300, "2020-05-12")
    expense2 = Expense(2, "School", 100.1, "2020-05-11")

    # Checks if method exists
    assert hasattr(manager, "del_expense")

    # Adds expenses
    manager.add_expense(expense1)
    manager.add_expense(expense2)
    assert manager._expenses[1] == expense1
    assert manager._expenses[2] == expense2

    # Checks that added expenses are deleted correctly
    manager.del_expense(1)
    manager.del_expense(2)
    with pytest.raises(KeyError):
        assert manager._expenses[1]
        assert manager._expenses[2]