Coverage for website/sales/payables.py: 100.00%
33 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.utils.functional import classproperty
3from payments.payables import Payable, payables
4from sales.models.order import Order, OrderItem
5from sales.services import is_adult, is_manager
8class OrderPayable(Payable[Order]):
9 @property
10 def payment_amount(self):
11 return self.model.total_amount
13 @property
14 def payment_topic(self):
15 return f"Sales at {self.model.shift}"
17 @property
18 def payment_notes(self):
19 return f"{self.model.order_description}. Ordered at {self.model.created_at.time()} ({self.model.id})"
21 @property
22 def payment_payer(self):
23 return self.model.payer
25 @property
26 def paying_allowed(self):
27 return not (
28 self.model.age_restricted
29 and self.model.payer
30 and not is_adult(self.model.payer)
31 )
33 def can_manage_payment(self, member):
34 return is_manager(member, self.model.shift) and member.has_perm(
35 "sales.change_order"
36 )
38 @classproperty
39 def immutable_after_payment(self):
40 return True
42 @classproperty
43 def immutable_foreign_key_models(self):
44 return {OrderItem: "order"}
46 @classproperty
47 def immutable_model_fields_after_payment(self):
48 return {
49 Order: [
50 "items",
51 "discount",
52 "order_description",
53 "subtotal",
54 "total_amount",
55 "payer",
56 "shift",
57 ],
58 OrderItem: ["product", "order", "total", "amount"],
59 }
62def register():
63 payables.register(Order, OrderPayable)