X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d527b63f5320d32e5c598354fd60ebc00d88d7bb..a7e41fefbf46ad5bfa2eb97dbd1cc11d3a28a354:/src/messaging/states.py diff --git a/src/messaging/states.py b/src/messaging/states.py new file mode 100644 index 000000000..317be2170 --- /dev/null +++ b/src/messaging/states.py @@ -0,0 +1,75 @@ +from datetime import timedelta +from django.utils.timezone import now +from django.utils.translation import ugettext_lazy as _ +from .recipient import Recipient + + +class State: + allow_negative_offset = False + context_fields = [] + + + def __init__(self, offset=0, time=None): + self.time = time or now() + if isinstance(offset, int): + offset = timedelta(offset) + self.offset = offset + + def get_recipients(self): + return [ + Recipient( + hash_value=self.get_hash_value(obj), + email=self.get_email(obj), + context=self.get_context(obj), + ) + for obj in self.get_objects() + ] + + def get_objects(self): + raise NotImplemented + + def get_hash_value(self, obj): + return str(obj.pk) + + def get_email(self, obj): + return obj.email + + def get_context(self, obj): + ctx = { + obj._meta.model_name: obj, + } + return ctx + + +class ClubMembershipExpiring(State): + slug = 'club-membership-expiring' + allow_negative_offset = True + name = _('club membership expiring') + + def get_objects(self): + from club.models import Schedule + return Schedule.objects.filter( + is_active=True, + expires_at__lt=self.time - self.offset + ) + + def get_hashed_value(self, obj): + return '%s:%s' % (obj.pk, obj.expires_at.isoformat()) + +class ClubPaymentUnfinished(State): + slug = 'club-payment-unfinished' + name = _('club payment unfinished') + + def get_objects(self): + from club.models import Schedule + return Schedule.objects.filter( + payuorder=None, + started_at__lt=self.time - self.offset, + ) + + +states = [ + ClubMembershipExpiring, + ClubPaymentUnfinished, +] +