Ignore:
Timestamp:
16 Mar 2015, 12:27:21 (10 years ago)
Author:
uli
Message:

Store payment items in payments.

Location:
main/waeup.ikoba/trunk/src/waeup/ikoba/payments
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.ikoba/trunk/src/waeup/ikoba/payments/payment.py

    r12772 r12774  
    186186    grok.provides(IPayment)
    187187
     188    @property
     189    def amount(self):
     190        """Total amount.
     191
     192        Sum of all contained payment items.
     193        """
     194        amounts = [item.amount for item in self.payment_items]
     195        return sum(amounts, decimal.Decimal("0.00"))
     196
    188197    def __init__(self, payer, payable, payee=None):
    189198        super(Payment, self).__init__()
    190         item_amounts = [decimal.Decimal("0.00"), ]
    191         item_amounts += [item.amount for item in payable.payment_items]
    192         self.amount = sum(item_amounts)
     199        items = tuple([x for x in payable.payment_items])
     200        self.payment_items = items
    193201        self.payer_id = payer.payer_id
    194202        self.payable_id = payable.payable_id
  • main/waeup.ikoba/trunk/src/waeup/ikoba/payments/tests/test_payment.py

    r12772 r12774  
    6161
    6262    payable_id = u'id1'
    63     items = (
    64         (u'item 1', decimal.Decimal("1.00")),
    65         (u'item 2', decimal.Decimal("2.12")),
    66         )
    6763
    6864    def __init__(self, payable_id=u'PAYABLE_01', title=u'title',
     
    340336        self.assertEqual(p1.amount, decimal.Decimal("0.00"))
    341337
     338    def test_amount_changed_after_init(self):
     339        # amount is dynamic: changes to payment items are reflected
     340        payable = FakePayable(payment_items=())
     341        p1 = Payment(self.payer, payable)
     342        assert p1.amount == decimal.Decimal("0.00")
     343        p1.payment_items = (PaymentItem(amount=decimal.Decimal("5.55")), )
     344        assert p1.amount == decimal.Decimal("5.55")
     345        p1.payment_items = (
     346            PaymentItem(amount=decimal.Decimal("5.55")),
     347            PaymentItem(amount=decimal.Decimal("1.11")),
     348            )
     349        assert p1.amount == decimal.Decimal("6.66")
     350
     351    def test_payment_items(self):
     352        # we can get payment items from a payment
     353        payable = FakePayable(payment_items=FAKE_PAYMENT_ITEMS)
     354        p1 = Payment(self.payer, payable)
     355        assert isinstance(p1.payment_items, tuple)
     356
     357    def test_payment_items_number(self):
     358        # payment item values are respected
     359        payable = FakePayable()
     360        item = PaymentItem(amount=decimal.Decimal("9.99"))
     361        payable.payment_items = [item, ]
     362        payment = Payment(self.payer, payable)
     363        assert len(payment.payment_items) == 1
     364        assert payment.payment_items[0] is item
     365
    342366
    343367class PaymentItemTests(unittest.TestCase):
Note: See TracChangeset for help on using the changeset viewer.