""" Represents someone taking up a plan. """
key = models.CharField(_('key'), max_length=255, unique=True)
email = models.EmailField(_('email'))
- membership = models.ForeignKey('Membership', verbose_name=_('membership'), null=True, blank=True, on_delete=models.PROTECT)
+ membership = models.ForeignKey('Membership', verbose_name=_('membership'), null=True, blank=True, on_delete=models.SET_NULL)
amount = models.DecimalField(_('amount'), max_digits=10, decimal_places=2)
monthly = models.BooleanField(_('monthly'), default=True)
yearly = models.BooleanField(_('yearly'), default=False)
-
+
+ source = models.CharField(_('source'), max_length=255, blank=True)
+
is_cancelled = models.BooleanField(_('cancelled'), default=False)
payed_at = models.DateTimeField(_('payed at'), null=True, blank=True)
started_at = models.DateTimeField(_('started at'), auto_now_add=True)
@classmethod
def send_receipt(cls, email, year):
+ Contact = apps.get_model('messaging', 'Contact')
Funding = apps.get_model('funding', 'Funding')
payments = []
+ try:
+ contact = Contact.objects.get(email=email)
+ except Contact.DoesNotExist:
+ funding = Funding.objects.filter(
+ email=email,
+ payed_at__year=year,
+ notifications=True).order_by('payed_at').first()
+ if funding is None:
+ print('no notifications')
+ return
+ optout = funding.wl_optout_url()
+ else:
+ if contact.level == Level.OPT_OUT:
+ print('opt-out')
+ return
+ optout = contact.wl_optout_url()
+
qs = cls.objects.filter(status='COMPLETED', schedule__email=email, completed_at__year=year).order_by('completed_at')
for order in qs:
payments.append({
'timestamp': order.completed_at,
'amount': order.get_amount(),
})
-
+
fundings = Funding.objects.filter(
email=email,
payed_at__year=year
"next_year": year + 1,
"total": sum(x['amount'] for x in payments),
"payments": payments,
+ "optout": optout,
}
temp = tempfile.NamedTemporaryFile(prefix='receipt-', suffix='.pdf', delete=False)
temp.close()
order = models.ForeignKey(PayUOrder, models.CASCADE, related_name='notification_set')
+class DirectDebit(models.Model):
+ first_name = models.CharField(_('first name'), max_length=255, blank=True)
+ last_name = models.CharField(_('last name'), max_length=255, blank=True)
+ sex = models.CharField(_('sex'), max_length=1, blank=True, choices=[
+ ('M', 'M'),
+ ('F', 'F'),
+ ])
+ date_of_birth = models.DateField(_('date of birth'), null=True, blank=True)
+ street = models.CharField(_('street'), max_length=255, blank=True)
+ building = models.CharField(_('building'), max_length=255, blank=True)
+ flat = models.CharField(_('flat'), max_length=255, blank=True)
+ town = models.CharField(_('town'), max_length=255, blank=True)
+ postal_code = models.CharField(_('postal code'), max_length=255, blank=True)
+ phone = models.CharField(_('phone'), max_length=255, blank=True)
+ email = models.CharField(_('e-mail'), max_length=255, blank=True)
+ iban = models.CharField(_('IBAN'), max_length=255, blank=True)
+ payment_id = models.CharField(_('payment identifier'), max_length=255, blank=True)
+ agree_newsletter = models.BooleanField(_('agree newsletter'))
+ date = models.DateField(_('date'))
+ amount = models.IntegerField(_('amount'))
+
+ class Meta:
+ verbose_name = _('direct debit')
+ verbose_name_plural = _('direct debits')
+