donation.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from __future__ import annotations
  2. import time
  3. from datetime import timedelta
  4. from django.db import models
  5. from django.utils import timezone
  6. from django_prometheus.models import ExportModelOperationsMixin
  7. class Donation(ExportModelOperationsMixin("Donation"), models.Model):
  8. @staticmethod
  9. def _created_default():
  10. return timezone.now()
  11. @staticmethod
  12. def _due_default():
  13. return timezone.now() + timedelta(days=7)
  14. @staticmethod
  15. def _mref_default():
  16. return "ONDON" + str(time.time())
  17. class Interval(models.IntegerChoices):
  18. ONCE = 0
  19. MONTHLY = 1
  20. QUARTERLY = 3
  21. created = models.DateTimeField(default=_created_default)
  22. name = models.CharField(max_length=255)
  23. iban = models.CharField(max_length=34)
  24. bic = models.CharField(max_length=11, blank=True)
  25. amount = models.DecimalField(max_digits=8, decimal_places=2)
  26. message = models.CharField(max_length=255, blank=True)
  27. due = models.DateTimeField(default=_due_default)
  28. mref = models.CharField(max_length=32, default=_mref_default)
  29. interval = models.IntegerField(choices=Interval.choices, default=Interval.ONCE)
  30. email = models.EmailField(max_length=255, blank=True)
  31. class Meta:
  32. managed = False
  33. @property
  34. def interval_label(self):
  35. return dict(self.Interval.choices)[self.interval]