From a0de4b8b0481ab09be91a4f23ce851153754ae4b Mon Sep 17 00:00:00 2001 From: Hemant M Mehta Date: Thu, 6 Nov 2025 15:18:07 +0530 Subject: [PATCH 01/13] fix: email-notifications-team-invites closes: #1160 --- app/eventyay/api/serializers/organizer.py | 31 ++++++++++++---- app/eventyay/base/models/organizer.py | 18 +++++++--- .../pretixcontrol/email/invitation.txt | 12 +++---- .../views/organizer_views/team_view.py | 35 ++++++++++++++---- app/eventyay/eventyay_common/views/team.py | 36 +++++++++++++++---- 5 files changed, 101 insertions(+), 31 deletions(-) diff --git a/app/eventyay/api/serializers/organizer.py b/app/eventyay/api/serializers/organizer.py index 552d96f1c9..71251b236b 100644 --- a/app/eventyay/api/serializers/organizer.py +++ b/app/eventyay/api/serializers/organizer.py @@ -173,7 +173,10 @@ def _send_invite(self, instance): try: mail( instance.email, - _('eventyay account invitation'), + _('You have been invited to join the team "{team}" for "{organizer}"').format( + team=instance.team.name, + organizer=self.context['organizer'].name, + ), 'pretixcontrol/email/invitation.txt', { 'user': self, @@ -208,14 +211,30 @@ def create(self, validated_data): else: if self.context['team'].members.filter(pk=user.pk).exists(): raise ValidationError(_('This user already has permissions for this team.')) - + try: + mail( + user.email, + _('You have been invited to join the team "{team}" for "{organizer}"').format( + team=self.context['team'].name, + organizer=self.context['organizer'].name, + ), + 'pretixcontrol/email/invitation.txt', + { + 'user': user, + 'organizer': self.context['organizer'].name, + 'team': self.context['team'].name, + 'url': build_absolute_uri('control:teams.detail', kwargs={'organizer': self.context['organizer'].slug, 'team': self.context['team'].pk}), + }, + event=None, + locale=get_language_without_region(), + ) + except SendMailException: + logger.warning("Failed to send invitation email to existing user: %s", user.email) + self.context['team'].members.add(user) self.context['team'].log_action( 'eventyay.team.member.added', - data={ - 'email': user.email, - 'user': user.pk, - }, + data={'email': user.email, 'user': user.pk}, **self.context['log_kwargs'], ) return TeamInvite(email=user.email) diff --git a/app/eventyay/base/models/organizer.py b/app/eventyay/base/models/organizer.py index 3c7b5e6418..3f98db2b1e 100644 --- a/app/eventyay/base/models/organizer.py +++ b/app/eventyay/base/models/organizer.py @@ -485,19 +485,27 @@ def send(self): invitation_link = self.invitation_url invitation_text = _( - """Hi! -You have been invited to the {name} event organizer team - Please click here to accept: + """Hello, + +You have been invited to join the team "{name}" for the organizer "{organizer}". + +Please click the following link to accept the invitation: {invitation_link} -See you there, -The {organizer} team""" +If you do not want to join, you can safely ignore or delete this email. + +Best regards, +Your event team""" ).format( name=str(self.team.name), invitation_link=invitation_link, organizer=str(self.team.organizer.name), ) - invitation_subject = _('You have been invited to an organizer team') + invitation_subject = _('You have been invited to join the team "{team}" for "{organizer}"').format( + team=str(self.team.name), + organizer=str(self.team.organizer.name), + ) mail = QueuedMail.objects.create( to=self.email, diff --git a/app/eventyay/control/templates/pretixcontrol/email/invitation.txt b/app/eventyay/control/templates/pretixcontrol/email/invitation.txt index a41a1e7508..c31e7c15e0 100644 --- a/app/eventyay/control/templates/pretixcontrol/email/invitation.txt +++ b/app/eventyay/control/templates/pretixcontrol/email/invitation.txt @@ -1,16 +1,14 @@ {% load i18n %}{% blocktrans with url=url|safe %}Hello, -you have been invited to the following event team +You have been invited to join the team "{{ team }}" for the organizer "{{ organizer }}". -Organizer: {{ organizer }} -Team: {{ team }} - -If you want to join that team, just click on the following link: +Please click the following link to accept the invitation: {{ url }} +If you are already logged in, you will be automatically added to the team. Otherwise, please log in or create an account to join. + If you do not want to join, you can safely ignore or delete this email. Best regards, - Your event team -{% endblocktrans %} +{% endblocktranslate %} \ No newline at end of file diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index 51338da71f..542445ac82 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -173,7 +173,10 @@ def _send_invite(self, instance): try: mail( instance.email, - _('eventyay account invitation'), + _('You have been invited to join the team "{team}" for "{organizer}"').format( + team=instance.team.name, + organizer=self.request.organizer.name, + ), 'pretixcontrol/email/invitation.txt', { 'user': self, @@ -304,16 +307,34 @@ def post(self, request, *args, **kwargs): ) return self.get(request, *args, **kwargs) + # Send email to registered user and then add them + try: + mail( + user.email, + _('You have been invited to join the team "{team}" for "{organizer}"').format( + team=self.object.name, + organizer=self.request.organizer.name, + ), + 'pretixcontrol/email/invitation.txt', + { + 'user': user, + 'organizer': self.request.organizer.name, + 'team': self.object.name, + 'url': build_global_uri('eventyay_common:organizer.team', kwargs={'organizer': self.request.organizer.slug, 'team': self.object.pk}), + }, + event=None, + locale=self.request.LANGUAGE_CODE, + ) + except SendMailException: + logger.warning("Failed to send invitation to existing member %s", user.email) + self.object.members.add(user) self.object.log_action( - 'pretix.team.member.added', + 'eventyay.team.member.added', user=self.request.user, - data={ - 'email': user.email, - 'user': user.pk, - }, + data={'email': user.email, 'user': user.pk}, ) - messages.success(self.request, _('The new member has been added to the team.')) + messages.success(self.request, _('The new member has been invited and added to the team.')) return redirect(self.get_success_url()) elif 'name' in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed(): diff --git a/app/eventyay/eventyay_common/views/team.py b/app/eventyay/eventyay_common/views/team.py index de4bb90af3..d34a1c02ab 100644 --- a/app/eventyay/eventyay_common/views/team.py +++ b/app/eventyay/eventyay_common/views/team.py @@ -11,6 +11,9 @@ from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView from django_scopes import scopes_disabled +import logging +logger = logging.getLogger(__name__) + from eventyay.base.auth import get_auth_backends from eventyay.base.models.organizer import Team, TeamAPIToken, TeamInvite from eventyay.base.models.auth import User @@ -67,7 +70,10 @@ def _send_invite(self, instance): try: mail( instance.email, - _('eventyay account invitation'), + _('You have been invited to join the team "{team}" for "{organizer}"').format( + team=instance.team.name, + organizer=self.request.organizer.name, + ), 'pretixcontrol/email/invitation.txt', { 'user': self, @@ -198,16 +204,34 @@ def post(self, request, *args, **kwargs): ) return self.get(request, *args, **kwargs) + # Send email to registered user even if they exist + try: + mail( + user.email, + _('You have been invited to join the team "{team}" for "{organizer}"').format( + team=self.object.name, + organizer=self.request.organizer.name, + ), + 'pretixcontrol/email/invitation.txt', + { + 'user': user, + 'organizer': self.request.organizer.name, + 'team': self.object.name, + 'url': build_global_uri('eventyay_common:organizer.team', kwargs={'organizer': self.request.organizer.slug, 'team': self.object.pk}), + }, + event=None, + locale=self.request.LANGUAGE_CODE, + ) + except SendMailException: + logger.warning("Failed to send invitation email to existing user %s", user.email) + self.object.members.add(user) self.object.log_action( 'eventyay.team.member.added', user=self.request.user, - data={ - 'email': user.email, - 'user': user.pk, - }, + data={'email': user.email, 'user': user.pk}, ) - messages.success(self.request, _('The new member has been added to the team.')) + messages.success(self.request, _('The new member has been invited and added to the team.')) return redirect(self.get_success_url()) elif 'name' in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed(): From d6c4ec08cdc077d23a825c7c37837f342ca09896 Mon Sep 17 00:00:00 2001 From: Hemant M Mehta Date: Thu, 6 Nov 2025 15:43:00 +0530 Subject: [PATCH 02/13] fix: suggestion by sourcery Signed-off-by: Hemant M Mehta --- app/eventyay/api/serializers/organizer.py | 8 ++++++-- .../control/templates/pretixcontrol/email/invitation.txt | 2 +- app/eventyay/control/views/organizer_views/team_view.py | 3 ++- app/eventyay/eventyay_common/views/team.py | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/eventyay/api/serializers/organizer.py b/app/eventyay/api/serializers/organizer.py index 71251b236b..36009bf3d2 100644 --- a/app/eventyay/api/serializers/organizer.py +++ b/app/eventyay/api/serializers/organizer.py @@ -228,8 +228,12 @@ def create(self, validated_data): event=None, locale=get_language_without_region(), ) - except SendMailException: - logger.warning("Failed to send invitation email to existing user: %s", user.email) + except SendMailException as exc: + logger.warning( + "Failed to send invitation email to existing user: %s. Exception: %s", + user.email, + exc, + ) self.context['team'].members.add(user) self.context['team'].log_action( diff --git a/app/eventyay/control/templates/pretixcontrol/email/invitation.txt b/app/eventyay/control/templates/pretixcontrol/email/invitation.txt index c31e7c15e0..7203fe2c89 100644 --- a/app/eventyay/control/templates/pretixcontrol/email/invitation.txt +++ b/app/eventyay/control/templates/pretixcontrol/email/invitation.txt @@ -11,4 +11,4 @@ If you do not want to join, you can safely ignore or delete this email. Best regards, Your event team -{% endblocktranslate %} \ No newline at end of file +{% endblocktrans %} \ No newline at end of file diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index 542445ac82..3d49c30958 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -325,8 +325,10 @@ def post(self, request, *args, **kwargs): event=None, locale=self.request.LANGUAGE_CODE, ) + messages.success(self.request, _('The new member has been invited and added to the team.')) except SendMailException: logger.warning("Failed to send invitation to existing member %s", user.email) + messages.warning(self.request, _('The new member was added to the team, but the invitation email could not be sent.')) self.object.members.add(user) self.object.log_action( @@ -334,7 +336,6 @@ def post(self, request, *args, **kwargs): user=self.request.user, data={'email': user.email, 'user': user.pk}, ) - messages.success(self.request, _('The new member has been invited and added to the team.')) return redirect(self.get_success_url()) elif 'name' in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed(): diff --git a/app/eventyay/eventyay_common/views/team.py b/app/eventyay/eventyay_common/views/team.py index d34a1c02ab..d6e2f17caa 100644 --- a/app/eventyay/eventyay_common/views/team.py +++ b/app/eventyay/eventyay_common/views/team.py @@ -223,7 +223,7 @@ def post(self, request, *args, **kwargs): locale=self.request.LANGUAGE_CODE, ) except SendMailException: - logger.warning("Failed to send invitation email to existing user %s", user.email) + logger.warning("Failed to send invitation email to existing user %s", user.email, exc_info=True) self.object.members.add(user) self.object.log_action( From 70793510bb8b76455c3827c988786106be60920c Mon Sep 17 00:00:00 2001 From: Hemant M Mehta Date: Thu, 6 Nov 2025 17:46:54 +0530 Subject: [PATCH 03/13] fix: copilot suggestion Signed-off-by: Hemant M Mehta --- app/eventyay/control/views/organizer_views/team_view.py | 9 +++++++-- app/eventyay/eventyay_common/views/team.py | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index 3d49c30958..095ea87d53 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -14,6 +14,9 @@ ) from django_scopes import scopes_disabled +import logging +logger = logging.getLogger(__name__) + from eventyay.base.auth import get_auth_backends from eventyay.base.models.auth import User from eventyay.base.models.organizer import Team, TeamAPIToken, TeamInvite @@ -325,11 +328,13 @@ def post(self, request, *args, **kwargs): event=None, locale=self.request.LANGUAGE_CODE, ) - messages.success(self.request, _('The new member has been invited and added to the team.')) except SendMailException: - logger.warning("Failed to send invitation to existing member %s", user.email) + logger.warning("Failed to send invitation to existing member %s", user.email, exc_info=True) messages.warning(self.request, _('The new member was added to the team, but the invitation email could not be sent.')) + else: + messages.success(self.request, _('The new member has been invited and added to the team.')) + self.object.members.add(user) self.object.log_action( 'eventyay.team.member.added', diff --git a/app/eventyay/eventyay_common/views/team.py b/app/eventyay/eventyay_common/views/team.py index d6e2f17caa..8e8a23c188 100644 --- a/app/eventyay/eventyay_common/views/team.py +++ b/app/eventyay/eventyay_common/views/team.py @@ -224,6 +224,10 @@ def post(self, request, *args, **kwargs): ) except SendMailException: logger.warning("Failed to send invitation email to existing user %s", user.email, exc_info=True) + messages.warning( + self.request, + _('The new member has been added to the team, but the invitation email could not be delivered.') + ) self.object.members.add(user) self.object.log_action( From e9fad2e670057c32693de34e4a31be9dc4bcd74e Mon Sep 17 00:00:00 2001 From: Hemant M Mehta Date: Thu, 6 Nov 2025 18:04:21 +0530 Subject: [PATCH 04/13] fix: prevents conflicting success and warning messages during team invitation Signed-off-by: Hemant M Mehta --- .../control/templates/pretixcontrol/email/invitation.txt | 2 +- app/eventyay/control/views/organizer_views/team_view.py | 2 ++ app/eventyay/eventyay_common/views/team.py | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/eventyay/control/templates/pretixcontrol/email/invitation.txt b/app/eventyay/control/templates/pretixcontrol/email/invitation.txt index 7203fe2c89..b811e35d4b 100644 --- a/app/eventyay/control/templates/pretixcontrol/email/invitation.txt +++ b/app/eventyay/control/templates/pretixcontrol/email/invitation.txt @@ -1,4 +1,4 @@ -{% load i18n %}{% blocktrans with url=url|safe %}Hello, +{% load i18n %}{% blocktrans with url=url|safe team=team organizer=organizer %}Hello, You have been invited to join the team "{{ team }}" for the organizer "{{ organizer }}". diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index 095ea87d53..fa7f5ae6f7 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -329,10 +329,12 @@ def post(self, request, *args, **kwargs): locale=self.request.LANGUAGE_CODE, ) except SendMailException: + self.object.members.add(user) logger.warning("Failed to send invitation to existing member %s", user.email, exc_info=True) messages.warning(self.request, _('The new member was added to the team, but the invitation email could not be sent.')) else: + self.object.members.add(user) messages.success(self.request, _('The new member has been invited and added to the team.')) self.object.members.add(user) diff --git a/app/eventyay/eventyay_common/views/team.py b/app/eventyay/eventyay_common/views/team.py index 8e8a23c188..ee16efe72a 100644 --- a/app/eventyay/eventyay_common/views/team.py +++ b/app/eventyay/eventyay_common/views/team.py @@ -228,6 +228,9 @@ def post(self, request, *args, **kwargs): self.request, _('The new member has been added to the team, but the invitation email could not be delivered.') ) + + else: + messages.success(self.request, _('The new member has been invited and added to the team.')) self.object.members.add(user) self.object.log_action( @@ -235,7 +238,6 @@ def post(self, request, *args, **kwargs): user=self.request.user, data={'email': user.email, 'user': user.pk}, ) - messages.success(self.request, _('The new member has been invited and added to the team.')) return redirect(self.get_success_url()) elif 'name' in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed(): From a6c6da41599fbc33454a27f60a4c8b2497829476 Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:45:13 +0530 Subject: [PATCH 05/13] fix: remove duplicate add members --- app/eventyay/control/views/organizer_views/team_view.py | 1 - 1 file changed, 1 deletion(-) diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index fa7f5ae6f7..37840117ac 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -337,7 +337,6 @@ def post(self, request, *args, **kwargs): self.object.members.add(user) messages.success(self.request, _('The new member has been invited and added to the team.')) - self.object.members.add(user) self.object.log_action( 'eventyay.team.member.added', user=self.request.user, From 0aa36bca65c09cd849c12598081c74306172cb1d Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:46:29 +0530 Subject: [PATCH 06/13] Fix logging of email send failure exception --- app/eventyay/api/serializers/organizer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/eventyay/api/serializers/organizer.py b/app/eventyay/api/serializers/organizer.py index 36009bf3d2..630aa74a90 100644 --- a/app/eventyay/api/serializers/organizer.py +++ b/app/eventyay/api/serializers/organizer.py @@ -230,9 +230,9 @@ def create(self, validated_data): ) except SendMailException as exc: logger.warning( - "Failed to send invitation email to existing user: %s. Exception: %s", + "Failed to send invitation email to existing user: %s", user.email, - exc, + exc_info=True ) self.context['team'].members.add(user) From 94fc21f992fcb9889b93d626140a36f6196ede6a Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:54:23 +0530 Subject: [PATCH 07/13] fix: moved logging at top Removed duplicate logging import and initialization. --- app/eventyay/eventyay_common/views/team.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/eventyay/eventyay_common/views/team.py b/app/eventyay/eventyay_common/views/team.py index ee16efe72a..3fbe233c1a 100644 --- a/app/eventyay/eventyay_common/views/team.py +++ b/app/eventyay/eventyay_common/views/team.py @@ -1,5 +1,8 @@ +import logging from urllib.parse import urljoin +logger = logging.getLogger(__name__) + from django.conf import settings from django.contrib import messages from django.db import transaction @@ -11,9 +14,6 @@ from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView from django_scopes import scopes_disabled -import logging -logger = logging.getLogger(__name__) - from eventyay.base.auth import get_auth_backends from eventyay.base.models.organizer import Team, TeamAPIToken, TeamInvite from eventyay.base.models.auth import User From 47ca471141531bb019822c0e81d9ff764daa3a69 Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:55:56 +0530 Subject: [PATCH 08/13] fix: moved logging at top Removed duplicate logging import and initialization. --- app/eventyay/control/views/organizer_views/team_view.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index 37840117ac..0d3389c930 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -1,3 +1,7 @@ +import logging + +logger = logging.getLogger(__name__) + from django.contrib import messages from django.db import transaction from django.db.models import Count, ManyToManyField @@ -14,9 +18,6 @@ ) from django_scopes import scopes_disabled -import logging -logger = logging.getLogger(__name__) - from eventyay.base.auth import get_auth_backends from eventyay.base.models.auth import User from eventyay.base.models.organizer import Team, TeamAPIToken, TeamInvite From e923e0c07393f122b525bc9c2482bef1ce96751d Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 20:51:44 +0530 Subject: [PATCH 09/13] fix: naming consistence --- app/eventyay/control/views/organizer_views/team_view.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index 0d3389c930..0fa1f8ab3f 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -183,7 +183,7 @@ def _send_invite(self, instance): ), 'pretixcontrol/email/invitation.txt', { - 'user': self, + 'user': instance, 'organizer': self.request.organizer.name, 'team': instance.team.name, 'url': build_global_uri('eventyay_common:auth.invite', kwargs={'token': instance.token}), @@ -339,7 +339,7 @@ def post(self, request, *args, **kwargs): messages.success(self.request, _('The new member has been invited and added to the team.')) self.object.log_action( - 'eventyay.team.member.added', + 'prefix.team.member.added', user=self.request.user, data={'email': user.email, 'user': user.pk}, ) From 0e6a13bead88b2b099f86b02340b3ee685feb174 Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 20:53:14 +0530 Subject: [PATCH 10/13] fix: user reference in email invitation logic --- app/eventyay/eventyay_common/views/team.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/eventyay/eventyay_common/views/team.py b/app/eventyay/eventyay_common/views/team.py index 3fbe233c1a..1d48db1a5a 100644 --- a/app/eventyay/eventyay_common/views/team.py +++ b/app/eventyay/eventyay_common/views/team.py @@ -76,7 +76,7 @@ def _send_invite(self, instance): ), 'pretixcontrol/email/invitation.txt', { - 'user': self, + 'user': instance, 'organizer': self.request.organizer.name, 'team': instance.team.name, 'url': build_global_uri('eventyay_common:auth.invite', kwargs={'token': instance.token}), @@ -226,9 +226,8 @@ def post(self, request, *args, **kwargs): logger.warning("Failed to send invitation email to existing user %s", user.email, exc_info=True) messages.warning( self.request, - _('The new member has been added to the team, but the invitation email could not be delivered.') + _('The new member will be added to the team, but the invitation email could not be delivered.') ) - else: messages.success(self.request, _('The new member has been invited and added to the team.')) From 91fb93d151d54022def9e092c0c9b3e36060e68f Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 20:54:34 +0530 Subject: [PATCH 11/13] fix: user reference in invitation email context --- app/eventyay/api/serializers/organizer.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/eventyay/api/serializers/organizer.py b/app/eventyay/api/serializers/organizer.py index 630aa74a90..4bf37615b3 100644 --- a/app/eventyay/api/serializers/organizer.py +++ b/app/eventyay/api/serializers/organizer.py @@ -179,7 +179,7 @@ def _send_invite(self, instance): ), 'pretixcontrol/email/invitation.txt', { - 'user': self, + 'user': instance, 'organizer': self.context['organizer'].name, 'team': instance.team.name, 'url': build_absolute_uri('control:auth.invite', kwargs={'token': instance.token}), @@ -234,7 +234,6 @@ def create(self, validated_data): user.email, exc_info=True ) - self.context['team'].members.add(user) self.context['team'].log_action( 'eventyay.team.member.added', From f81c32154676371325d4f55395f96359e879f7c2 Mon Sep 17 00:00:00 2001 From: Hemant M Mehta <92446645+hemantmm@users.noreply.github.com> Date: Thu, 6 Nov 2025 20:58:30 +0530 Subject: [PATCH 12/13] fix: revert back change --- app/eventyay/control/views/organizer_views/team_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index 0fa1f8ab3f..b3d9b4a9c5 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -339,7 +339,7 @@ def post(self, request, *args, **kwargs): messages.success(self.request, _('The new member has been invited and added to the team.')) self.object.log_action( - 'prefix.team.member.added', + 'eventyay.team.member.added', user=self.request.user, data={'email': user.email, 'user': user.pk}, ) From 1ba6fd4b30e7282f9140e1433ec0ba6f46c04e4e Mon Sep 17 00:00:00 2001 From: Hemant M Mehta Date: Thu, 6 Nov 2025 22:16:58 +0530 Subject: [PATCH 13/13] fix: duplication block Signed-off-by: Hemant M Mehta --- app/eventyay/api/serializers/organizer.py | 2 +- app/eventyay/control/views/organizer_views/team_view.py | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/eventyay/api/serializers/organizer.py b/app/eventyay/api/serializers/organizer.py index 4bf37615b3..9c62438aa7 100644 --- a/app/eventyay/api/serializers/organizer.py +++ b/app/eventyay/api/serializers/organizer.py @@ -228,7 +228,7 @@ def create(self, validated_data): event=None, locale=get_language_without_region(), ) - except SendMailException as exc: + except SendMailException: logger.warning( "Failed to send invitation email to existing user: %s", user.email, diff --git a/app/eventyay/control/views/organizer_views/team_view.py b/app/eventyay/control/views/organizer_views/team_view.py index b3d9b4a9c5..bdb9387e09 100644 --- a/app/eventyay/control/views/organizer_views/team_view.py +++ b/app/eventyay/control/views/organizer_views/team_view.py @@ -330,14 +330,13 @@ def post(self, request, *args, **kwargs): locale=self.request.LANGUAGE_CODE, ) except SendMailException: - self.object.members.add(user) logger.warning("Failed to send invitation to existing member %s", user.email, exc_info=True) messages.warning(self.request, _('The new member was added to the team, but the invitation email could not be sent.')) else: - self.object.members.add(user) messages.success(self.request, _('The new member has been invited and added to the team.')) - + + self.object.members.add(user) self.object.log_action( 'eventyay.team.member.added', user=self.request.user,