Beispiel #1
0
    def test_get_balance_sheet(self):
        self.ledger.create_account('101', 'Cash', 'asset')
        self.ledger.create_account('102', 'Equipment', 'asset')
        self.ledger.create_account('201', 'Bank Loan', 'liability')
        self.ledger.create_account('301', 'Share Capital', 'equity')
        self.ledger.record_transaction(date(2016, 9, 1),
                                       "Record the funder's investment",
                                       [('101', 500000), ('301', -500000)])
        self.ledger.record_transaction(date(2016, 9, 2), "Buy a laptop",
                                       [('101', -40000), ('102', 100000),
                                        ('201', -60000)])

        self.assertEqual(
            BalanceSheet(date=date(2016, 9, 1),
                         asset={
                             Account('101', 'Cash', 'asset'): 500000,
                             Account('102', 'Equipment', 'asset'): 0,
                         },
                         liability={
                             Account('201', 'Bank Loan', 'liability'): 0,
                         },
                         equity={
                             Account('301', 'Share Capital', 'equity'):
                             -500000,
                         },
                         retained_earnings=0),
            self.ledger.get_balance_sheet(date(2016, 9, 1)))
Beispiel #2
0
 def test_create_account_john(self):
     account_name = "john"
     account = Account(account_name)
     self.assertEqual(account.name, account_name)
     self.assertFalse(account.transactions)
     self.assertFalse(account.balances)
     self.assertEqual(account.balance, 0)
Beispiel #3
0
    def test_create_account(self):
        self.ledger.create_account('101', 'Cash', 'asset')
        self.ledger.create_account('201', 'Bank Loan', 'liability')
        self.ledger.create_account('301', 'Share Capital', 'equity')
        self.ledger.create_account('401', 'Revenue', 'revenue')
        self.ledger.create_account('501', 'Expense', 'expense')

        self.assertEqual(Account('101', 'Cash', 'asset'),
                         self.ledger.get_account('101'))
Beispiel #4
0
    def test_get_income_statement(self):
        self.ledger.create_account('101', 'Cash', 'asset')
        self.ledger.create_account('102', 'Equipment', 'asset')
        self.ledger.create_account('201', 'Bank Loan', 'liability')
        self.ledger.create_account('301', 'Share Capital', 'equity')
        self.ledger.create_account('401', 'Consulting Revenue', 'revenue')
        self.ledger.create_account('501', 'Business Travel', 'expense')
        self.ledger.record_transaction(date(2016, 9, 1),
                                       "Record the funder's investment",
                                       [('101', 500000), ('301', -500000)])
        self.ledger.record_transaction(date(2016, 9, 2), "Buy a laptop",
                                       [('101', -40000), ('102', 100000),
                                        ('201', -60000)])
        self.ledger.record_transaction(date(2016, 9,
                                            4), "Consulting for Acme, Inc.",
                                       [('101', 1000000), ('401', -1000000)])
        self.ledger.record_transaction(date(2016, 9,
                                            4), "Travel to Acme, Inc.",
                                       [('101', -150000), ('501', 150000)])
        self.ledger.record_transaction(date(2016, 9, 14),
                                       "Implementation for Acme, Inc.",
                                       [('101', 2500000), ('401', -2500000)])

        self.assertEqual(
            IncomeStatement(
                start_date=date(2016, 9, 1),
                end_date=date(2016, 9, 3),
                revenue={Account('401', 'Consulting Revenue', 'revenue'): 0},
                expense={Account('501', 'Business Travel', 'expense'): 0}),
            self.ledger.get_income_statement(date(2016, 9, 1),
                                             date(2016, 9, 3)))
        self.assertEqual(
            IncomeStatement(
                start_date=date(2016, 9, 4),
                end_date=date(2016, 9, 13),
                revenue={
                    Account('401', 'Consulting Revenue', 'revenue'): -1000000
                },
                expense={Account('501', 'Business Travel', 'expense'):
                         150000}),
            self.ledger.get_income_statement(date(2016, 9, 4),
                                             date(2016, 9, 13)))
Beispiel #5
0
def getAccountsFromLines(lines):
    accountNames = set()
    for line in lines:
        _, source, _, target, _, _ = line.replace("\n", "").split(";")
        accountNames.add(source)
        accountNames.add(target)
    accountNames = sorted(list(accountNames), key=lambda x: len(x))
    accounts = set()
    allAccount = Account("all")
    for accountName in accountNames:
        getAccountAndTopAccounts(accounts, accountName, allAccount)
    return allAccount, accounts
Beispiel #6
0
    def test_get_balance_with_one_transaction(self):
        account_name = "john"
        account = Account(account_name)
        payer = "john"
        payee = "mary"
        account = Account(account_name)
        transaction = Transaction("2020-01-22", payer, payee, 20)
        account.add_transaction(transaction)
        self.assertEqual(account.balance, -20)

        # Balance on date of transaction should be -20
        self.assertEqual(account.get_balance("2020-01-22"), -20)

        # Balance after date of transaction should be -20
        self.assertEqual(account.get_balance("2020-01-25"), -20)

        # Balance before first transaction - assume open and 0
        self.assertEqual(account.get_balance("2015-01-21"), 0)
Beispiel #7
0
    def test_add_invalid_name_transaction(self):
        account_name = "john"
        account = Account(account_name)
        payer = "mary"
        payee = "insurance"
        account = Account(account_name)
        transaction = Transaction("2020-01-22", payer, payee, 20)

        with self.assertRaises(AccountError):
            account.add_transaction(transaction)
Beispiel #8
0
def getAccountAndTopAccounts(accounts, accountName, allAccount):
    if not ":" in accountName:
        topAccount = allAccount
        rawName = accountName
    else:
        split = accountName.split(":")
        top = ":".join(split[:-1])
        rawName = split[-1]
        assert not accountName in (account.name for account in accounts)
        if not top in (account.name for account in accounts):
            topAccount = getAccountAndTopAccounts(accounts, top, allAccount)
        else:
            topAccount = next(account for account in accounts
                              if account.name == top)
    account = Account(rawName)
    accounts.add(account)
    topAccount.addAccount(account)
    return account
Beispiel #9
0
    def test_get_balance_with_five_transactions(self):
        account_name = "john"
        account = Account(account_name)
        payer = "john"
        payee = "mary"
        account = Account(account_name)
        transaction = Transaction("2020-01-01", payer, payee, 20)
        account.add_transaction(transaction)
        transaction = Transaction("2020-01-03", payer, payee, 20)
        account.add_transaction(transaction)
        transaction = Transaction("2020-01-05", payer, payee, 20)
        account.add_transaction(transaction)
        transaction = Transaction("2020-01-22", payer, payee, 20)
        account.add_transaction(transaction)
        transaction = Transaction("2020-01-30", payer, payee, 20)
        account.add_transaction(transaction)

        self.assertEqual(account.get_balance("2020-01-02"), -20)
        self.assertEqual(account.get_balance("2020-01-05"), -60)
        self.assertEqual(account.get_balance("2020-01-06"), -60)
        self.assertEqual(account.get_balance("2020-01-07"), -60)
        self.assertEqual(account.get_balance("2020-01-21"), -60)
        self.assertEqual(account.get_balance("2020-01-22"), -80)
        self.assertEqual(account.get_balance("2020-01-23"), -80)
        self.assertEqual(account.get_balance("2020-01-29"), -80)
        self.assertEqual(account.get_balance("2020-01-30"), -100)
        self.assertEqual(account.get_balance("2020-01-31"), -100)
Beispiel #10
0
    def test_get_balance_with_two_transactions(self):
        account_name = "john"
        account = Account(account_name)
        payer = "john"
        payee = "mary"
        account = Account(account_name)
        transaction = Transaction("2020-01-22", payer, payee, 20)
        account.add_transaction(transaction)
        transaction = Transaction("2020-01-25", payer, payee, 20)
        account.add_transaction(transaction)

        self.assertEqual(account.get_balance("2020-01-22"), -20)

        # Check balance between transactions is as expected
        self.assertEqual(account.get_balance("2020-01-23"), -20)

        #  Check final balance as expected
        self.assertEqual(account.get_balance("2020-01-25"), -40)