Esempio n. 1
0
    def __init__(self, transaction_details):

        d = Transaction.index_dict
        self.transaction_date = convert.to_date(
            transaction_details[d[Transaction.DATE_HEADER]])
        self.description = transaction_details[d[
            Transaction.DESCRIPTION_HEADER]]
        self.original_description = transaction_details[d[
            Transaction.ORIGINAL_DESCRIPTION_HEADER]]
        self.amount = float(transaction_details[d[Transaction.AMOUNT_HEADER]])
        self.transaction_type = transaction_details[d[
            Transaction.TRANSACTION_TYPE_HEADER]]
        self.category = transaction_details[d[Transaction.CATEGORY_HEADER]]
        self.account_name = transaction_details[d[
            Transaction.ACCOUNT_NAME_HEADER]]
        self.tags = transaction_details[d[Transaction.TAGS_HEADER]]
        self.notes = transaction_details[d[Transaction.NOTES_HEADER]]
Esempio n. 2
0
def get_user_requests():
    '''
    User request loop. Reads the next command from the user and then calls
    the appropriate function.
    '''

    transactions = data.Transactions()
    print(str(transactions.count) + ' transactions loaded.')

    # User request loop
    while True:

        prompt = str(transactions.start_date) + ' - ' + str(
            transactions.end_date)
        command = input(prompt + ' --> ')

        if command[0:2] == 'a':
            accounts = transactions.get_accounts()
            reports.print_accounts(accounts)
            continue

        if command[0:3] == 'cat':
            params = command[3:].strip()
            params_list = params.split(' ')
            search_name = params_list[0]
            debits = transactions.get_transactions_by_type('debit')

            if len(search_name) == 0:
                categories = transactions.get_categories(debits)
                reports.print_category_totals(categories)
            else:
                category_transactions = transactions.get_category_by_name(
                    search_name, debits)
                if category_transactions is None:
                    print('No transactions found for category: ' +
                          search_name + '.')
                else:
                    reports.print_transactions(search_name,
                                               category_transactions)
            continue

        if command[0:3] == 'tag':
            params = command[3:].strip()
            params_list = params.split(' ')
            search_name = params_list[0]
            debits = transactions.get_transactions_by_type('debit')

            if len(search_name) == 0:
                tags = transactions.get_tags(debits)
                reports.print_category_totals(tags)
            else:
                tag_transactions = transactions.get_tag_by_name(
                    search_name, debits)
                if tag_transactions is None:
                    print('No transactions found for tag: ' + search_name +
                          '.')
                else:
                    reports.print_transactions(search_name, tag_transactions)
            continue

        if command == 'cp':
            now = datetime.datetime.now()
            year = now.year
            month = now.month
            # returns a touple which is the day of the week of the first day of the month and
            # the number of days in the month.
            last_day = calendar.monthrange(year, month)[1]
            start_date = datetime.date(year, month, 1)
            end_date = datetime.date(year, month, last_day)
            debits = transactions.get_transactions_by_type(
                'debit', start_date, end_date)
            current_month = transactions.get_categories(debits)
            current_month_totals = transactions.get_category_totals(
                current_month)

            # Get previous month.
            if month == 1:
                year -= 1
                month = 12
            else:
                month -= 1

            last_day = calendar.monthrange(year, month)[1]
            start_date = datetime.date(year, month, 1)
            end_date = datetime.date(year, month, last_day)
            debits = transactions.get_transactions_by_type(
                'debit', start_date, end_date)
            previous_month = transactions.get_categories(debits)
            previous_month_totals = transactions.get_category_totals(
                previous_month)

            reports.print_category_comparison(previous_month_totals,
                                              current_month_totals)
            continue

        if command[0:3] == 'day':
            report_date = command[3:].strip()
            if len(report_date) > 0:
                report_date = report_date.split(' ')
                report_date = convert.to_date(report_date)
            else:
                days = transactions.get_daily_spending()
                reports.print_daily_spending(days)
            continue

        if command[0:2] == 'dr':
            params = command[2:].strip()
            params_list = params.split(' ')
            start_date = params_list[0]
            end_date = params_list[1]
            transactions.start_date = convert.to_date(start_date)
            transactions.end_date = convert.to_date(end_date)
            continue

        if command == 'help':
            print_menu()
            continue

        if command == 'income':
            credit_transactions = transactions.get_transactions_by_type(
                'credit')
            reports.print_transactions('Credits', credit_transactions)
            reports.print_transaction_totals('Credits', credit_transactions)
            continue

        if command == 'spending':
            debit_transactions = transactions.get_transactions_by_type('debit')
            reports.print_transactions('Debits', debit_transactions)
            reports.print_transaction_totals('Debits', debit_transactions)
            continue

        if command == 'lf':
            print('Reloading transaction file ...')
            transactions = transactions.Transactions()
            continue

        if command == 'pie':
            debits = transactions.get_transactions_by_type('debit')
            categories = transactions.get_categories(debits)
            charts.category_pie_chart(categories)
            continue

        if command == 'quit' or command == 'q':
            break

        print('*** Unrecognized command ***')
Esempio n. 3
0
def test_to_date_7():
    test_value = '2/1/2017'
    with pytest.raises(convert.InvalidDateFormat):
        returned_value = convert.to_date(test_value, 'abcdefg')
Esempio n. 4
0
def test_to_date_1():
    test_value = '3/15/2017'
    valid_date = datetime.date(2017, 3, 15)
    assert convert.to_date(test_value) == valid_date
Esempio n. 5
0
def test_to_date_6():
    test_value = ''
    assert convert.to_date(test_value) == None
Esempio n. 6
0
def test_to_date_5():
    test_value = 'February 22, 2017'
    with pytest.raises(ValueError):
        returned_value = convert.to_date(test_value)
Esempio n. 7
0
def test_to_date_4():
    test_value = '2/30/2017'
    with pytest.raises(ValueError):
        returned_value = convert.to_date(test_value)
Esempio n. 8
0
def test_to_date_3():
    test_value = '20170315'
    valid_date = datetime.date(2017, 3, 15)
    assert convert.to_date(test_value, 'yyyymmdd') == valid_date
Esempio n. 9
0
def test_to_date_2():
    test_value = '15/3/2017'
    valid_date = datetime.date(2017, 3, 15)
    assert convert.to_date(test_value, 'dd/mm/yyyy') == valid_date