From d5086f79c09e244960304fc82fab003d29ddef65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 24 Dec 2019 18:20:39 +0100 Subject: [PATCH] send mail to report reviewers --- src/c3nav/locale/de/LC_MESSAGES/django.po | 4 +-- src/c3nav/mapdata/models/report.py | 29 +++++++++++++++++++ src/c3nav/site/tasks.py | 25 ++++++++++++++++ .../site/templates/site/report_detail.html | 2 +- 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/c3nav/site/tasks.py diff --git a/src/c3nav/locale/de/LC_MESSAGES/django.po b/src/c3nav/locale/de/LC_MESSAGES/django.po index a18681a1..192e7894 100644 --- a/src/c3nav/locale/de/LC_MESSAGES/django.po +++ b/src/c3nav/locale/de/LC_MESSAGES/django.po @@ -2359,7 +2359,7 @@ msgstr "Neuer Ortstitel" #: c3nav/mapdata/models/report.py:75 msgid "you have to supply a title in at least one language" -msgstr "Du must das Feld {field} in mindestens einer Sprache ausfüllen." +msgstr "Du musst einen Titel in mindestens einer Sprache angeben" #: c3nav/mapdata/models/report.py:76 msgid "location groups" @@ -2768,7 +2768,7 @@ msgstr "Du meldest einen Fehler beim folgenden Ort:" #: c3nav/site/templates/site/fragment_report_meta.html:6 msgid "You are reporting an missing location at the following position:" -msgstr "Du meldest einen fehlenden Ort an der folgenden Stelle." +msgstr "Du meldest einen fehlenden Ort an der folgenden Stelle:" #: c3nav/site/templates/site/fragment_report_meta.html:9 msgid "You are reporting an issue with the following route:" diff --git a/src/c3nav/mapdata/models/report.py b/src/c3nav/mapdata/models/report.py index fb6beccc..2bc7daf3 100644 --- a/src/c3nav/mapdata/models/report.py +++ b/src/c3nav/mapdata/models/report.py @@ -1,6 +1,7 @@ import string from django.conf import settings +from django.contrib.auth import get_user_model from django.core.exceptions import ObjectDoesNotExist from django.db import models from django.db.models import Q @@ -11,6 +12,7 @@ from c3nav.mapdata.fields import I18nField from c3nav.mapdata.models.locations import SpecificLocation from c3nav.mapdata.utils.locations import get_location_by_id_for_request from c3nav.mapdata.utils.models import get_submodels +from c3nav.site.tasks import send_report_notification def get_report_secret(): @@ -114,6 +116,33 @@ class Report(models.Model): else: return cls.objects.none() + def get_affected_group_ids(self): + if self.category == 'missing-location': + return tuple(self.created_groups.values_list('pk', flat=True)) + elif self.category == 'location-issue': + return tuple(self.location.get_child().groups.values_list('pk', flat=True)) + return () + + def get_reviewers_qs(self): + return get_user_model().objects.filter( + Q(permissions__review_all_reports=True) | + Q(permissions__review_group_reports__in=self.get_affected_group_ids()) + ) + + def notify_reviewers(self): + reviewers = tuple(self.get_reviewers_qs().values_list('pk', flat=True)) + send_report_notification.delay(pk=self.pk, + title=self.title, + author=self.author.username, + description=self.description, + reviewers=reviewers) + + def save(self, *args, **kwargs): + created = self.pk is None + super().save(*args, **kwargs) + if created: + self.notify_reviewers() + class ReportUpdate(models.Model): report = models.ForeignKey(Report, on_delete=models.CASCADE) diff --git a/src/c3nav/site/tasks.py b/src/c3nav/site/tasks.py new file mode 100644 index 00000000..1b2da5a8 --- /dev/null +++ b/src/c3nav/site/tasks.py @@ -0,0 +1,25 @@ +import logging + +from django.conf import settings +from django.contrib.auth.models import User +from django.core.mail import send_mail + +from c3nav.celery import app + +logger = logging.getLogger('c3nav') + + +@app.task(bind=True, max_retries=3) +def send_report_notification(self, pk, author, title, description, reviewers): + subject = '[c3nav] New Report by %s: %s' % (author, title) + + for user in User.objects.filter(pk=reviewers): + if not user.email: + continue + text = ( + ('Hi %s!\n\n' % user.username) + + ('A new Report has ben submitted by %s:\n\n' % author) + + ('---\n\n') + + (title+'\n\n'+description) + ) + send_mail(subject, text, settings.MAIL_FROM, [user.email]) diff --git a/src/c3nav/site/templates/site/report_detail.html b/src/c3nav/site/templates/site/report_detail.html index ade319f0..b6a67297 100644 --- a/src/c3nav/site/templates/site/report_detail.html +++ b/src/c3nav/site/templates/site/report_detail.html @@ -3,6 +3,7 @@ {% block content %}
+ {% include 'site/fragment_messages.html' %}

{% trans 'Report' %}: {{ report.title }}

{% if report.open %} @@ -19,7 +20,6 @@ – {{ report.created }}

- {% include 'site/fragment_messages.html' %} {% include 'site/fragment_report_meta.html' %} {% for field in form %}