From 93cfdc0f8dc00ffeb295463f610d17a9344cc57d Mon Sep 17 00:00:00 2001 From: Tore Brede <Tore.Brede@uib.no> Date: Mon, 1 Nov 2021 16:04:57 +0100 Subject: [PATCH] GREG-94: Adding sending of e-mail for invitations --- gregui/api/views/invitation.py | 7 +++---- gregui/mailutils.py | 25 +++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/gregui/api/views/invitation.py b/gregui/api/views/invitation.py index feed09dd..3bfbcc0c 100644 --- a/gregui/api/views/invitation.py +++ b/gregui/api/views/invitation.py @@ -23,6 +23,7 @@ from greg.models import Identity, InvitationLink, Person, Invitation from greg.permissions import IsSponsor from gregui.api.serializers.guest import GuestRegisterSerializer from gregui.api.serializers.invitation import InviteGuestSerializer +from gregui.mailutils import send_invite_mail from gregui.models import GregUserProfile logger = logging.getLogger(__name__) @@ -76,8 +77,7 @@ class InvitationView(CreateAPIView, DestroyAPIView): invitation__role__person_id=person.id, invitation__role__sponsor_id=sponsor_user.sponsor.id, ) - # TODO: send email to invited guest - print(invitationlink) + send_invite_mail(invitationlink) return Response(status=status.HTTP_201_CREATED) def delete(self, request, *args, **kwargs) -> Response: @@ -310,7 +310,6 @@ class ResendInvitationView(UpdateModelMixin, APIView): # expire=timezone.now() + datetime.timedelta(days=30), # ) - # TODO: send email to invited guest - print(link) + send_invite_mail(link) return Response(status=status.HTTP_200_OK) diff --git a/gregui/mailutils.py b/gregui/mailutils.py index 9ccbe5e3..c9bfd68f 100644 --- a/gregui/mailutils.py +++ b/gregui/mailutils.py @@ -1,13 +1,19 @@ +import logging + +from typing import Optional from typing import Union from django.conf import settings from django.template.context import Context from django_q.tasks import async_task +from greg.models import InvitationLink from gregui.models import EmailTemplate +logger = logging.getLogger(__name__) + def prepare_arguments( - template: EmailTemplate, context: dict[str, str], mail_to: str + template: EmailTemplate, context: dict[str, str], mail_to: str ) -> dict[str, Union[str, list[str]]]: """Combine input to a dict ready for use as arguments ti django's send_mail""" return { @@ -19,7 +25,7 @@ def prepare_arguments( def registration_template( - institution: str, sponsor: str, mail_to: str + institution: str, sponsor: str, mail_to: str ) -> dict[str, Union[str, list[str]]]: """ Prepare email for registration @@ -62,3 +68,18 @@ def send_registration_mail(mail_to: str, sponsor: str) -> str: def send_confirmation_mail(mail_to: str, guest: str) -> str: arguments = confirmation_template(guest, mail_to) return async_task("django.core.mail.send_mail", **arguments) + + +def send_invite_mail(link: InvitationLink) -> Optional[str]: + email_address = link.invitation.role.person.private_email + sponsor = link.invitation.role.sponsor + + if not email_address: + logger.warning(f"No e-mail address found for invitation link with ID: {link.id}") + return None + + if not sponsor: + logger.warning("Unable to determine sponsor for invitation link with ID: {link.id}") + return None + + return send_registration_mail(email_address.value, f"{sponsor.first_name} {sponsor.last_name}") -- GitLab