Coverage for website/events/payables.py: 91.89%

35 statements  

« prev     ^ index     » next       coverage.py v7.6.7, created at 2025-08-14 10:31 +0000

1from django.template.defaultfilters import date 

2from django.utils.functional import classproperty 

3 

4from events.models import EventRegistration 

5from events.services import is_organiser 

6from payments.payables import Payable, payables 

7 

8 

9class EventRegistrationPayable(Payable[EventRegistration]): 

10 @property 

11 def payment_amount(self): 

12 return self.model.payment_amount 

13 

14 @property 

15 def payment_topic(self): 

16 return f'{self.model.event.title} [{date(self.model.event.start, "Y-m-d")}]' 

17 

18 @property 

19 def payment_notes(self): 

20 notes = f"Event registration {self.model.event.title}. " 

21 notes += f"{date(self.model.event.start)}. Registration date: {date(self.model.date)}." 

22 if self.model.special_price: 22 ↛ 23line 22 didn't jump to line 23 because the condition on line 22 was never true

23 notes += " [special price]" 

24 return notes 

25 

26 @property 

27 def payment_payer(self): 

28 return self.model.member 

29 

30 def can_manage_payment(self, member): 

31 return is_organiser(member, self.model.event) and member.has_perm( 

32 "events.change_eventregistration" 

33 ) 

34 

35 @property 

36 def tpay_allowed(self): 

37 return self.model.event.tpay_allowed 

38 

39 @classproperty 

40 def immutable_after_payment(self): 

41 return True 

42 

43 @classproperty 

44 def immutable_model_fields_after_payment(self): 

45 return ["member", "event", "name", "payment_amount"] 

46 

47 

48def register(): 

49 payables.register(EventRegistration, EventRegistrationPayable)