예제 #1
0
 def setUp(self):
     """Create an Asset and Liability account."""
     asset_header = create_header('Asset Header', cat_type=1)
     self.asset_account = create_account('Asset Account', asset_header, 0)
     liability_header = create_header('Liability Header')
     self.liability_account = create_account('Liability Account',
                                             liability_header, 0)
예제 #2
0
    def test_get_profit_loss_header_totals_flipped(self):
        """
        The totals for Expenses, Cost of Goods Sold and Other Expenses should
        display the value total, not the credit/debit total.
        """
        child_header = create_header("Child Expense", self.expense_header, 6)
        gchild_account = create_account("GrandChild Expense", child_header, 0,
                                        6)
        gchild_header = create_header("Grandchild Expense", child_header, 6)
        ggchild_account = create_account("Great Grandchild Expense",
                                         gchild_header, 0, 6)

        entry = create_entry(datetime.date.today(), "test entry")
        create_transaction(entry, self.expense_account, 25)
        create_transaction(entry, gchild_account, 47)
        create_transaction(entry, ggchild_account, 82)

        start_date = datetime.date(1, 1, 1)
        stop_date = datetime.date.today()

        root_header = _get_profit_loss_header_totals(6, start_date, stop_date)
        child_header_result = root_header.descendants[0]
        gchild_header_result = child_header_result.descendants[0]

        self.assertEqual(root_header.total, -154)
        self.assertSequenceEqual(root_header.descendants, [child_header])
        self.assertEqual(child_header_result.total, -129)
        self.assertSequenceEqual(child_header_result.descendants,
                                 [gchild_header])
        self.assertEqual(gchild_header_result.total, -82)
예제 #3
0
    def test_get_profit_loss_header_totals(self):
        """
        The function should return a root Header with the descendants and
        total attributes.
        """
        child_header = create_header("Child Income", self.income_header, 4)
        gchild_account = create_account("GrandChild Income", child_header,
                                        0, 4)
        gchild_header = create_header("Grandchild Income", child_header, 4)
        ggchild_account = create_account("Great Grandchild Income",
                                         gchild_header, 0, 4)

        entry = create_entry(datetime.date.today(), "test entry")
        create_transaction(entry, self.income_account, 25)
        create_transaction(entry, gchild_account, 47)
        create_transaction(entry, ggchild_account, 82)

        start_date = datetime.date(1, 1, 1)
        stop_date = datetime.date.today()

        root_header = _get_profit_loss_header_totals(4, start_date, stop_date)
        child_header_result = root_header.descendants[0]
        gchild_header_result = child_header_result.descendants[0]

        self.assertEqual(root_header.total, 154)
        self.assertSequenceEqual(root_header.descendants, [child_header])
        self.assertEqual(child_header_result.total, 129)
        self.assertSequenceEqual(child_header_result.descendants,
                                 [gchild_header])
        self.assertEqual(gchild_header_result.total, 82)
예제 #4
0
 def setUp(self):
     """Create an initial Account, CreditCard & some CreditCardEntries."""
     create_and_login_user(self)
     self.liability_header = create_header('liability', cat_type=2)
     self.cc_account = create_account(
         "Credit Card", self.liability_header, 0)
     self.creditcard = CreditCard.objects.create(account=self.cc_account)
     self.expense_header = create_header("expenses", None, 6)
     self.expense_account = create_account(
         "expense", self.expense_header, 0, 6)
     entry_date = datetime.date(2015, 6, 11)
     self.entry = CreditCardEntry.objects.create(
         date=entry_date, card=self.creditcard, name='test anarch',
         merchant='test merch', amount=20,
     )
     self.transaction = CreditCardTransaction.objects.create(
         creditcard_entry=self.entry, account=self.expense_account,
         amount=20,
     )
     self.older_entry = CreditCardEntry.objects.create(
         date=entry_date - datetime.timedelta(days=1), card=self.creditcard,
         name='test anarch', merchant='test merch', amount=20)
     self.older_transaction = CreditCardTransaction.objects.create(
         creditcard_entry=self.older_entry, account=self.expense_account,
         amount=20)
예제 #5
0
    def test_get_profit_loss_header_totals_flipped(self):
        """
        The totals for Expenses, Cost of Goods Sold and Other Expenses should
        display the value total, not the credit/debit total.
        """
        child_header = create_header("Child Expense", self.expense_header, 6)
        gchild_account = create_account("GrandChild Expense", child_header,
                                        0, 6)
        gchild_header = create_header("Grandchild Expense", child_header, 6)
        ggchild_account = create_account("Great Grandchild Expense",
                                         gchild_header, 0, 6)

        entry = create_entry(datetime.date.today(), "test entry")
        create_transaction(entry, self.expense_account, 25)
        create_transaction(entry, gchild_account, 47)
        create_transaction(entry, ggchild_account, 82)

        start_date = datetime.date(1, 1, 1)
        stop_date = datetime.date.today()

        root_header = _get_profit_loss_header_totals(6, start_date, stop_date)
        child_header_result = root_header.descendants[0]
        gchild_header_result = child_header_result.descendants[0]

        self.assertEqual(root_header.total, -154)
        self.assertSequenceEqual(root_header.descendants, [child_header])
        self.assertEqual(child_header_result.total, -129)
        self.assertSequenceEqual(child_header_result.descendants,
                                 [gchild_header])
        self.assertEqual(gchild_header_result.total, -82)
예제 #6
0
 def setUp(self):
     """Create an Asset and Liability account."""
     asset_header = create_header('Asset Header', cat_type=1)
     self.asset_account = create_account('Asset Account', asset_header, 0)
     liability_header = create_header('Liability Header')
     self.liability_account = create_account('Liability Account',
                                             liability_header, 0)
예제 #7
0
    def setUp(self):
        """Create initial Headers, Accounts, an Entry & Transactions."""
        self.liability_header = create_header('liability', cat_type=2)
        self.trip_advances = create_account(
            "Trip Advances", self.liability_header, 0)
        self.store_account = create_account(
            "Local Store Credit Account", self.liability_header, 0)
        self.store = StoreAccount.objects.create(
            name='Local Store', account=self.store_account)
        self.expense_header = create_header("expenses", None, 6)
        self.expense_account = create_account(
            "expense", self.expense_header, 0, 6)

        entry_date = datetime.date(2015, 6, 11)
        self.entry = TripEntry.objects.create(
            date=entry_date, name='Testeroni', number='42',
            total_trip_advance=100, amount=50)
        self.trans1 = TripTransaction.objects.create(
            trip_entry=self.entry, account=self.expense_account, amount=25)
        self.trans2 = TripTransaction.objects.create(
            trip_entry=self.entry, account=self.expense_account, amount=25)
        self.store_trans = TripStoreTransaction.objects.create(
            trip_entry=self.entry, store=self.store,
            account=self.expense_account, amount=25
        )
예제 #8
0
    def test_get_profit_loss_header_totals(self):
        """
        The function should return a root Header with the descendants and
        total attributes.
        """
        child_header = create_header("Child Income", self.income_header, 4)
        gchild_account = create_account("GrandChild Income", child_header, 0,
                                        4)
        gchild_header = create_header("Grandchild Income", child_header, 4)
        ggchild_account = create_account("Great Grandchild Income",
                                         gchild_header, 0, 4)

        entry = create_entry(datetime.date.today(), "test entry")
        create_transaction(entry, self.income_account, 25)
        create_transaction(entry, gchild_account, 47)
        create_transaction(entry, ggchild_account, 82)

        start_date = datetime.date(1, 1, 1)
        stop_date = datetime.date.today()

        root_header = _get_profit_loss_header_totals(4, start_date, stop_date)
        child_header_result = root_header.descendants[0]
        gchild_header_result = child_header_result.descendants[0]

        self.assertEqual(root_header.total, 154)
        self.assertSequenceEqual(root_header.descendants, [child_header])
        self.assertEqual(child_header_result.total, 129)
        self.assertSequenceEqual(child_header_result.descendants,
                                 [gchild_header])
        self.assertEqual(gchild_header_result.total, 82)
예제 #9
0
 def setUp(self):
     """Create an initial Account & CreditCard."""
     self.liability_header = create_header('liability', cat_type=2)
     self.cc_account = create_account(
         "Credit Card", self.liability_header, 0)
     self.creditcard = CreditCard.objects.create(account=self.cc_account)
     self.expense_header = create_header("expenses", None, 6)
     self.expense_account = create_account(
         "expense", self.expense_header, 0, 6)
예제 #10
0
 def setUp(self):
     """Add some accounts and an exisiting BankReceivingEntry."""
     self.header = create_header('Initial')
     self.bank_account = create_account(
         'B Account', self.header, 0, 0, True)
     self.income_account = create_account(
         'I Account', self.header, 0, 4, False)
     self.day = datetime.date(2014, 4, 20)
     self.main_transaction = Transaction.objects.create(
         account=self.bank_account, balance_delta=50)
     self.entry = BankReceivingEntry.objects.create(
         main_transaction=self.main_transaction, date=self.day, memo="test",
         payor="payor")
     Transaction.objects.create(
         bankreceive_entry=self.entry, account=self.income_account,
         balance_delta=-50, detail="")
예제 #11
0
 def test_get_importer_returns_imported_class(self):
     """Test that `get_importer_class` returns the correct class."""
     header = create_header('Assets')
     account = create_account('Account', header, 0, 0, True)
     bank_account = BankAccount.objects.create(
         account=account, bank=BankAccount.VCB_CSV_IMPORTER)
     self.assertEqual(bank_account.get_importer_class(), CSVImporter)
예제 #12
0
 def setUp(self):
     """Create Headers, Accounts and an Event."""
     self.liability_header = create_header("Liability Account")
     self.liability_account = create_account("Liability Account", self.liability_header, 0)
     self.event = Event.objects.create(
         name="test", abbreviation="T", date=datetime.date.today(), city="Louisa", state="MD"
     )
예제 #13
0
    def setUp(self):
        """Create Banks and Income/Expense Accounts."""
        create_and_login_user(self)

        self.asset_header = create_header('asset', cat_type=1)
        self.expense_header = create_header('expense', cat_type=6)
        self.income_header = create_header('income', cat_type=4)
        self.asset_account = create_account(
            'asset', self.asset_header, 0, 1, True)
        self.other_asset = create_account(
            'other asset', self.asset_header, 0, 1, True)
        self.expense_account = create_account(
            'expense', self.expense_header, 0, 6)
        self.income_account = create_account(
            'income', self.income_header, 0, 4)
        self.bank_account = BankAccount.objects.create(
            account=self.asset_account, bank=BankAccount.VCB_CSV_IMPORTER)
예제 #14
0
 def setUp(self):
     """
     Events are tied to Transactions which require an Account.
     """
     self.asset_header = create_header("asset", cat_type=1)
     self.bank_account = create_account("bank", self.asset_header, 0, 1, True)
     self.event = Event.objects.create(
         name="test event", city="mineral", state="VA", date=datetime.date.today(), abbreviation="TE"
     )
예제 #15
0
 def setUp(self):
     """Create a CreditCardEntry to show."""
     self.liability_header = create_header('liability', cat_type=2)
     self.cc_account = create_account(
         "Credit Card", self.liability_header, 0)
     self.creditcard = CreditCard.objects.create(account=self.cc_account)
     self.expense_header = create_header("expenses", None, 6)
     self.expense_account = create_account(
         "expense", self.expense_header, 0, 6)
     entry_date = datetime.date.today()
     self.entry = CreditCardEntry.objects.create(
         date=entry_date, card=self.creditcard, name='test anarch',
         merchant='test merch', amount=20,
     )
     self.transaction = CreditCardTransaction.objects.create(
         creditcard_entry=self.entry, account=self.expense_account,
         amount=20,
     )
예제 #16
0
 def setUp(self):
     """Add some accounts and an exisiting BankSpendingEntry."""
     self.header = create_header('Assets')
     self.bank_account = create_account(
         'B Account', self.header, 0, 0, True)
     self.wrapper_account = BankAccount.objects.create(
         account=self.bank_account,
         bank='bank_import.importers.vcb.CSVImporter')
     self.expense_account = create_account(
         'E Account', self.header, 0, 6, False)
     self.day = datetime.date(2014, 4, 20)
     self.main_transaction = Transaction.objects.create(
         account=self.bank_account, balance_delta=-50)
     self.entry = BankSpendingEntry.objects.create(
         main_transaction=self.main_transaction, date=self.day, memo="test",
         payee="payee", ach_payment=True)
     Transaction.objects.create(
         bankspend_entry=self.entry, account=self.expense_account,
         balance_delta=50, detail="")
예제 #17
0
 def setUp(self):
     """Create Headers, Accounts and an Event."""
     self.liability_header = create_header('Liability Account')
     self.liability_account = create_account('Liability Account',
                                             self.liability_header, 0)
     self.event = Event.objects.create(name="test",
                                       abbreviation="T",
                                       date=datetime.date.today(),
                                       city="Louisa",
                                       state="MD")
예제 #18
0
 def setUp(self):
     """
     The report requires Income, Cost of Sales, Expense, Other Income and
     Other Expense Headers and Accounts.
     """
     self.income_header = create_header('Income Header', cat_type=4)
     self.income_account = create_account('Income Account',
                                          self.income_header, 0, 4)
     self.cos_header = create_header('Cost of Sales Header', cat_type=5)
     self.cos_account = create_account('Cost of Sales Account',
                                       self.cos_header, 0, 5)
     self.expense_header = create_header('Expense Header', cat_type=6)
     self.expense_account = create_account('Expense Account',
                                           self.expense_header, 0, 6)
     self.oincome_header = create_header('Other Income Header', cat_type=7)
     self.oincome_account = create_account('Other Income Account',
                                           self.oincome_header, 0, 7)
     self.oexpense_header = create_header('Other Expense Header',
                                          cat_type=8)
     self.oexpense_account = create_account('Other Expense Account',
                                            self.oexpense_header, 0, 8)
예제 #19
0
 def setUp(self):
     """
     The report requires Income, Cost of Sales, Expense, Other Income and
     Other Expense Headers and Accounts.
     """
     self.income_header = create_header('Income Header', cat_type=4)
     self.income_account = create_account('Income Account',
                                          self.income_header, 0, 4)
     self.cos_header = create_header('Cost of Sales Header', cat_type=5)
     self.cos_account = create_account('Cost of Sales Account',
                                       self.cos_header, 0, 5)
     self.expense_header = create_header('Expense Header', cat_type=6)
     self.expense_account = create_account('Expense Account',
                                           self.expense_header, 0, 6)
     self.oincome_header = create_header('Other Income Header', cat_type=7)
     self.oincome_account = create_account('Other Income Account',
                                           self.oincome_header, 0, 7)
     self.oexpense_header = create_header('Other Expense Header',
                                          cat_type=8)
     self.oexpense_account = create_account('Other Expense Account',
                                            self.oexpense_header, 0, 8)
예제 #20
0
 def setUp(self):
     """
     Events are tied to Transactions which require an Account.
     """
     self.asset_header = create_header('asset', cat_type=1)
     self.bank_account = create_account('bank', self.asset_header, 0, 1,
                                        True)
     self.event = Event.objects.create(name='test event',
                                       city='mineral',
                                       state='VA',
                                       date=datetime.date.today(),
                                       abbreviation="TE")
예제 #21
0
 def setUp(self):
     """Create some events and transactions."""
     liability_header = create_header('Liability Account')
     liability_account = create_account('Liability Account',
                                        liability_header, 0)
     self.event1 = Event.objects.create(name="test", abbreviation="TBMD",
                                        date=datetime.date.today(),
                                        city="Baltimore", state="MD")
     self.event2 = Event.objects.create(name="test", abbreviation="TRVA",
                                        date=datetime.date.today(),
                                        city="Richmond", state="VA")
     entry = create_entry(datetime.date.today(), 'test memo')
     Transaction.objects.create(journal_entry=entry,
                                account=liability_account,
                                balance_delta=25, event=self.event1)
     Transaction.objects.create(journal_entry=entry,
                                account=liability_account,
                                balance_delta=-15, event=self.event2)
예제 #22
0
    def setUp(self):
        """Create an Account and an Entry of each type."""
        self.header = create_header('Assets')
        self.account = create_account('Account', self.header, 0, 0, True)
        self.bank_account = BankAccount.objects.create(account=self.account)
        self.day = datetime.date(2014, 4, 20)

        self.deposit_transfer = Transaction.objects.create(
            account=self.account, balance_delta=-30, date=self.day)
        self.withdrawal_transfer = Transaction.objects.create(
            account=self.account, balance_delta=30, date=self.day)
        self.deposit_transaction = Transaction.objects.create(
            account=self.account, balance_delta=-20)
        self.deposit = BankReceivingEntry.objects.create(
            main_transaction=self.deposit_transaction,
            memo='deposit memo', payor='payor', date=self.day)
        self.withdrawal_transaction = Transaction.objects.create(
            account=self.account, balance_delta=20)
        self.withdrawal = BankSpendingEntry.objects.create(
            main_transaction=self.withdrawal_transaction, date=self.day,
            memo='withdrawal memo', payee='payee', ach_payment=True)
예제 #23
0
 def setUp(self):
     """Create some events and transactions."""
     liability_header = create_header('Liability Account')
     liability_account = create_account('Liability Account',
                                        liability_header, 0)
     self.event1 = Event.objects.create(name="test",
                                        abbreviation="TBMD",
                                        date=datetime.date.today(),
                                        city="Baltimore",
                                        state="MD")
     self.event2 = Event.objects.create(name="test",
                                        abbreviation="TRVA",
                                        date=datetime.date.today(),
                                        city="Richmond",
                                        state="VA")
     entry = create_entry(datetime.date.today(), 'test memo')
     Transaction.objects.create(journal_entry=entry,
                                account=liability_account,
                                balance_delta=25,
                                event=self.event1)
     Transaction.objects.create(journal_entry=entry,
                                account=liability_account,
                                balance_delta=-15,
                                event=self.event2)
예제 #24
0
 def setUp(self):
     """Create a bank account."""
     self.header = create_header('Assets')
     self.account = create_account('Account', self.header, 0, 0, True)
     self.day = datetime.date(2014, 4, 20)
예제 #25
0
    def test_save_and_next_success(self):
        """
        A `POST` using the `Save & View Next` button with valid data should
        only update the CreditCardEntry.

        The page should redirect to the approval page for the next
        CreditCardEntry belonging to the card, by creation date then id.
        """
        other_cc_acount = create_account('Card 2', self.liability_header, 0)
        other_card = CreditCard.objects.create(account=other_cc_acount)
        previous_date = self.entry.date - datetime.timedelta(days=1)
        future_date = self.entry.date + datetime.timedelta(days=1)

        other_card_entry = CreditCardEntry.objects.create(
            date=self.entry.date, card=other_card, name='test anarch',
            merchant='test merch', amount=20)
        CreditCardTransaction.objects.create(
            creditcard_entry=other_card_entry, account=self.expense_account,
            amount=20)
        oldest_entry = CreditCardEntry.objects.create(
            date=previous_date - datetime.timedelta(days=1),
            card=self.creditcard, name='test anarch', merchant='test merch',
            amount=20)
        CreditCardTransaction.objects.create(
            creditcard_entry=oldest_entry, account=self.expense_account,
            amount=20)
        older_entry = CreditCardEntry.objects.create(
            date=previous_date, card=self.creditcard, name='test anarch',
            merchant='test merch', amount=20)
        CreditCardTransaction.objects.create(
            creditcard_entry=older_entry, account=self.expense_account,
            amount=20)
        future_entry = CreditCardEntry.objects.create(
            date=future_date + datetime.timedelta(days=1),
            card=self.creditcard, name='test anarch', merchant='test merch',
            amount=20)
        CreditCardTransaction.objects.create(
            creditcard_entry=future_entry, account=self.expense_account,
            amount=20)
        next_entry = CreditCardEntry.objects.create(
            date=future_date, card=self.creditcard, name='test anarch',
            merchant='test merch', amount=20)
        CreditCardTransaction.objects.create(
            creditcard_entry=next_entry, account=self.expense_account,
            amount=20)
        higher_id_entry = CreditCardEntry.objects.create(
            date=future_date, card=self.creditcard, name='test anarch',
            merchant='test merch', amount=20)
        CreditCardTransaction.objects.create(
            creditcard_entry=higher_id_entry, account=self.expense_account,
            amount=20)

        response = self.client.post(
            reverse('creditcards.views.add_creditcard_entry',
                    args=[str(self.entry.id)]),
            data={'entry-id': self.entry.id,
                  'entry-date': '6/11/2015',
                  'entry-name': self.entry.name,
                  'entry-merchant': 'test merch',
                  'entry-amount': 42,
                  'entry-card': self.creditcard.id,
                  'transaction-TOTAL_FORMS': 1,
                  'transaction-INITIAL_FORMS': 1,
                  'transaction-MAX_NUM_FORMS': 1,
                  'transaction-0-id': self.transaction.id,
                  'transaction-0-creditcard_entry': self.entry.id,
                  'transaction-0-detail': self.transaction.detail,
                  'transaction-0-amount': 42,
                  'transaction-0-account': self.expense_account.id,
                  'subbtn': 'Submit & Open Next'})
        self.assertRedirects(
            response, reverse('creditcards.views.add_creditcard_entry',
                              args=[str(next_entry.id)]))
예제 #26
0
 def setUp(self):
     """Create an Entry for the Receipt."""
     self.header = create_header("Expense Header", None, 6)
     self.account = create_account("Darmok's Stipend", self.header, 0, 6)
     self.entry = create_entry(datetime.date.today(), 'Unique New York')
예제 #27
0
 def setUp(self):
     """Create an initial Account."""
     self.header = create_header("Credit Cards", None, 2)
     self.account = create_account("Darmok's CC", self.header, 0, 2)