Esempio n. 1
0
    def test_canceled_payments_are_not_returned(self):
        txns = [
            {'date': '2014/04/14', "payee": "Bank A", "amount": 10.00},
            {'date': '2014/05/14', "payee": "Bank A", "amount": 10.00},
            {'date': '2014/06/14', "payee": "Bank A", "amount": 10.00},
        ]

        result = find_recurring_transactions(txns, datetime.datetime(2014, 8, 15))
        self.assertEqual(0, len(result))
Esempio n. 2
0
    def test_returns_multiple_tx_for_same_payee(self):
        txns = [
            {'date': '2014/09/14', "payee": "Bank A", "amount": 10.00},
            {'date': '2014/10/14', "payee": "Bank A", "amount": 10.00},
            {'date': '2014/11/14', "payee": "Bank A", "amount": 10.00},
        ]

        result = find_recurring_transactions(txns, datetime.datetime(2014, 11, 14))
        self.assertEqual(1, len(result))
Esempio n. 3
0
    def test_does_return_3_transactions_with_one_different_amount(self):
        txns = [
            {'date': '2014/09/14', "payee": "Bank A", "amount": 10.00},
            {'date': '2014/10/14', "payee": "Bank A", "amount": 10.00},
            {'date': '2014/11/14', "payee": "Bank A", "amount": 5.00},
        ]

        result = find_recurring_transactions(txns, datetime.datetime(2014, 11, 14))
        self.assertEqual(1, len(result))
Esempio n. 4
0
    def test_does_return_3_transactions_with_one_different_amount(self):
        txns = [
            {
                'date': '2014/09/14',
                "payee": "Bank A",
                "amount": 10.00
            },
            {
                'date': '2014/10/14',
                "payee": "Bank A",
                "amount": 10.00
            },
            {
                'date': '2014/11/14',
                "payee": "Bank A",
                "amount": 5.00
            },
        ]

        result = find_recurring_transactions(txns,
                                             datetime.datetime(2014, 11, 14))
        self.assertEqual(1, len(result))
Esempio n. 5
0
    def test_returns_multiple_tx_for_same_payee(self):
        txns = [
            {
                'date': '2014/09/14',
                "payee": "Bank A",
                "amount": 10.00
            },
            {
                'date': '2014/10/14',
                "payee": "Bank A",
                "amount": 10.00
            },
            {
                'date': '2014/11/14',
                "payee": "Bank A",
                "amount": 10.00
            },
        ]

        result = find_recurring_transactions(txns,
                                             datetime.datetime(2014, 11, 14))
        self.assertEqual(1, len(result))
Esempio n. 6
0
    def test_canceled_payments_are_not_returned(self):
        txns = [
            {
                'date': '2014/04/14',
                "payee": "Bank A",
                "amount": 10.00
            },
            {
                'date': '2014/05/14',
                "payee": "Bank A",
                "amount": 10.00
            },
            {
                'date': '2014/06/14',
                "payee": "Bank A",
                "amount": 10.00
            },
        ]

        result = find_recurring_transactions(txns,
                                             datetime.datetime(2014, 8, 15))
        self.assertEqual(0, len(result))
Esempio n. 7
0
def index():

    layout = Dashboard()
    layout.current_date = current_date()

    layout.accounts = [{
        "name": format_account(account),
        'balance': format_amount(balance)
    } for account, cur, balance in l.balance(
        accounts=s.Accounts.ASSETS_PATTERN)]

    layout.debts = [{
        "name": format_account(account),
        'balance': format_amount(float(balance) * -1)
    } for account, cur, balance in l.balance(
        accounts=s.Accounts.LIABILITIES_PATTERN)]

    layout.expense_balances = [{
        "name": format_account(account),
        'balance': format_amount(balance),
        "first": account == s.Accounts.EXPENSES_PATTERN
    } for account, cur, balance in l.balance(
        accounts=s.Accounts.EXPENSES_PATTERN,
        limit="date >= [{}]".format(current_date().strftime("%B")))]

    previous_month = current_datetime() - relativedelta(month=1)

    layout.expenses_previous_month = [{
        "name": format_account(account),
        'balance': format_amount(balance),
        "first": ":" not in account
    } for account, cur, balance in l.balance(
        accounts=s.Accounts.EXPENSES_PATTERN,
        limit="date >= [{}] and date < [{}]".format(
            previous_month.strftime("%B %Y"),
            current_date().strftime("%B %Y")))]

    recurring_income = ledger.find_recurring_transactions(
        l.register(accounts=s.Accounts.INCOME_PATTERN), current_datetime())

    layout.income = [{
        "name": format_account(txn['payee']),
        'balance': format_amount(float(txn['amount']) * -1)
    } for txn in recurring_income]

    layout.last_expenses = [{
        'payee': txn['payee'],
        'note': txn['note'],
        'amount': format_amount(txn['amount'])
    } for txn in l.register(accounts=s.Accounts.EXPENSES_PATTERN)[:-15:-1]]

    recurring_transactions = ledger.find_recurring_transactions(
        l.register(accounts=s.Accounts.EXPENSES_PATTERN), current_datetime())
    transactions_this_month = l.register(accounts=s.Accounts.EXPENSES_PATTERN,
                                         limit='date >= [{}]'.format(
                                             current_date().strftime("%B")))

    for txn in recurring_transactions:
        txn['date'] = current_datetime().strptime(txn['date'], '%Y/%m/%d')

    # unpayed_transactions = get_unmatched_txns(recurring_transactions, transactions_this_month)

    total = float(0)
    for txn in recurring_transactions:
        total += float(txn['amount'])

    recurring_transactions = [
        {
            "payee": txn['payee'],
            "due_in": days_until_next_transaction(txn['date']),
            "amount": format_amount(txn['amount'], width=3)
        } for txn in recurring_transactions  # unpayed_transactions
    ]

    layout.recurring_transactions = sorted(recurring_transactions,
                                           key=lambda item: item['due_in'])

    layout.recurring_transactions_total = format_amount(total)

    current_month = current_date().month

    flow = []
    for i in range(current_month - 3, current_month + 1):
        start_year = end_year = current_date().year
        start_month_nr = i % 12
        end_month_nr = (i + 1) % 12

        if i < 1:
            start_year -= 1
        if i > 11:
            end_year += 1

        result = l.register(accounts=" ".join(
            [s.Accounts.EXPENSES_PATTERN, s.Accounts.INCOME_PATTERN]),
                            M=True,
                            collapse=True,
                            limit="date >= [{} {}] and date < [{} {}]".format(
                                months[start_month_nr], start_year,
                                months[end_month_nr], end_year))

        amount = float(result[0]['amount']) * -1 if len(result) > 0 else 0
        flow.append({
            'month': months[start_month_nr],
            'amount': format_amount(amount),
            'type': "negative" if amount < 0 else "positive"
        })

    layout.cash_flow = flow

    return renderer.render(layout)
Esempio n. 8
0
def index():

    layout = Dashboard()
    layout.current_date = current_date()

    layout.accounts = [
        {"name": format_account(account), "balance": format_amount(balance)}
        for account, cur, balance in l.balance(accounts=s.Accounts.ASSETS_PATTERN)
    ]

    layout.debts = [
        {"name": format_account(account), "balance": format_amount(float(balance) * -1)}
        for account, cur, balance in l.balance(accounts=s.Accounts.LIABILITIES_PATTERN)
    ]

    layout.expense_balances = [
        {
            "name": format_account(account),
            "balance": format_amount(balance),
            "first": account == s.Accounts.EXPENSES_PATTERN,
        }
        for account, cur, balance in l.balance(
            accounts=s.Accounts.EXPENSES_PATTERN, limit="date >= [{}]".format(current_date().strftime("%B"))
        )
    ]

    previous_month = current_datetime() - relativedelta(month=1)

    layout.expenses_previous_month = [
        {"name": format_account(account), "balance": format_amount(balance), "first": ":" not in account}
        for account, cur, balance in l.balance(
            accounts=s.Accounts.EXPENSES_PATTERN,
            limit="date >= [{}] and date < [{}]".format(
                previous_month.strftime("%B %Y"), current_date().strftime("%B %Y")
            ),
        )
    ]

    recurring_income = ledger.find_recurring_transactions(
        l.register(accounts=s.Accounts.INCOME_PATTERN), current_datetime()
    )

    layout.income = [
        {"name": format_account(txn["payee"]), "balance": format_amount(float(txn["amount"]) * -1)}
        for txn in recurring_income
    ]

    layout.last_expenses = [
        {"payee": txn["payee"], "note": txn["note"], "amount": format_amount(txn["amount"])}
        for txn in l.register(accounts=s.Accounts.EXPENSES_PATTERN)[:-15:-1]
    ]

    recurring_transactions = ledger.find_recurring_transactions(
        l.register(accounts=s.Accounts.EXPENSES_PATTERN), current_datetime()
    )
    transactions_this_month = l.register(
        accounts=s.Accounts.EXPENSES_PATTERN, limit="date >= [{}]".format(current_date().strftime("%B"))
    )

    for txn in recurring_transactions:
        txn["date"] = current_datetime().strptime(txn["date"], "%Y/%m/%d")

    # unpayed_transactions = get_unmatched_txns(recurring_transactions, transactions_this_month)

    total = float(0)
    for txn in recurring_transactions:
        total += float(txn["amount"])

    recurring_transactions = [
        {
            "payee": txn["payee"],
            "due_in": days_until_next_transaction(txn["date"]),
            "amount": format_amount(txn["amount"], width=3),
        }
        for txn in recurring_transactions  # unpayed_transactions
    ]

    layout.recurring_transactions = sorted(recurring_transactions, key=lambda item: item["due_in"])

    layout.recurring_transactions_total = format_amount(total)

    current_month = current_date().month

    flow = []
    for i in range(current_month - 3, current_month + 1):
        start_year = end_year = current_date().year
        start_month_nr = i % 12
        end_month_nr = (i + 1) % 12

        if i < 1:
            start_year -= 1
        if i > 11:
            end_year += 1

        result = l.register(
            accounts=" ".join([s.Accounts.EXPENSES_PATTERN, s.Accounts.INCOME_PATTERN]),
            M=True,
            collapse=True,
            limit="date >= [{} {}] and date < [{} {}]".format(
                months[start_month_nr], start_year, months[end_month_nr], end_year
            ),
        )

        amount = float(result[0]["amount"]) * -1 if len(result) > 0 else 0
        flow.append(
            {
                "month": months[start_month_nr],
                "amount": format_amount(amount),
                "type": "negative" if amount < 0 else "positive",
            }
        )

    layout.cash_flow = flow

    return renderer.render(layout)
Esempio n. 9
0
 def test_multiple_transactions_over_longer_period_are_not_returned(self, txns):
     result = find_recurring_transactions(txns, datetime.datetime(2014, 10, 1))
     self.assertEqual(0, len(result))
Esempio n. 10
0
 def test_payments_off_by_week_are_returned(self, txns):
     result = find_recurring_transactions(txns, datetime.datetime(2014, 7, 14))
     self.assertEqual(1, len(result))
Esempio n. 11
0
 def test_multiple_transactions_over_longer_period_are_not_returned(
         self, txns):
     result = find_recurring_transactions(txns,
                                          datetime.datetime(2014, 10, 1))
     self.assertEqual(0, len(result))
Esempio n. 12
0
 def test_payments_off_by_week_are_returned(self, txns):
     result = find_recurring_transactions(txns,
                                          datetime.datetime(2014, 7, 14))
     self.assertEqual(1, len(result))