Exemplo n.º 1
0
    def test_change_cdty_split_price(self, book_transactions):
        tr = book_transactions.transactions(description="my purchase of stock")
        sp = tr.splits(account=book_transactions.accounts(name="broker"))

        assert len(book_transactions.prices) == 6

        p = [p for p in book_transactions.prices if p.date.day == 29][0]
        p_expected = (sp.value / sp.quantity).quantize(Decimal("0.000001"))
        assert p.value == p_expected

        # changing the quantity of the split should NOT change the existing price
        sp.quantity = (5, 1)

        book_transactions.validate()

        p_not_expected = (sp.value / sp.quantity).quantize(Decimal("0.000001"))

        assert len(book_transactions.prices) == 6
        assert p.value == p_expected
        assert p_expected != p_not_expected

        # changing the post date of the transaction of the split should create a new price
        tr.post_date = date(2015, 1, 29)
        book_transactions.validate()
        book_transactions.flush()
        assert len(book_transactions.prices) == 7
Exemplo n.º 2
0
    def test_change_cdty_split_price(self, book_transactions):
        tr = book_transactions.transactions(description="my purchase of stock")
        sp = tr.splits(account=book_transactions.accounts(name="broker"))

        assert len(book_transactions.prices) == 6

        p = [p for p in book_transactions.prices if p.date.day == 29][0]
        assert p.value == (sp.value / sp.quantity).quantize(
            Decimal("0.000001"))

        print(book_transactions.prices)

        # changing the quantity of the split should change the existing price
        sp.quantity = (5, 1)
        print(tr.post_date, tr.enter_date)
        print(Transaction._post_date, Transaction.enter_date)
        print(book_transactions.prices)

        book_transactions.validate()
        print(book_transactions.prices)

        assert len(book_transactions.prices) == 6
        assert p.value == (sp.value / sp.quantity).quantize(
            Decimal("0.000001"))

        # changing the post date of the transaction of the split should create a new price
        tr.post_date = date(2015, 1, 29)
        book_transactions.validate()
        assert len(book_transactions.prices) == 7
Exemplo n.º 3
0
    def test_delete__replace_existing_split__split_with_transaction(
        self, book_transactions
    ):
        s = len(book_transactions.splits)
        transaction = book_transactions.transactions(description="my revenue")
        split = transaction.splits(value=1000)
        split_guid = split.guid
        assert len(transaction.splits) == 2
        splits = list(transaction.splits)
        del transaction.splits[:]

        splits = [
            Split(
                account=split.account,
                value=split.value * 2,
                quantity=split.quantity * 2,
                transaction=transaction,
            )
            for split in splits
        ]

        assert len(transaction.splits) == 2
        transaction.splits[:] = splits
        assert split.transaction is None
        assert len(transaction.splits) == 2
        book_transactions.flush()
        book_transactions.save()
        # check that previous split has been deleted
        with pytest.raises(KeyError, match="Could not find object with {'guid'"):
            split = book_transactions.splits(guid=split_guid)
        ns = len(book_transactions.splits)
        assert ns == s
Exemplo n.º 4
0
 def test_delete_existing_transaction(self, book_transactions):
     l = len(book_transactions.transactions)
     s = len(book_transactions.splits)
     tr = book_transactions.transactions(description="my revenue")
     book_transactions.delete(tr)
     book_transactions.save()
     nl = len(book_transactions.transactions)
     ns = len(book_transactions.splits)
     assert nl == l - 1
     assert ns == s - 2
Exemplo n.º 5
0
 def test_delete_existing_transaction(self, book_transactions):
     l = len(book_transactions.transactions)
     s = len(book_transactions.splits)
     tr = book_transactions.transactions(description="my revenue")
     book_transactions.delete(tr)
     book_transactions.save()
     nl = len(book_transactions.transactions)
     ns = len(book_transactions.splits)
     assert nl == l - 1
     assert ns == s - 2
Exemplo n.º 6
0
    def test_delete_existing_transaction(self, book_transactions):
        asset = book_transactions.accounts.get(name="asset")
        inc = book_transactions.accounts.get(name="inc")
        exp = book_transactions.accounts.get(name="exp")

        # revenue item
        revenue = book_transactions.transactions(description="my revenue")
        revenue_split_asset = revenue.splits(account=asset)
        revenue_split_inc = revenue.splits(account=inc)
        assert revenue_split_asset.is_credit is False
        assert revenue_split_asset.is_debit is True
        assert revenue_split_inc.is_credit is True
        assert revenue_split_inc.is_debit is False

        # expense item
        expense = book_transactions.transactions(description="my expense")
        expense_split_asset = expense.splits(account=asset)
        expense_split_inc = expense.splits(account=exp)
        assert expense_split_asset.is_credit is True
        assert expense_split_asset.is_debit is False
        assert expense_split_inc.is_credit is False
        assert expense_split_inc.is_debit is True
Exemplo n.º 7
0
    def test_change_cdty_split_price(self, book_transactions):
        tr = book_transactions.transactions(description="my purchase of stock")
        sp = tr.splits(account=book_transactions.accounts(name="broker"))

        assert len(book_transactions.prices) == 6

        p = [p for p in book_transactions.prices if p.date.day == 29][0]
        assert p.value == (sp.value / sp.quantity).quantize(Decimal("0.000001"))

        # changing the quantity of the split should change the existing price
        sp.quantity = (5, 1)
        book_transactions.validate()
        assert len(book_transactions.prices) == 6
        assert p.value == (sp.value / sp.quantity).quantize(Decimal("0.000001"))

        # changing the post date of the transaction of the split should create a new price
        tr.post_date = datetime(2015, 1, 29, tzinfo=tr.post_date.tzinfo)
        book_transactions.validate()
        assert len(book_transactions.prices) == 7
Exemplo n.º 8
0
    def test_delete__replace_existing_split(self, book_transactions):
        s = len(book_transactions.splits)
        transaction = book_transactions.transactions(description="my revenue")
        split = transaction.splits(value=1000)
        assert len(transaction.splits) == 2
        splits = [
            Split(
                account=split.account,
                value=split.value,
                quantity=split.quantity,
            )
            for split in list(transaction.splits)
        ]

        assert len(transaction.splits) == 2
        transaction.splits[:] = splits
        assert split.transaction is None
        assert len(transaction.splits) == 2
        book_transactions.flush()
        book_transactions.save()
        ns = len(book_transactions.splits)
        assert ns == s