From fb6e05aef49c3475653bb5079b7a9f69b939c6bd Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Tue, 17 Sep 2024 13:59:50 +0200 Subject: [PATCH 1/5] dav_events: removed unused variable in models.Event.save() --- dav_events/models/event.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dav_events/models/event.py b/dav_events/models/event.py index 122604e..d5a8f6b 100644 --- a/dav_events/models/event.py +++ b/dav_events/models/event.py @@ -259,7 +259,6 @@ class Event(models.Model): def save(self, implicit_update=False, **kwargs): creating = False - original_text = '' if not self.id: user_model = get_user_model() -- 2.52.0 From 7072df367dd630a3776c6631fc4990b09740fdbc Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Tue, 17 Sep 2024 14:00:37 +0200 Subject: [PATCH 2/5] dav_events: Added EventChange to admin interface --- dav_events/admin.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dav_events/admin.py b/dav_events/admin.py index 8b3896d..7f25261 100644 --- a/dav_events/admin.py +++ b/dav_events/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from .models import EventStatus, EventFlag, Event, OneClickAction, Participant, TrashedParticipant +from .models import EventStatus, EventFlag, EventChange, Event, OneClickAction, Participant, TrashedParticipant @admin.register(EventStatus) @@ -8,6 +8,11 @@ class EventStatusAdmin(admin.ModelAdmin): pass +class EventChangeInline(admin.TabularInline): + model = EventChange + extra = 1 + + class EventFlagInline(admin.TabularInline): model = EventFlag extra = 1 @@ -19,7 +24,7 @@ class EventParticipantInline(admin.TabularInline): @admin.register(Event) class EventAdmin(admin.ModelAdmin): - inlines = [EventFlagInline, EventParticipantInline] + inlines = [EventChangeInline, EventFlagInline, EventParticipantInline] ordering = ['sport', 'number'] -- 2.52.0 From 05fba57db85f0aadee7edd04335a33072466c147 Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Tue, 17 Sep 2024 14:15:16 +0200 Subject: [PATCH 3/5] dav_events: clearified log messages --- dav_events/workflow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dav_events/workflow.py b/dav_events/workflow.py index 36ddb06..b5a8405 100644 --- a/dav_events/workflow.py +++ b/dav_events/workflow.py @@ -55,7 +55,7 @@ class BasicWorkflow(object): flag.save() change = EventChange(event=event, user=flag.user, operation=EventChange.RAISE_FLAG, content=status.code) change.save() - logger.info('Flagging status \'%s\' for %s', status.code, event) + logger.info('Flagged status \'%s\' for %s (ID: %d)', status.code, event, event.id) return flag # TODO: the name/intention of this method is unclear. Could we make it obsolete? @@ -75,7 +75,7 @@ class BasicWorkflow(object): if event.flags.filter(status__code='accepted').exists(): if not event.number: self.set_number() - logger.info('Setting number on Event %s', event) + logger.info('Assigned number to Event %s (ID: %d)', event, event.id) if code in (None, 'publishing_facebook', -- 2.52.0 From 7b6e29ba9236c51996d1351aec41a2d4a15963fd Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Tue, 17 Sep 2024 14:15:51 +0200 Subject: [PATCH 4/5] dav_events renamed signal handlers --- dav_events/apps.py | 4 ++-- dav_events/signals.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dav_events/apps.py b/dav_events/apps.py index 663cfb7..22ec78a 100644 --- a/dav_events/apps.py +++ b/dav_events/apps.py @@ -31,5 +31,5 @@ class AppConfig(_AppConfig): def ready(self): from . import signals - signals.event_updated.connect(signals.send_emails_on_event_update) - signals.event_status_updated.connect(signals.send_emails_on_event_status_update) + signals.event_updated.connect(signals.signal_handler_for_event_update) + signals.event_status_updated.connect(signals.signal_handler_for_event_status_update) diff --git a/dav_events/signals.py b/dav_events/signals.py index 842ac7b..6e977ef 100644 --- a/dav_events/signals.py +++ b/dav_events/signals.py @@ -5,14 +5,14 @@ event_updated = Signal(providing_args=['event', 'diff', 'user']) event_status_updated = Signal(providing_args=['event', 'flag']) -def send_emails_on_event_update(sender, **kwargs): +def signal_handler_for_event_update(sender, **kwargs): event = kwargs.get('event') diff = kwargs.get('diff') updater = kwargs.get('user') event.workflow.send_emails_on_update(diff, updater) -def send_emails_on_event_status_update(sender, **kwargs): +def signal_handler_for_event_status_update(sender, **kwargs): event = kwargs.get('event') flag = kwargs.get('flag') event.workflow.send_emails_on_status_update(flag) -- 2.52.0 From 39440a695e7e482d4314b408a53724e09b049fa0 Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Tue, 17 Sep 2024 15:07:31 +0200 Subject: [PATCH 5/5] Fix #65 : dav_events.views.events.EventRegistrationsView._close_registration() sends a signal now. --- dav_events/apps.py | 2 ++ .../django_project_config/settings-dav_events.py | 1 + dav_events/signals.py | 7 +++++++ dav_events/tests/test_apps.py | 1 + dav_events/views/events.py | 11 ++--------- dav_events/workflow.py | 14 ++++++++++++++ 6 files changed, 27 insertions(+), 9 deletions(-) diff --git a/dav_events/apps.py b/dav_events/apps.py index 22ec78a..1157ed5 100644 --- a/dav_events/apps.py +++ b/dav_events/apps.py @@ -5,6 +5,7 @@ from dav_base.config.apps import AppConfig as _AppConfig, DefaultSetting DEFAULT_SETTINGS = ( DefaultSetting('enable_email_on_status_update', False), DefaultSetting('enable_email_on_update', False), + DefaultSetting('enable_email_on_registration_closed', False), DefaultSetting('groups_manager_super', []), DefaultSetting('groups_manager_w', []), DefaultSetting('groups_manager_s', []), @@ -33,3 +34,4 @@ class AppConfig(_AppConfig): from . import signals signals.event_updated.connect(signals.signal_handler_for_event_update) signals.event_status_updated.connect(signals.signal_handler_for_event_status_update) + signals.event_registration_closed.connect(signals.signal_handler_for_event_registration_closed) diff --git a/dav_events/django_project_config/settings-dav_events.py b/dav_events/django_project_config/settings-dav_events.py index fc8ca9c..f8620cf 100644 --- a/dav_events/django_project_config/settings-dav_events.py +++ b/dav_events/django_project_config/settings-dav_events.py @@ -5,6 +5,7 @@ from dav_events.config import FieldInitial # E-Mails ENABLE_EMAIL_ON_STATUS_UPDATE = False ENABLE_EMAIL_ON_UPDATE = False +ENABLE_EMAIL_ON_REGISTRATION_CLOSED = False # Authorization Roles / Groups GROUPS_MANAGER_SUPER = ['Tourenreferenten'] diff --git a/dav_events/signals.py b/dav_events/signals.py index 6e977ef..918c472 100644 --- a/dav_events/signals.py +++ b/dav_events/signals.py @@ -3,6 +3,7 @@ from django.dispatch import Signal event_created = Signal(providing_args=['event']) event_updated = Signal(providing_args=['event', 'diff', 'user']) event_status_updated = Signal(providing_args=['event', 'flag']) +event_registration_closed = Signal(providing_args=['event', 'user']) def signal_handler_for_event_update(sender, **kwargs): @@ -16,3 +17,9 @@ def signal_handler_for_event_status_update(sender, **kwargs): event = kwargs.get('event') flag = kwargs.get('flag') event.workflow.send_emails_on_status_update(flag) + + +def signal_handler_for_event_registration_closed(sender, **kwargs): + event = kwargs.get('event') + updater = kwargs.get('user') + event.workflow.send_emails_on_registration_closed(updater) diff --git a/dav_events/tests/test_apps.py b/dav_events/tests/test_apps.py index 80180f5..a61d99a 100644 --- a/dav_events/tests/test_apps.py +++ b/dav_events/tests/test_apps.py @@ -9,6 +9,7 @@ class TestCase(AppsTestCase): settings = ( AppSetting('enable_email_on_status_update', bool), AppSetting('enable_email_on_update', bool), + AppSetting('enable_email_on_registration_closed', bool), AppSetting('groups_manager_super', list), AppSetting('groups_manager_w', list), AppSetting('groups_manager_s', list), diff --git a/dav_events/views/events.py b/dav_events/views/events.py index 823cdd3..463e5b2 100644 --- a/dav_events/views/events.py +++ b/dav_events/views/events.py @@ -21,6 +21,7 @@ from .. import choices from .. import emails from .. import forms from .. import models +from .. import signals from ..roles import get_users_by_role, has_role from ..workflow import DefaultWorkflow @@ -261,19 +262,11 @@ class EventRegistrationsView(EventPermissionMixin, generic.DetailView): return context - def _notify_publisher(self, event, editor): - recipients = get_users_by_role('publisher_web') - recipients += get_users_by_role('publisher_facebook') - for recipient in recipients: - if recipient.email: - email = emails.EventRegistrationClosedMail(recipient=recipient, event=event, editor=editor) - email.send() - def _close_registration(self, request, event): logger.info('Close registration: %s', event) event.registration_closed = True event.save(implicit_update=True) - self._notify_publisher(event, request.user) + signals.event_registration_closed.send(sender=self.__class__, event=event, user=request.user) messages.success(request, _(u'Die Anmeldung wurde geschlossen')) def _reopen_registration(self, request, event): diff --git a/dav_events/workflow.py b/dav_events/workflow.py index b5a8405..81e7cf8 100644 --- a/dav_events/workflow.py +++ b/dav_events/workflow.py @@ -436,6 +436,20 @@ class BasicWorkflow(object): email = emails.EventCanceledMail(recipient=recipient, event=event, editor=updater) email.send() + def send_emails_on_registration_closed(self, updater): + event = self._event + + app_config = apps.get_containing_app_config(__package__) + if not app_config.settings.enable_email_on_registration_closed: + return + + recipients = get_users_by_role('publisher_web') + recipients += get_users_by_role('publisher_facebook') + for recipient in recipients: + if recipient.email: + email = emails.EventRegistrationClosedMail(recipient=recipient, event=event, editor=updater) + email.send() + # # Permissions # -- 2.52.0