Source code for newsletters.services

import os

from django.conf import settings
from django.template.loader import get_template
from django.utils import translation, timezone

from events.models import Event
from members.models import Member
from newsletters import emails
from partners.models import Partner
from pushnotifications.models import Message, Category


[docs]def write_to_file(pk, lang, html_message): """ Write newsletter to a file """ cache_dir = os.path.join(settings.MEDIA_ROOT, "newsletters") if not os.path.isdir(cache_dir): os.makedirs(cache_dir) with open(os.path.join(cache_dir, f"{pk}_{lang}.html"), "w+") as cache_file: cache_file.write(html_message)
[docs]def save_to_disk(newsletter, request): """ Writes the newsletter as HTML to file (in all languages) """ main_partner = Partner.objects.filter(is_main_partner=True).first() local_partner = Partner.objects.filter(is_local_partner=True).first() html_template = get_template("newsletters/email.html") for language in settings.LANGUAGES: translation.activate(language[0]) context = { "newsletter": newsletter, "agenda_events": ( newsletter.newslettercontent_set.filter(newsletteritem=None).order_by( "newsletterevent__start_datetime" ) ), "main_partner": main_partner, "local_partner": local_partner, "lang_code": language[0], "request": request, } html_message = html_template.render(context) write_to_file(newsletter.pk, language[0], html_message)
[docs]def get_agenda(start_date): end_date = start_date + timezone.timedelta(weeks=2) published_events = Event.objects.filter(published=True) base_events = published_events.filter( start__gte=start_date, end__lt=end_date ).order_by("start") if base_events.count() < 10: more_events = published_events.filter(end__gte=end_date).order_by("start") return [*base_events, *more_events][:10] return base_events
[docs]def send_newsletter(newsletter): emails.send_newsletter(newsletter) newsletter.sent = True newsletter.save() message = Message.objects.create( title_nl=newsletter.title_nl, title_en=newsletter.title_en, body_nl="Tik om te bekijken", body_en="Tap to view", url=settings.BASE_URL + newsletter.get_absolute_url(), category=Category.objects.get(key=Category.NEWSLETTER), ) message.users.set(Member.current_members.all()) message.send()