1 from datetime import timedelta
2 from django.utils.timezone import now
3 from django.utils.translation import ugettext_lazy as _
4 from .recipient import Recipient
8 allow_negative_offset = False
12 def __init__(self, offset=0, time=None):
13 self.time = time or now()
14 if isinstance(offset, int):
15 offset = timedelta(offset)
18 def get_recipients(self):
21 hash_value=self.get_hash_value(obj),
22 email=self.get_email(obj),
23 context=self.get_context(obj),
25 for obj in self.get_objects()
28 def get_objects(self):
31 def get_hash_value(self, obj):
34 def get_email(self, obj):
37 def get_context(self, obj):
39 obj._meta.model_name: obj,
44 class ClubSingle(State):
46 name = _('club one-time donors')
49 class ClubSingleExpired(State):
50 slug = 'club-membership-expiring'
51 allow_negative_offset = True
52 name = _('club one-time donors with donation expiring')
54 def get_objects(self):
55 from club.models import Schedule
56 return Schedule.objects.filter(
58 expires_at__lt=self.time - self.offset
61 def get_hashed_value(self, obj):
62 return '%s:%s' % (obj.pk, obj.expires_at.isoformat())
65 class ClubTried(State):
66 slug = 'club-payment-unfinished'
67 name = _('club would-be donors')
69 def get_objects(self):
70 from club.models import Schedule
71 return Schedule.objects.filter(
73 started_at__lt=self.time - self.offset,
77 class ClubRecurring(State):
78 slug = 'club-recurring'
79 name = _('club recurring donors')
82 class ClubRecurringExpired(State):
83 slug = 'club-recurring-payment-problem'
84 name = _('club recurring donors with donation expired')
86 def get_objects(self):
87 from club.models import Schedule
88 return Schedule.objects.none()
93 name = _('cold group')
102 ClubRecurringExpired,