# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
#
from datetime import datetime, timedelta
+import os
+import tempfile
+from django.apps import apps
from django.conf import settings
from django.contrib.sites.models import Site
-from django.core.mail import send_mail
+from django.core.mail import send_mail, EmailMessage
from django.urls import reverse
from django.db import models
from django import template
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _, ungettext, ugettext, get_language
from catalogue.utils import get_random_hash
+from messaging.states import Level
+from reporting.utils import render_to_pdf
from .payment_methods import recurring_payment_method, single_payment_method
from .payu import models as payu_models
from . import utils
def save(self, *args, **kwargs):
if not self.key:
self.key = get_random_hash(self.email)
- return super(Schedule, self).save(*args, **kwargs)
+ super(Schedule, self).save(*args, **kwargs)
+ self.update_contact()
def initiate_payment(self, request):
return self.get_payment_method().initiate(request, self)
self.email_sent = True
self.save()
+ def update_contact(self):
+ Contact = apps.get_model('messaging', 'Contact')
+ if not self.payed_at:
+ level = Level.TRIED
+ since = self.started_at
+ else:
+ since = self.payed_at
+ if self.is_recurring():
+ level = Level.RECURRING
+ else:
+ level = Level.SINGLE
+ Contact.update(self.email, level, since, self.expires_at)
+
class Membership(models.Model):
""" Represents a user being recognized as a member of the club. """
if not self.schedule.email_sent:
self.schedule.send_email()
+ @classmethod
+ def send_receipt(cls, email, year):
+ qs = cls.objects.filter(status='COMPLETED', schedule__email=email, completed_at__year=year).order_by('completed_at')
+ if not qs.exists(): return
+ ctx = {
+ "email": email,
+ "year": year,
+ "next_year": year + 1,
+ "total": qs.aggregate(s=models.Sum('schedule__amount'))['s'],
+ "orders": qs,
+ }
+ temp = tempfile.NamedTemporaryFile(prefix='receipt-', suffix='.pdf', delete=False)
+ temp.close()
+ render_to_pdf(temp.name, 'club/receipt.texml', ctx, {
+ "fnp.eps": os.path.join(settings.STATIC_ROOT, "img/fnp.eps"),
+ })
+
+ message = EmailMessage(
+ f'Odlicz od podatku swoje darowizny przekazane dla Wolnych Lektur',
+ template.loader.render_to_string('club/receipt_email.txt', ctx),
+ settings.CONTACT_EMAIL, [email]
+ )
+ with open(temp.name, 'rb') as f:
+ message.attach('wolnelektury-darowizny.pdf', f.read(), 'application/pdf')
+ message.send()
+ os.unlink(f.name)
+
class PayUCardToken(payu_models.CardToken):
schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE)