return utils.add_year(date)
return utils.add_month(date)
+ def get_other_active_recurring(self):
+ schedules = type(self).objects.exclude(
+ monthly=False, yearly=False
+ ).filter(is_cancelled=False, expires_at__gt=now()).exclude(pk=self.pk)
+ mine_q = models.Q(email=self.email)
+ if self.membership is not None:
+ mine_q |= models.Q(membership__user=self.membership.user)
+ schedules = schedules.filter(mine_q)
+ return schedules.order_by('-expires_at').first()
+
def send_email(self):
ctx = {'schedule': self}
send_mail(
self.email_sent = True
self.save()
+ def send_email_failed_recurring(self):
+ ctx = {
+ 'schedule': self,
+ 'other': self.get_other_active_recurring(),
+ }
+ send_mail(
+ 'Darowizna na Wolne Lektury — problem z płatnością',
+ template.loader.render_to_string('club/email/failed_recurring.txt', ctx),
+ settings.CONTACT_EMAIL, [self.email], fail_silently=False
+ )
+
def update_contact(self):
Contact = apps.get_model('messaging', 'Contact')
if not self.payed_at:
self.schedule.get_thanks_url())
def get_description(self):
- return ugettext('Towarzystwo Przyjaciół Wolnych Lektur')
+ return 'Wolne Lektury'
def is_recurring(self):
return self.schedule.get_payment_method().is_recurring
def status_updated(self):
if self.status == 'COMPLETED':
self.schedule.set_payed()
+
+ elif self.status == 'CANCELED' or self.status.startswith('ERR-'):
+ if self.is_recurring() and self.schedule.expires_at:
+ self.schedule.send_email_failed_recurring()
+
self.report_activity()
@property
)
@classmethod
- def send_receipt(cls, email, year):
+ def send_receipt(cls, email, year, resend=False):
Contact = apps.get_model('messaging', 'Contact')
Funding = apps.get_model('funding', 'Funding')
BillingAgreement = apps.get_model('paypal', 'BillingAgreement')
"total": sum(x['amount'] for x in payments),
"payments": payments,
"optout": optout,
+ "resend": resend,
}
temp = tempfile.NamedTemporaryFile(prefix='receipt-', suffix='.pdf', delete=False)
temp.close()