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]]
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 ***')
def test_to_date_7(): test_value = '2/1/2017' with pytest.raises(convert.InvalidDateFormat): returned_value = convert.to_date(test_value, 'abcdefg')
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
def test_to_date_6(): test_value = '' assert convert.to_date(test_value) == None
def test_to_date_5(): test_value = 'February 22, 2017' with pytest.raises(ValueError): returned_value = convert.to_date(test_value)
def test_to_date_4(): test_value = '2/30/2017' with pytest.raises(ValueError): returned_value = convert.to_date(test_value)
def test_to_date_3(): test_value = '20170315' valid_date = datetime.date(2017, 3, 15) assert convert.to_date(test_value, 'yyyymmdd') == valid_date
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