Changeset - f21ac740f24c
[Not reviewed]
0 3 0
Brett Smith - 4 years ago 2020-06-15 14:16:34
brettcsmith@brettcsmith.org
data: Add Posting.at_cost() method.
3 files changed with 32 insertions and 14 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/data.py
Show inline comments
...
 
@@ -410,2 +410,8 @@ class Posting(BasePosting):
 

	
 
    def at_cost(self) -> Amount:
 
        if self.cost is None:
 
            return self.units
 
        else:
 
            return Amount(self.units.number * self.cost.number, self.cost.currency)
 

	
 

	
conservancy_beancount/reports/core.py
Show inline comments
...
 
@@ -358,18 +358,6 @@ class RelatedPostings(Sequence[data.Posting]):
 
    def balance(self) -> Balance:
 
        for _, balance in self.iter_with_balance():
 
            pass
 
        try:
 
            return balance
 
        except NameError:
 
            return Balance()
 
        return Balance(post.units for post in self)
 

	
 
    def balance_at_cost(self) -> Balance:
 
        balance = MutableBalance()
 
        for post in self:
 
            if post.cost is None:
 
                balance += post.units
 
            else:
 
                number = post.units.number * post.cost.number
 
                balance += data.Amount(number, post.cost.currency)
 
        return balance
 
        return Balance(post.at_cost() for post in self)
 

	
tests/test_data_posting.py
Show inline comments
...
 
@@ -84 +84,25 @@ def test_from_entries_mix_txns_and_other_directives(simple_txn):
 
        assert post.meta['note']  # Only works with PostingMeta
 

	
 
@pytest.mark.parametrize('cost_num', [105, 110, 115])
 
def test_at_cost(cost_num):
 
    post = data.Posting(
 
        'Income:Donations',
 
        testutil.Amount(25, 'EUR'),
 
        testutil.Cost(cost_num, 'JPY'),
 
        None,
 
        '*',
 
        None,
 
    )
 
    assert post.at_cost() == testutil.Amount(25 * cost_num, 'JPY')
 

	
 
def test_at_cost_no_cost():
 
    amount = testutil.Amount(25, 'EUR')
 
    post = data.Posting(
 
        'Income:Donations',
 
        amount,
 
        None,
 
        None,
 
        '*',
 
        None,
 
    )
 
    assert post.at_cost() == amount
0 comments (0 inline, 0 general)