from reporting.utils import render_to_pdf
from .payment_methods import methods
from .payu import models as payu_models
+from .civicrm import report_activity
from . import utils
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
+ def updated_at(self):
+ try:
+ return self.notification_set.all().order_by('-received_at')[0].received_at
+ except IndexError:
+ return None
+
+ def report_activity(self):
+ if self.status not in ['COMPLETED', 'CANCELED', 'REJECTED']:
+ return
+
+ if self.status != 'COMPLETED':
+ name = settings.CIVICRM_ACTIVITIES['Failed contribution']
+ elif self.is_recurring():
+ name = settings.CIVICRM_ACTIVITIES['Recurring contribution']
+ else:
+ name = settings.CIVICRM_ACTIVITIES['Contribution']
+
+ report_activity.delay(
+ self.schedule.email,
+ self.schedule.key,
+ f'payu:{self.id}',
+ name,
+ self.updated_at,
+ {
+ 'kwota': self.schedule.amount,
+ }
+ )
@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')
payments = []
try:
'amount': order.get_amount(),
})
+ for ba in BillingAgreement.objects.filter(schedule__email=email):
+ payments.extend(ba.get_donations(year))
+
fundings = Funding.objects.filter(
email=email,
payed_at__year=year
"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()