diff --git a/konova/models/object.py b/konova/models/object.py index 65b0c1a1..175cf3a8 100644 --- a/konova/models/object.py +++ b/konova/models/object.py @@ -11,7 +11,8 @@ from abc import abstractmethod from django.contrib import messages -from konova.tasks import celery_send_mail_shared_access_removed, celery_send_mail_shared_access_given +from konova.tasks import celery_send_mail_shared_access_removed, celery_send_mail_shared_access_given, \ + celery_send_mail_shared_data_recorded, celery_send_mail_shared_data_unrecorded from user.models import User from django.core.exceptions import ObjectDoesNotExist from django.http import HttpRequest @@ -218,6 +219,11 @@ class RecordableObjectMixin(models.Model): self.recorded = None self.save() self.log.add(action) + + shared_users = self.users.all().values_list("id", flat=True) + for user_id in shared_users: + celery_send_mail_shared_data_unrecorded(self.identifier, user_id) + return action def set_recorded(self, user: User): @@ -235,6 +241,11 @@ class RecordableObjectMixin(models.Model): self.recorded = action self.save() self.log.add(action) + + shared_users = self.users.all().values_list("id", flat=True) + for user_id in shared_users: + celery_send_mail_shared_data_recorded(self.identifier, user_id) + return action def mark_as_edited(self, performing_user: User, request: HttpRequest = None, edit_comment: str = None): diff --git a/konova/tasks.py b/konova/tasks.py index 54956835..ee7aabd7 100644 --- a/konova/tasks.py +++ b/konova/tasks.py @@ -29,4 +29,18 @@ def celery_send_mail_shared_access_removed(obj_identifier, user_id): def celery_send_mail_shared_access_given(obj_identifier, user_id): from user.models import User user = User.objects.get(id=user_id) - user.send_mail_shared_access_given(obj_identifier) \ No newline at end of file + user.send_mail_shared_access_given(obj_identifier) + + +@shared_task +def celery_send_mail_shared_data_recorded(obj_identifier, user_id): + from user.models import User + user = User.objects.get(id=user_id) + user.send_mail_shared_data_recorded(obj_identifier) + + +@shared_task +def celery_send_mail_shared_data_unrecorded(obj_identifier, user_id): + from user.models import User + user = User.objects.get(id=user_id) + user.send_mail_shared_data_unrecorded(obj_identifier) diff --git a/konova/utils/mailer.py b/konova/utils/mailer.py index 87ffe29d..107ac8ce 100644 --- a/konova/utils/mailer.py +++ b/konova/utils/mailer.py @@ -93,3 +93,47 @@ class Mailer: msg ) + def send_mail_shared_data_recorded(self, obj_identifier, user): + """ Send a mail if user just got access to the object + + Args: + obj_identifier (str): The object identifier + + Returns: + + """ + context = { + "user": user, + "obj_identifier": obj_identifier, + "EMAIL_REPLY_TO": EMAIL_REPLY_TO, + } + msg = render_to_string("email/sharing/shared_data_recorded.html", context) + user_mail_address = [user.email] + self.send( + user_mail_address, + _("{} - Shared data recorded").format(obj_identifier), + msg + ) + + def send_mail_shared_data_unrecorded(self, obj_identifier, user): + """ Send a mail if user just got access to the object + + Args: + obj_identifier (str): The object identifier + + Returns: + + """ + context = { + "user": user, + "obj_identifier": obj_identifier, + "EMAIL_REPLY_TO": EMAIL_REPLY_TO, + } + msg = render_to_string("email/sharing/shared_data_unrecorded.html", context) + user_mail_address = [user.email] + self.send( + user_mail_address, + _("{} - Shared data unrecorded").format(obj_identifier), + msg + ) + diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index d9103b58..77a57271 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index f1f99f9f..012d25d7 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-12 14:31+0100\n" +"POT-Creation-Date: 2022-01-12 15:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1761,6 +1761,14 @@ msgstr "{} - Zugriff entzogen" msgid "{} - Shared access given" msgstr "{} - Zugriff freigegeben" +#: konova/utils/mailer.py:114 +msgid "{} - Shared data recorded" +msgstr "{} - Freigegebene Daten verzeichnet" + +#: konova/utils/mailer.py:136 +msgid "{} - Shared data unrecorded" +msgstr "{} - Freigegebene Daten entzeichnet" + #: konova/utils/message_templates.py:11 msgid "There was an error on this form." msgstr "Es gab einen Fehler im Formular." @@ -1881,6 +1889,8 @@ msgstr "Zugriff freigegeben" #: templates/email/sharing/shared_access_given.html:8 #: templates/email/sharing/shared_access_removed.html:8 +#: templates/email/sharing/shared_data_recorded.html:8 +#: templates/email/sharing/shared_data_unrecorded.html:8 msgid "Hello " msgstr "Hallo " @@ -1897,20 +1907,24 @@ msgid "" "The shared dataset appears now by default on your overview for this dataset " "type." msgstr "" -"Der freigegebene Datensatz ist nun standardmäßig in Ihrer Übersicht für den Datensatztyp im KSP gelistet." +"Der freigegebene Datensatz ist nun standardmäßig in Ihrer Übersicht für den " +"Datensatztyp im KSP gelistet." -#: templates/email/sharing/shared_access_given.html:16 +#: templates/email/sharing/shared_access_given.html:18 +#: templates/email/sharing/shared_access_removed.html:18 +#: templates/email/sharing/shared_data_recorded.html:17 +#: templates/email/sharing/shared_data_unrecorded.html:17 +msgid "Best regards" +msgstr "Beste Grüße" + +#: templates/email/sharing/shared_access_given.html:25 msgid "" "Please note: Shared access on an intervention means you automatically have " "editing access to related compensations." msgstr "" -"Bitte beachten Sie: Freigegebener Zugriff auf einen Eingriff bedeutet, dass Sie automatisch auch " -"Zugriff auf die zugehörigen Kompensationen erhalten haben." - -#: templates/email/sharing/shared_access_given.html:19 -#: templates/email/sharing/shared_access_removed.html:18 -msgid "Best regards" -msgstr "Beste Grüße" +"Bitte beachten Sie: Freigegebener Zugriff auf einen Eingriff bedeutet, dass " +"Sie automatisch auch Zugriff auf die zugehörigen Kompensationen erhalten " +"haben." #: templates/email/sharing/shared_access_removed.html:4 msgid "Shared access removed" @@ -1935,6 +1949,48 @@ msgstr "" "Nutzen Sie hierzu einfach die entsprechenden Suchfilter auf den " "Übersichtsseiten" +#: templates/email/sharing/shared_data_recorded.html:4 +msgid "Shared data recorded" +msgstr "Freigegebene Daten verzeichnet" + +#: templates/email/sharing/shared_data_recorded.html:10 +msgid "the following dataset has just been recorded" +msgstr "der folgende Datensatz wurde soeben verzeichnet " + +#: templates/email/sharing/shared_data_recorded.html:14 +msgid "This means the data is now publicly available, e.g. in LANIS" +msgstr "" +"Das bedeutet, dass die Daten nun öffentlich verfügbar sind, z.B. im LANIS." + +#: templates/email/sharing/shared_data_recorded.html:24 +msgid "" +"Please note: Recorded intervention means the compensations are recorded as " +"well." +msgstr "" +"Bitte beachten Sie: Verzeichnete Eingriffe bedeuten, dass auch die " +"zugehörigen Kompensationen automatisch verzeichnet sind." + +#: templates/email/sharing/shared_data_unrecorded.html:4 +msgid "Shared data unrecorded" +msgstr "Freigegebene Daten entzeichnet" + +#: templates/email/sharing/shared_data_unrecorded.html:10 +msgid "the following dataset has just been unrecorded" +msgstr "der folgende Datensatz wurde soeben entzeichnet " + +#: templates/email/sharing/shared_data_unrecorded.html:14 +msgid "This means the data is no longer publicly available." +msgstr "" +"Das bedeutet, dass die Daten nicht länger öffentlich verfügbar sind." + +#: templates/email/sharing/shared_data_unrecorded.html:24 +msgid "" +"Please note: Unrecorded intervention means the compensations are unrecorded " +"as well." +msgstr "" +"Bitte beachten Sie: Entzeichnete Eingriffe bedeuten, dass auch die " +"zugehörigen Kompensationen automatisch entzeichnet worden sind." + #: templates/email/signature.html:6 msgid "Please do not reply on this mail." msgstr "Bitte antworten Sie nicht auf diese Mail." diff --git a/templates/email/sharing/shared_data_recorded.html b/templates/email/sharing/shared_data_recorded.html new file mode 100644 index 00000000..82d236d8 --- /dev/null +++ b/templates/email/sharing/shared_data_recorded.html @@ -0,0 +1,31 @@ +{% load i18n %} + +
+

{% trans 'Shared data recorded' %}

+

{{obj_identifier}}

+
+
+ {% trans 'Hello ' %} {{user.username}}, +
+ {% trans 'the following dataset has just been recorded' %} +
+ '{{obj_identifier}}' +
+ {% trans 'This means the data is now publicly available, e.g. in LANIS' %} +
+
+ {% trans 'Best regards' %} +
+ KSP +
+
+
+ + {% trans 'Please note: Recorded intervention means the compensations are recorded as well.' %} + +
+
+ {% include 'email/signature.html' %} +
+
+ diff --git a/templates/email/sharing/shared_data_unrecorded.html b/templates/email/sharing/shared_data_unrecorded.html new file mode 100644 index 00000000..a40e7ce8 --- /dev/null +++ b/templates/email/sharing/shared_data_unrecorded.html @@ -0,0 +1,31 @@ +{% load i18n %} + +
+

{% trans 'Shared data unrecorded' %}

+

{{obj_identifier}}

+
+
+ {% trans 'Hello ' %} {{user.username}}, +
+ {% trans 'the following dataset has just been unrecorded' %} +
+ '{{obj_identifier}}' +
+ {% trans 'This means the data is no longer publicly available.' %} +
+
+ {% trans 'Best regards' %} +
+ KSP +
+
+
+ + {% trans 'Please note: Unrecorded intervention means the compensations are unrecorded as well.' %} + +
+
+ {% include 'email/signature.html' %} +
+
+ diff --git a/user/models/user.py b/user/models/user.py index e8e6ae79..51c8bcf8 100644 --- a/user/models/user.py +++ b/user/models/user.py @@ -25,7 +25,7 @@ class User(AbstractUser): """ Sends a mail to the user in case of removed shared access Args: - obj (): + obj_identifier (): Returns: @@ -36,10 +36,10 @@ class User(AbstractUser): mailer.send_mail_shared_access_removed(obj_identifier, self) def send_mail_shared_access_given(self, obj_identifier): - """ Sends a mail to the user in case of removed shared access + """ Sends a mail to the user in case of given shared access Args: - obj (): + obj_identifier (): Returns: @@ -48,3 +48,31 @@ class User(AbstractUser): if notification_set: mailer = Mailer() mailer.send_mail_shared_access_given(obj_identifier, self) + + def send_mail_shared_data_recorded(self, obj_identifier): + """ Sends a mail to the user in case of shared data has been recorded + + Args: + obj_identifier (): + + Returns: + + """ + notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED) + if notification_set: + mailer = Mailer() + mailer.send_mail_shared_data_recorded(obj_identifier, self) + + def send_mail_shared_data_unrecorded(self, obj_identifier): + """ Sends a mail to the user in case of shared data has been unrecorded + + Args: + obj_identifier (): + + Returns: + + """ + notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED) + if notification_set: + mailer = Mailer() + mailer.send_mail_shared_data_unrecorded(obj_identifier, self)