From bf41559c56a3cc222ee14a41dde4ac295e69a283 Mon Sep 17 00:00:00 2001
From: mpeltriaux <Michel.Peltriaux@sgdnord.rlp.de>
Date: Thu, 23 Feb 2023 10:17:45 +0100
Subject: [PATCH] #300 Extend mail templates

* extends all relevant mail templates such that municipals of an entry will be shown in the mail
---
 konova/models/geometry.py                     |  16 +++
 konova/models/object.py                       |  37 +++--
 konova/models/resubmission.py                 |   4 +-
 konova/tasks.py                               |  48 +++----
 konova/utils/mailer.py                        |  66 +++++++--
 konova/views/geometry.py                      |   4 +-
 locale/de/LC_MESSAGES/django.mo               | Bin 46363 -> 46552 bytes
 locale/de/LC_MESSAGES/django.po               | 135 ++++++++++--------
 .../email/checking/shared_data_checked.html   |  10 ++
 .../checking/shared_data_checked_team.html    |  10 ++
 .../email/deleting/shared_data_deleted.html   |  10 ++
 .../deleting/shared_data_deleted_team.html    |  10 ++
 .../email/recording/shared_data_recorded.html |  10 ++
 .../recording/shared_data_recorded_team.html  |  10 ++
 .../recording/shared_data_unrecorded.html     |  10 ++
 .../shared_data_unrecorded_team.html          |  11 ++
 .../email/resubmission/resubmission.html      |  10 ++
 .../email/sharing/shared_access_given.html    |  10 ++
 .../sharing/shared_access_given_team.html     |  11 ++
 .../email/sharing/shared_access_removed.html  |  10 ++
 .../sharing/shared_access_removed_team.html   |  10 ++
 user/models/team.py                           |  54 +++----
 user/models/user.py                           |  45 +++---
 23 files changed, 383 insertions(+), 158 deletions(-)

diff --git a/konova/models/geometry.py b/konova/models/geometry.py
index 79a27e02..f5fa839b 100644
--- a/konova/models/geometry.py
+++ b/konova/models/geometry.py
@@ -276,6 +276,22 @@ class Geometry(BaseResource):
 
         return parcels
 
+    def get_underlying_municipals(self, parcels=None):
+        """ Getter for related municipals
+
+        If no QuerySet of parcels is provided, the parcels will be fetched
+
+        Returns:
+            municipals (QuerySet): The related municipals as queryset
+        """
+        from konova.models import Municipal
+
+        if parcels is None:
+            parcels = self.get_underlying_parcels()
+        municipals = parcels.order_by("municipal").distinct("municipal").values("municipal__id")
+        municipals = Municipal.objects.filter(id__in=municipals).order_by("name")
+        return municipals
+
     def count_underlying_parcels(self):
         """ Getter for number of underlying parcels
 
diff --git a/konova/models/object.py b/konova/models/object.py
index a1c8c9c2..ea62616f 100644
--- a/konova/models/object.py
+++ b/konova/models/object.py
@@ -120,13 +120,14 @@ class DeletableObjectMixin(models.Model):
             if send_mail:
                 # Send mail
                 shared_users = self.shared_users.values_list("id", flat=True)
+                municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
                 for user_id in shared_users:
-                    celery_send_mail_shared_data_deleted.delay(self.identifier, self.title, user_id)
+                    celery_send_mail_shared_data_deleted.delay(self.identifier, self.title, user_id, municipals_names)
 
                 # Send mail
                 shared_teams = self.shared_teams.values_list("id", flat=True)
                 for team_id in shared_teams:
-                    celery_send_mail_shared_data_deleted_team.delay(self.identifier, self.title, team_id)
+                    celery_send_mail_shared_data_deleted_team.delay(self.identifier, self.title, team_id, municipals_names)
 
             self.save()
 
@@ -277,12 +278,13 @@ class RecordableObjectMixin(models.Model):
 
         shared_users = self.shared_users.values_list("id", flat=True)
         shared_teams = self.shared_teams.values_list("id", flat=True)
+        municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
 
         for user_id in shared_users:
-            celery_send_mail_shared_data_unrecorded.delay(self.identifier, self.title, user_id)
+            celery_send_mail_shared_data_unrecorded.delay(self.identifier, self.title, user_id, municipals_names)
 
         for team_id in shared_teams:
-            celery_send_mail_shared_data_unrecorded_team.delay(self.identifier, self.title, team_id)
+            celery_send_mail_shared_data_unrecorded_team.delay(self.identifier, self.title, team_id, municipals_names)
 
         return action
 
@@ -307,12 +309,13 @@ class RecordableObjectMixin(models.Model):
 
         shared_users = self.shared_users.values_list("id", flat=True)
         shared_teams = self.shared_teams.values_list("id", flat=True)
+        municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
 
         for user_id in shared_users:
-            celery_send_mail_shared_data_recorded.delay(self.identifier, self.title, user_id)
+            celery_send_mail_shared_data_recorded.delay(self.identifier, self.title, user_id, municipals_names)
 
         for team_id in shared_teams:
-            celery_send_mail_shared_data_recorded_team.delay(self.identifier, self.title, team_id)
+            celery_send_mail_shared_data_recorded_team.delay(self.identifier, self.title, team_id, municipals_names)
 
         return action
 
@@ -404,15 +407,17 @@ class CheckableObjectMixin(models.Model):
         self.checked = action
         self.save()
 
+        municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
+
         # Send mail
         shared_users = self.shared_users.values_list("id", flat=True)
         for user_id in shared_users:
-            celery_send_mail_shared_data_checked.delay(self.identifier, self.title, user_id)
+            celery_send_mail_shared_data_checked.delay(self.identifier, self.title, user_id, municipals_names)
 
         # Send mail
         shared_teams = self.shared_teams.values_list("id", flat=True)
         for team_id in shared_teams:
-            celery_send_mail_shared_data_checked_team.delay(self.identifier, self.title, team_id)
+            celery_send_mail_shared_data_checked_team.delay(self.identifier, self.title, team_id, municipals_names)
 
         self.log.add(action)
         return action
@@ -574,10 +579,11 @@ class ShareableObjectMixin(models.Model):
             id__in=shared_teams
         ).values_list("id", flat=True)
 
+        municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
         for team_id in new_teams:
-            celery_send_mail_shared_access_given_team.delay(self.identifier, self.title,  team_id)
+            celery_send_mail_shared_access_given_team.delay(self.identifier, self.title,  team_id, municipals_names)
         for team_id in removed_teams:
-            celery_send_mail_shared_access_removed_team.delay(self.identifier, self.title, team_id)
+            celery_send_mail_shared_access_removed_team.delay(self.identifier, self.title, team_id, municipals_names)
 
         self.share_with_team_list(accessing_teams)
 
@@ -602,11 +608,12 @@ class ShareableObjectMixin(models.Model):
             id__in=shared_users
         ).values_list("id", flat=True)
 
+        municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
         # Send mails
         for user_id in removed_users:
-            celery_send_mail_shared_access_removed.delay(self.identifier, self.title, user_id)
+            celery_send_mail_shared_access_removed.delay(self.identifier, self.title, user_id, municipals_names)
         for user_id in new_users:
-            celery_send_mail_shared_access_given.delay(self.identifier, self.title,  user_id)
+            celery_send_mail_shared_access_given.delay(self.identifier, self.title,  user_id, municipals_names)
 
         # Set new shared users
         self.share_with_user_list(accessing_users)
@@ -669,8 +676,9 @@ class ShareableObjectMixin(models.Model):
                 default_users.append(user)
         self.share_with_user_list(cleaned_users)
 
+        municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
         for user in default_users:
-            celery_send_mail_shared_access_removed.delay(self.identifier, self.title, user.id)
+            celery_send_mail_shared_access_removed.delay(self.identifier, self.title, user.id, municipals_names)
 
 
 class GeoReferencedMixin(models.Model):
@@ -767,5 +775,6 @@ class ResubmitableObjectMixin(models.Model):
 
         """
         resubmissions = self.resubmissions.all()
+        municipal_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
         for resubmission in resubmissions:
-            resubmission.send_resubmission_mail(self.identifier)
+            resubmission.send_resubmission_mail(self.identifier, municipal_names)
diff --git a/konova/models/resubmission.py b/konova/models/resubmission.py
index be5fe842..e5fc7144 100644
--- a/konova/models/resubmission.py
+++ b/konova/models/resubmission.py
@@ -31,7 +31,7 @@ class Resubmission(BaseResource):
         help_text="Optional comment for the user itself"
     )
 
-    def send_resubmission_mail(self, obj_identifier):
+    def send_resubmission_mail(self, obj_identifier, municipal_names):
         """ Sends a resubmission mail
 
         """
@@ -41,6 +41,6 @@ class Resubmission(BaseResource):
             return
 
         mailer = Mailer()
-        mailer.send_mail_resubmission(obj_identifier, self)
+        mailer.send_mail_resubmission(obj_identifier, self, municipal_names)
         self.resubmission_sent = True
         self.save()
diff --git a/konova/tasks.py b/konova/tasks.py
index 99618faf..ab9e6af3 100644
--- a/konova/tasks.py
+++ b/konova/tasks.py
@@ -25,87 +25,87 @@ def celery_update_parcels(geometry_id: str, recheck: bool = True):
 
 
 @shared_task
-def celery_send_mail_shared_access_removed(obj_identifier, obj_title=None, user_id=None):
+def celery_send_mail_shared_access_removed(obj_identifier, obj_title=None, user_id=None, municipals_names=[]):
     from user.models import User
     user = User.objects.get(id=user_id)
-    user.send_mail_shared_access_removed(obj_identifier, obj_title)
+    user.send_mail_shared_access_removed(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_access_given(obj_identifier, obj_title=None, user_id=None):
+def celery_send_mail_shared_access_given(obj_identifier, obj_title=None, user_id=None, municipals_names=[]):
     from user.models import User
     user = User.objects.get(id=user_id)
-    user.send_mail_shared_access_given(obj_identifier, obj_title)
+    user.send_mail_shared_access_given(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_access_removed_team(obj_identifier, obj_title=None, team_id=None):
+def celery_send_mail_shared_access_removed_team(obj_identifier, obj_title=None, team_id=None, municipals_names=[]):
     from user.models import Team
     team = Team.objects.get(id=team_id)
-    team.send_mail_shared_access_removed(obj_identifier, obj_title)
+    team.send_mail_shared_access_removed(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_access_given_team(obj_identifier, obj_title=None, team_id=None):
+def celery_send_mail_shared_access_given_team(obj_identifier, obj_title=None, team_id=None, municipals_names=[]):
     from user.models import Team
     team = Team.objects.get(id=team_id)
-    team.send_mail_shared_access_given_team(obj_identifier, obj_title)
+    team.send_mail_shared_access_given_team(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_recorded(obj_identifier, obj_title=None, user_id=None):
+def celery_send_mail_shared_data_recorded(obj_identifier, obj_title=None, user_id=None, municipals_names=[]):
     from user.models import User
     user = User.objects.get(id=user_id)
-    user.send_mail_shared_data_recorded(obj_identifier, obj_title)
+    user.send_mail_shared_data_recorded(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_unrecorded(obj_identifier, obj_title=None, user_id=None):
+def celery_send_mail_shared_data_unrecorded(obj_identifier, obj_title=None, user_id=None, municipals_names=[]):
     from user.models import User
     user = User.objects.get(id=user_id)
-    user.send_mail_shared_data_unrecorded(obj_identifier, obj_title)
+    user.send_mail_shared_data_unrecorded(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_recorded_team(obj_identifier, obj_title=None, team_id=None):
+def celery_send_mail_shared_data_recorded_team(obj_identifier, obj_title=None, team_id=None, municipals_names=[]):
     from user.models import Team
     team = Team.objects.get(id=team_id)
-    team.send_mail_shared_data_recorded(obj_identifier, obj_title)
+    team.send_mail_shared_data_recorded(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_unrecorded_team(obj_identifier, obj_title=None, team_id=None):
+def celery_send_mail_shared_data_unrecorded_team(obj_identifier, obj_title=None, team_id=None, municipals_names=[]):
     from user.models import Team
     team = Team.objects.get(id=team_id)
-    team.send_mail_shared_data_unrecorded(obj_identifier, obj_title)
+    team.send_mail_shared_data_unrecorded(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_deleted(obj_identifier, obj_title=None, user_id=None):
+def celery_send_mail_shared_data_deleted(obj_identifier, obj_title=None, user_id=None, municipals_names=[]):
     from user.models import User
     user = User.objects.get(id=user_id)
-    user.send_mail_shared_data_deleted(obj_identifier, obj_title)
+    user.send_mail_shared_data_deleted(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_checked(obj_identifier, obj_title=None, user_id=None):
+def celery_send_mail_shared_data_checked(obj_identifier, obj_title=None, user_id=None, municipals_names=[]):
     from user.models import User
     user = User.objects.get(id=user_id)
-    user.send_mail_shared_data_checked(obj_identifier, obj_title)
+    user.send_mail_shared_data_checked(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_deleted_team(obj_identifier, obj_title=None, team_id=None):
+def celery_send_mail_shared_data_deleted_team(obj_identifier, obj_title=None, team_id=None, municipals_names=[]):
     from user.models import Team
     team = Team.objects.get(id=team_id)
-    team.send_mail_shared_data_deleted(obj_identifier, obj_title)
+    team.send_mail_shared_data_deleted(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
-def celery_send_mail_shared_data_checked_team(obj_identifier, obj_title=None, team_id=None):
+def celery_send_mail_shared_data_checked_team(obj_identifier, obj_title=None, team_id=None, municipals_names=[]):
     from user.models import Team
     team = Team.objects.get(id=team_id)
-    team.send_mail_shared_data_checked(obj_identifier, obj_title)
+    team.send_mail_shared_data_checked(obj_identifier, obj_title, municipals_names)
 
 
 @shared_task
diff --git a/konova/utils/mailer.py b/konova/utils/mailer.py
index 5c25d84b..faf21fd1 100644
--- a/konova/utils/mailer.py
+++ b/konova/utils/mailer.py
@@ -45,12 +45,14 @@ class Mailer:
             auth_password=self.auth_password
         )
 
-    def send_mail_shared_access_removed(self, obj_identifier, obj_title, user):
+    def send_mail_shared_access_removed(self, obj_identifier, obj_title, user, municipals_names):
         """ Send a mail if user has no access to the object anymore
 
         Args:
             obj_identifier (str): The object identifier
             obj_title (str): The object title
+            user (User): Related user
+            municipals_names (iterable): List of municipals of the entry
 
         Returns:
 
@@ -59,6 +61,7 @@ class Mailer:
             "user": user,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/sharing/shared_access_removed.html", context)
@@ -69,11 +72,14 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_access_given(self, obj_identifier, obj_title, user):
+    def send_mail_shared_access_given(self, obj_identifier, obj_title, user, municipals_names):
         """ Send a mail if user just got access to the object
 
         Args:
             obj_identifier (str): The object identifier
+            obj_title (str): The object title
+            user (User): The related user
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -82,6 +88,7 @@ class Mailer:
             "user": user,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/sharing/shared_access_given.html", context)
@@ -92,7 +99,7 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_access_given_team(self, obj_identifier, obj_title, team, users_to_notify):
+    def send_mail_shared_access_given_team(self, obj_identifier, obj_title, team, users_to_notify, municipals_names):
         """ Send a mail if a team just got access to the object
 
         Args:
@@ -100,6 +107,7 @@ class Mailer:
             obj_title (str): Title of the main object
             team (Team): Team to be notified
             users_to_notify (QueryDict): Contains the team users which should be notified
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -108,6 +116,7 @@ class Mailer:
             "team": team,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/sharing/shared_access_given_team.html", context)
@@ -118,7 +127,7 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_access_removed_team(self, obj_identifier, obj_title, team, users_to_notify):
+    def send_mail_shared_access_removed_team(self, obj_identifier, obj_title, team, users_to_notify, municipals_names):
         """ Send a mail if a team just lost access to the object
 
         Args:
@@ -126,6 +135,7 @@ class Mailer:
             obj_title (str): Title of the main object
             team (Team): Team to be notified
             users_to_notify (QueryDict): Contains the team users which should be notified
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -134,6 +144,7 @@ class Mailer:
             "team": team,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/sharing/shared_access_removed_team.html", context)
@@ -144,7 +155,7 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_unrecorded_team(self, obj_identifier, obj_title, team, users_to_notify):
+    def send_mail_shared_data_unrecorded_team(self, obj_identifier, obj_title, team, users_to_notify, municipals_names):
         """ Send a mail if data has just been unrecorded
 
         Args:
@@ -152,6 +163,7 @@ class Mailer:
             obj_title (str): Title of the main object
             team (Team): Team to be notified
             users_to_notify (QueryDict): Contains the team users which should be notified
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -160,6 +172,7 @@ class Mailer:
             "team": team,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/recording/shared_data_unrecorded_team.html", context)
@@ -170,7 +183,7 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_recorded_team(self, obj_identifier, obj_title, team, users_to_notify):
+    def send_mail_shared_data_recorded_team(self, obj_identifier, obj_title, team, users_to_notify, municipals_names):
         """ Send a mail if data has just been recorded
 
         Args:
@@ -178,6 +191,7 @@ class Mailer:
             obj_title (str): Title of the main object
             team (Team): Team to be notified
             users_to_notify (QueryDict): Contains the team users which should be notified
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -186,6 +200,7 @@ class Mailer:
             "team": team,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/recording/shared_data_recorded_team.html", context)
@@ -196,7 +211,7 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_checked_team(self, obj_identifier, obj_title, team, users_to_notify):
+    def send_mail_shared_data_checked_team(self, obj_identifier, obj_title, team, users_to_notify, municipals_names):
         """ Send a mail if data has just been checked
 
         Args:
@@ -204,6 +219,7 @@ class Mailer:
             obj_title (str): Title of the main object
             team (Team): Team to be notified
             users_to_notify (QueryDict): Contains the team users which should be notified
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -212,6 +228,7 @@ class Mailer:
             "team": team,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/checking/shared_data_checked_team.html", context)
@@ -249,11 +266,15 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_deleted_team(self, obj_identifier, obj_title, team, users_to_notify):
+    def send_mail_shared_data_deleted_team(self, obj_identifier, obj_title, team, users_to_notify, municipals_names):
         """ Send a mail if data has just been deleted
 
         Args:
             obj_identifier (str): The object identifier
+            obj_title (str): The object title
+            team (Team): The related team
+            users_to_notify (QuerySet): Contains team users who want to be notified
+            municipals_names (iterable): List of municipals for the entry
 
         Returns:
 
@@ -262,6 +283,7 @@ class Mailer:
             "team": team,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/deleting/shared_data_deleted_team.html", context)
@@ -272,11 +294,14 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_recorded(self, obj_identifier, obj_title, user):
+    def send_mail_shared_data_recorded(self, obj_identifier, obj_title, user, municipals_names):
         """ Send a mail if the user's shared data has just been unrecorded
 
         Args:
             obj_identifier (str): The object identifier
+            obj_title (str): The object title
+            user (User): The related user
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -285,6 +310,7 @@ class Mailer:
             "user": user,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/recording/shared_data_recorded.html", context)
@@ -295,11 +321,14 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_unrecorded(self, obj_identifier, obj_title, user):
+    def send_mail_shared_data_unrecorded(self, obj_identifier, obj_title, user, municipals_names):
         """ Send a mail if the user's shared data has just been unrecorded
 
         Args:
             obj_identifier (str): The object identifier
+            obj_title (str): The object title
+            user (User): The related user
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -308,6 +337,7 @@ class Mailer:
             "user": user,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/recording/shared_data_unrecorded.html", context)
@@ -318,11 +348,14 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_deleted(self, obj_identifier, obj_title, user):
+    def send_mail_shared_data_deleted(self, obj_identifier, obj_title, user, municipals_names):
         """ Send a mail if shared data has just been deleted
 
         Args:
             obj_identifier (str): The object identifier
+            obj_title (str): The object title
+            user (User): The related user
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -331,6 +364,7 @@ class Mailer:
             "user": user,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/deleting/shared_data_deleted.html", context)
@@ -341,11 +375,14 @@ class Mailer:
             msg
         )
 
-    def send_mail_shared_data_checked(self, obj_identifier, obj_title, user):
+    def send_mail_shared_data_checked(self, obj_identifier, obj_title, user, municipals_names):
         """ Send a mail if shared data just has been checked
 
         Args:
             obj_identifier (str): The object identifier
+            obj_title (str): The object title
+            user (User): The related user
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -354,6 +391,7 @@ class Mailer:
             "user": user,
             "obj_identifier": obj_identifier,
             "obj_title": obj_title,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/checking/shared_data_checked.html", context)
@@ -413,12 +451,13 @@ class Mailer:
             msg
         )
 
-    def send_mail_resubmission(self, obj_identifier, resubmission):
+    def send_mail_resubmission(self, obj_identifier, resubmission, municipals_names):
         """ Send a resubmission mail for a user
 
         Args:
             obj_identifier (str): The (resubmitted) object's identifier
             resubmission (Resubmission): The resubmission
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -426,6 +465,7 @@ class Mailer:
         context = {
             "obj_identifier": obj_identifier,
             "resubmission": resubmission,
+            "municipals_names": municipals_names,
             "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
         }
         msg = render_to_string("email/resubmission/resubmission.html", context)
diff --git a/konova/views/geometry.py b/konova/views/geometry.py
index 7d7fa6e3..f22b9c15 100644
--- a/konova/views/geometry.py
+++ b/konova/views/geometry.py
@@ -44,9 +44,7 @@ def get_geom_parcels(request: HttpRequest, id: str):
         status_code = 200
 
     if parcels_available or not geometry_exists:
-        parcels = parcels.order_by("-municipal", "flr", "flrstck_zhlr", "flrstck_nnr")
-        municipals = parcels.order_by("municipal").distinct("municipal").values("municipal__id")
-        municipals = Municipal.objects.filter(id__in=municipals)
+        municipals = geom.get_underlying_municipals(parcels)
 
         rpp = 100
         num_all_parcels = parcels.count()
diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo
index 1eca329178daacf6c62e36e07429631dd25732c1..40369ea975fea21ac7e278be7244fd231db4e9f8 100644
GIT binary patch
delta 10648
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
Iw%-E&2Q>A@IsgCw

delta 10481
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
Rw?6fH%YdyH-#B0H{{X19m+}Ar

diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index c225fa4f..4164f738 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -9,8 +9,8 @@
 #: compensation/forms/modals/payment.py:23
 #: compensation/forms/modals/payment.py:34
 #: compensation/forms/modals/payment.py:50
-#: intervention/forms/intervention.py:55 intervention/forms/intervention.py:175
-#: intervention/forms/intervention.py:187
+#: intervention/forms/intervention.py:56 intervention/forms/intervention.py:176
+#: intervention/forms/intervention.py:188
 #: intervention/forms/modals/revocation.py:20
 #: intervention/forms/modals/revocation.py:33
 #: intervention/forms/modals/revocation.py:46
@@ -43,7 +43,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-12-06 08:23+0100\n"
+"POT-Creation-Date: 2023-02-23 08:48+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -74,7 +74,7 @@ msgstr "Einträge erstellt bis..."
 #: compensation/templates/compensation/report/eco_account/report.html:16
 #: compensation/utils/quality.py:111 ema/templates/ema/detail/view.html:49
 #: ema/templates/ema/report/report.html:16 ema/utils/quality.py:26
-#: intervention/forms/intervention.py:103
+#: intervention/forms/intervention.py:104
 #: intervention/templates/intervention/detail/view.html:56
 #: intervention/templates/intervention/report/report.html:37
 #: intervention/utils/quality.py:62 konova/filters/mixins/office.py:34
@@ -85,11 +85,11 @@ msgstr "Eintragungsstelle"
 msgid "Select the responsible office"
 msgstr "Verantwortliche Stelle"
 
-#: analysis/forms.py:60 compensation/forms/compensation.py:93
+#: analysis/forms.py:60 compensation/forms/compensation.py:94
 #: compensation/forms/mixins.py:32 compensation/forms/mixins.py:62
-#: intervention/forms/intervention.py:65 intervention/forms/intervention.py:82
-#: intervention/forms/intervention.py:98 intervention/forms/intervention.py:114
-#: intervention/forms/intervention.py:155 intervention/forms/modals/share.py:41
+#: intervention/forms/intervention.py:66 intervention/forms/intervention.py:83
+#: intervention/forms/intervention.py:99 intervention/forms/intervention.py:115
+#: intervention/forms/intervention.py:156 intervention/forms/modals/share.py:41
 #: intervention/forms/modals/share.py:55 user/forms/modals/team.py:48
 #: user/forms/modals/team.py:112
 msgid "Click for selection"
@@ -309,7 +309,7 @@ msgstr ""
 "    "
 
 #: analysis/templates/analysis/reports/includes/intervention/laws.html:14
-#: intervention/forms/intervention.py:70
+#: intervention/forms/intervention.py:71
 #: intervention/templates/intervention/detail/view.html:39
 #: intervention/templates/intervention/report/report.html:20
 msgid "Law"
@@ -368,7 +368,7 @@ msgstr "Kennung"
 msgid "Generated automatically - not editable"
 msgstr "Automatisch generiert - nicht bearbeitbar"
 
-#: compensation/forms/compensation.py:42 compensation/tables/compensation.py:28
+#: compensation/forms/compensation.py:43 compensation/tables/compensation.py:28
 #: compensation/tables/eco_account.py:28
 #: compensation/templates/compensation/detail/compensation/includes/documents.html:28
 #: compensation/templates/compensation/detail/compensation/view.html:32
@@ -379,7 +379,7 @@ msgstr "Automatisch generiert - nicht bearbeitbar"
 #: ema/tables.py:31 ema/templates/ema/detail/includes/documents.html:28
 #: ema/templates/ema/detail/view.html:31
 #: ema/templates/ema/report/report.html:12
-#: intervention/forms/intervention.py:41 intervention/tables.py:28
+#: intervention/forms/intervention.py:42 intervention/tables.py:28
 #: intervention/templates/intervention/detail/includes/compensations.html:33
 #: intervention/templates/intervention/detail/includes/documents.html:33
 #: intervention/templates/intervention/detail/view.html:31
@@ -388,15 +388,15 @@ msgstr "Automatisch generiert - nicht bearbeitbar"
 msgid "Title"
 msgstr "Bezeichnung"
 
-#: compensation/forms/compensation.py:44 intervention/forms/intervention.py:43
+#: compensation/forms/compensation.py:45 intervention/forms/intervention.py:44
 msgid "An explanatory name"
 msgstr "Aussagekräftiger Titel"
 
-#: compensation/forms/compensation.py:48 ema/forms.py:51 ema/forms.py:114
+#: compensation/forms/compensation.py:49 ema/forms.py:51 ema/forms.py:114
 msgid "Compensation XY; Location ABC"
 msgstr "Kompensation XY; Flur ABC"
 
-#: compensation/forms/compensation.py:55
+#: compensation/forms/compensation.py:56
 #: compensation/forms/modals/compensation_action.py:81
 #: compensation/forms/modals/deadline.py:49
 #: compensation/forms/modals/payment.py:49
@@ -409,7 +409,7 @@ msgstr "Kompensation XY; Flur ABC"
 #: ema/templates/ema/detail/includes/actions.html:34
 #: ema/templates/ema/detail/includes/deadlines.html:39
 #: ema/templates/ema/detail/includes/documents.html:34
-#: intervention/forms/intervention.py:199
+#: intervention/forms/intervention.py:200
 #: intervention/forms/modals/revocation.py:45
 #: intervention/templates/intervention/detail/includes/documents.html:39
 #: intervention/templates/intervention/detail/includes/payments.html:34
@@ -420,29 +420,29 @@ msgstr "Kompensation XY; Flur ABC"
 msgid "Comment"
 msgstr "Kommentar"
 
-#: compensation/forms/compensation.py:57
+#: compensation/forms/compensation.py:58
 #: compensation/forms/modals/compensation_action.py:83
-#: intervention/forms/intervention.py:201
+#: intervention/forms/intervention.py:202
 #: konova/forms/modals/resubmission_form.py:37
 msgid "Additional comment"
 msgstr "Zusätzlicher Kommentar"
 
-#: compensation/forms/compensation.py:84
+#: compensation/forms/compensation.py:85
 #: compensation/templates/compensation/detail/compensation/view.html:36
 #: compensation/templates/compensation/report/compensation/report.html:16
 msgid "compensates intervention"
 msgstr "kompensiert Eingriff"
 
-#: compensation/forms/compensation.py:86
+#: compensation/forms/compensation.py:87
 msgid "Select the intervention for which this compensation compensates"
 msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist"
 
-#: compensation/forms/compensation.py:113
+#: compensation/forms/compensation.py:114
 #: compensation/views/compensation/compensation.py:115
 msgid "New compensation"
 msgstr "Neue Kompensation"
 
-#: compensation/forms/compensation.py:189
+#: compensation/forms/compensation.py:190
 msgid "Edit compensation"
 msgstr "Bearbeite Kompensation"
 
@@ -488,14 +488,14 @@ msgstr ""
 #: compensation/templates/compensation/report/eco_account/report.html:20
 #: compensation/utils/quality.py:113 ema/templates/ema/detail/view.html:53
 #: ema/templates/ema/report/report.html:20 ema/utils/quality.py:28
-#: intervention/forms/intervention.py:131
+#: intervention/forms/intervention.py:132
 #: intervention/templates/intervention/detail/view.html:60
 #: intervention/templates/intervention/report/report.html:41
 #: intervention/utils/quality.py:55
 msgid "Conservation office file number"
 msgstr "Aktenzeichen Eintragungsstelle"
 
-#: compensation/forms/mixins.py:43 intervention/forms/intervention.py:137
+#: compensation/forms/mixins.py:43 intervention/forms/intervention.py:138
 msgid "ETS-123/ABC.456"
 msgstr ""
 
@@ -511,11 +511,11 @@ msgstr "Zu welcher Kategorie dieser Maßnahmenträger gehört"
 msgid "Eco-Account handler detail"
 msgstr "Detailangabe zum Maßnahmenträger"
 
-#: compensation/forms/mixins.py:71 intervention/forms/intervention.py:164
+#: compensation/forms/mixins.py:71 intervention/forms/intervention.py:165
 msgid "Detail input on the handler"
 msgstr "Name der Behörde, Stadt, Firma, ..."
 
-#: compensation/forms/mixins.py:74 intervention/forms/intervention.py:167
+#: compensation/forms/mixins.py:74 intervention/forms/intervention.py:168
 msgid "Company Mustermann"
 msgstr "Firma Mustermann"
 
@@ -1284,7 +1284,7 @@ msgstr "Kompensation {} bearbeitet"
 
 #: compensation/views/compensation/compensation.py:187
 #: compensation/views/eco_account/eco_account.py:161 ema/views/ema.py:212
-#: intervention/views/intervention.py:230
+#: intervention/views/intervention.py:231
 msgid "Edit {}"
 msgstr "Bearbeite {}"
 
@@ -1306,7 +1306,7 @@ msgstr "Ökokonto {} hinzugefügt"
 msgid "Eco-Account {} edited"
 msgstr "Ökokonto {} bearbeitet"
 
-#: compensation/views/eco_account/eco_account.py:267
+#: compensation/views/eco_account/eco_account.py:268
 msgid "Eco-account removed"
 msgstr "Ökokonto entfernt"
 
@@ -1354,70 +1354,70 @@ msgstr "EMA {} bearbeitet"
 msgid "EMA removed"
 msgstr "EMA entfernt"
 
-#: intervention/forms/intervention.py:47
+#: intervention/forms/intervention.py:48
 msgid "Construction XY; Location ABC"
 msgstr "Bauvorhaben XY; Flur ABC"
 
-#: intervention/forms/intervention.py:53
+#: intervention/forms/intervention.py:54
 #: intervention/templates/intervention/detail/view.html:35
 #: intervention/templates/intervention/report/report.html:16
 #: intervention/utils/quality.py:95
 msgid "Process type"
 msgstr "Verfahrenstyp"
 
-#: intervention/forms/intervention.py:72
+#: intervention/forms/intervention.py:73
 msgid "Multiple selection possible"
 msgstr "Mehrfachauswahl möglich"
 
-#: intervention/forms/intervention.py:87
+#: intervention/forms/intervention.py:88
 #: intervention/templates/intervention/detail/view.html:48
 #: intervention/templates/intervention/report/report.html:29
 #: intervention/utils/quality.py:59 konova/filters/mixins/office.py:66
 msgid "Registration office"
 msgstr "Zulassungsbehörde"
 
-#: intervention/forms/intervention.py:119
+#: intervention/forms/intervention.py:120
 #: intervention/templates/intervention/detail/view.html:52
 #: intervention/templates/intervention/report/report.html:33
 #: intervention/utils/quality.py:52
 msgid "Registration office file number"
 msgstr "Aktenzeichen Zulassungsbehörde"
 
-#: intervention/forms/intervention.py:125
+#: intervention/forms/intervention.py:126
 msgid "ZB-123/ABC.456"
 msgstr ""
 
-#: intervention/forms/intervention.py:143
+#: intervention/forms/intervention.py:144
 msgid "Intervention handler type"
 msgstr "Art des Eingriffsverursachers"
 
-#: intervention/forms/intervention.py:145
+#: intervention/forms/intervention.py:146
 msgid "What type of handler is responsible for the intervention?"
 msgstr "Zu welcher Kategorie dieser Eingriffsverursacher gehört"
 
-#: intervention/forms/intervention.py:160
+#: intervention/forms/intervention.py:161
 msgid "Intervention handler detail"
 msgstr "Detailangabe zum Eingriffsverursacher"
 
-#: intervention/forms/intervention.py:174
+#: intervention/forms/intervention.py:175
 #: intervention/templates/intervention/detail/view.html:101
 #: intervention/templates/intervention/report/report.html:81
 #: intervention/utils/quality.py:86
 msgid "Registration date"
 msgstr "Datum Zulassung bzw. Satzungsbeschluss"
 
-#: intervention/forms/intervention.py:186
+#: intervention/forms/intervention.py:187
 #: intervention/templates/intervention/detail/view.html:105
 #: intervention/templates/intervention/report/report.html:85
 msgid "Binding on"
 msgstr "Datum Bestandskraft bzw. Rechtskraft"
 
-#: intervention/forms/intervention.py:212
+#: intervention/forms/intervention.py:213
 #: intervention/views/intervention.py:100
 msgid "New intervention"
 msgstr "Neuer Eingriff"
 
-#: intervention/forms/intervention.py:302
+#: intervention/forms/intervention.py:303
 msgid "Edit intervention"
 msgstr "Eingriff bearbeiten"
 
@@ -1653,11 +1653,11 @@ msgstr "Eingriffe - Übersicht"
 msgid "Intervention {} added"
 msgstr "Eingriff {} hinzugefügt"
 
-#: intervention/views/intervention.py:218
+#: intervention/views/intervention.py:219
 msgid "Intervention {} edited"
 msgstr "Eingriff {} bearbeitet"
 
-#: intervention/views/intervention.py:255
+#: intervention/views/intervention.py:256
 msgid "{} removed"
 msgstr "{} entfernt"
 
@@ -1744,7 +1744,8 @@ msgstr "Verzeichnete anzeigen"
 
 #: konova/filters/mixins/record.py:27
 msgid "If activated also shows entries which have been already recorded"
-msgstr "Wenn aktiviert werden auch Einträge angezeigt, die bereits verzeichnet wurden"
+msgstr ""
+"Wenn aktiviert werden auch Einträge angezeigt, die bereits verzeichnet wurden"
 
 #: konova/filters/mixins/self_created.py:23
 msgid "Show only self created"
@@ -1752,7 +1753,9 @@ msgstr "Nur selbst erstellte anzeigen"
 
 #: konova/filters/mixins/self_created.py:28
 msgid "If activated only shows entries which have been created by you"
-msgstr "Wenn aktiviert werden nur Einträge angezeigt, die von Ihnen erstellt worden sind"
+msgstr ""
+"Wenn aktiviert werden nur Einträge angezeigt, die von Ihnen erstellt worden "
+"sind"
 
 #: konova/filters/mixins/share.py:22
 msgid "Show unshared"
@@ -1760,13 +1763,15 @@ msgstr "Nicht freigegebene anzeigen"
 
 #: konova/filters/mixins/share.py:27
 msgid "If activated also shows entries which are not shared with you"
-msgstr "Wenn aktiviert werden auch Einträge angezeigt, die nicht für Sie freigegeben sind"
+msgstr ""
+"Wenn aktiviert werden auch Einträge angezeigt, die nicht für Sie freigegeben "
+"sind"
 
 #: konova/forms/base_form.py:23 templates/form/collapsable/form.html:62
 msgid "Save"
 msgstr "Speichern"
 
-#: konova/forms/base_form.py:57
+#: konova/forms/base_form.py:72
 msgid "Not editable"
 msgstr "Nicht editierbar"
 
@@ -1822,11 +1827,11 @@ msgstr ""
 msgid "Confirm"
 msgstr "Bestätige"
 
-#: konova/forms/modals/remove_form.py:31 konova/forms/remove_form.py:30
+#: konova/forms/modals/remove_form.py:32 konova/forms/remove_form.py:30
 msgid "Remove"
 msgstr "Löschen"
 
-#: konova/forms/modals/remove_form.py:32
+#: konova/forms/modals/remove_form.py:33
 msgid "Are you sure?"
 msgstr "Sind Sie sicher?"
 
@@ -1976,39 +1981,39 @@ msgstr "In Zwischenablage kopiert"
 msgid "Search"
 msgstr "Suchen"
 
-#: konova/utils/mailer.py:68 konova/utils/mailer.py:143
+#: konova/utils/mailer.py:71 konova/utils/mailer.py:154
 msgid "{} - Shared access removed"
 msgstr "{} - Zugriff entzogen"
 
-#: konova/utils/mailer.py:91 konova/utils/mailer.py:117
+#: konova/utils/mailer.py:98 konova/utils/mailer.py:126
 msgid "{} - Shared access given"
 msgstr "{} - Zugriff freigegeben"
 
-#: konova/utils/mailer.py:169 konova/utils/mailer.py:317
+#: konova/utils/mailer.py:182 konova/utils/mailer.py:346
 msgid "{} - Shared data unrecorded"
 msgstr "{} - Freigegebene Daten entzeichnet"
 
-#: konova/utils/mailer.py:195 konova/utils/mailer.py:294
+#: konova/utils/mailer.py:210 konova/utils/mailer.py:319
 msgid "{} - Shared data recorded"
 msgstr "{} - Freigegebene Daten verzeichnet"
 
-#: konova/utils/mailer.py:221 konova/utils/mailer.py:363
+#: konova/utils/mailer.py:238 konova/utils/mailer.py:400
 msgid "{} - Shared data checked"
 msgstr "{} - Freigegebene Daten geprüft"
 
-#: konova/utils/mailer.py:248 konova/utils/mailer.py:391
+#: konova/utils/mailer.py:265 konova/utils/mailer.py:428
 msgid "{} - Deduction changed"
 msgstr "{} - Abbuchung geändert"
 
-#: konova/utils/mailer.py:271 konova/utils/mailer.py:340
+#: konova/utils/mailer.py:293 konova/utils/mailer.py:373
 msgid "{} - Shared data deleted"
 msgstr "{} - Freigegebene Daten gelöscht"
 
-#: konova/utils/mailer.py:412 templates/email/api/verify_token.html:4
+#: konova/utils/mailer.py:449 templates/email/api/verify_token.html:4
 msgid "Request for new API token"
 msgstr "Anfrage für neuen API Token"
 
-#: konova/utils/mailer.py:435
+#: konova/utils/mailer.py:474
 msgid "Resubmission - {}"
 msgstr "Wiedervorlage - {}"
 
@@ -2369,7 +2374,7 @@ msgstr ""
 #: templates/email/recording/shared_data_unrecorded.html:20
 #: templates/email/recording/shared_data_unrecorded_team.html:20
 #: templates/email/resubmission/resubmission.html:21
-#: templates/email/sharing/shared_access_given.html:21
+#: templates/email/sharing/shared_access_given.html:29
 #: templates/email/sharing/shared_access_given_team.html:21
 #: templates/email/sharing/shared_access_removed.html:21
 #: templates/email/sharing/shared_access_removed_team.html:21
@@ -2535,11 +2540,19 @@ msgid "the following dataset has just been shared with you"
 msgstr "der folgende Datensatz wurde soeben für Sie freigegeben "
 
 #: templates/email/sharing/shared_access_given.html:17
+msgid "This entry is located in"
+msgstr "Dieser Eintrag befindet sich in"
+
+#: templates/email/sharing/shared_access_given.html:23
+msgid "Unknown - No administrative location recognized"
+msgstr "Unbekannt - Keine administrative Verortung möglich"
+
+#: templates/email/sharing/shared_access_given.html:25
 #: templates/email/sharing/shared_access_given_team.html:17
 msgid "This means you can now edit this dataset."
 msgstr "Das bedeutet, dass Sie diesen Datensatz nun auch bearbeiten können."
 
-#: templates/email/sharing/shared_access_given.html:18
+#: templates/email/sharing/shared_access_given.html:26
 #: templates/email/sharing/shared_access_given_team.html:18
 msgid ""
 "The shared dataset appears now by default on your overview for this dataset "
@@ -2548,7 +2561,7 @@ msgstr ""
 "Der freigegebene Datensatz ist nun standardmäßig in Ihrer Übersicht für den "
 "Datensatztyp im KSP gelistet."
 
-#: templates/email/sharing/shared_access_given.html:28
+#: templates/email/sharing/shared_access_given.html:36
 #: templates/email/sharing/shared_access_given_team.html:28
 msgid ""
 "Please note: Shared access on an intervention means you automatically have "
@@ -2665,7 +2678,7 @@ msgstr ""
 "Vergessen Sie nicht ihn anschließend wieder zu verzeichnen.\n"
 " "
 
-#: templates/form/table/generic_table_form_body.html:24
+#: templates/form/table/generic_table_form_body.html:30
 msgid "Fields with * are required."
 msgstr "* sind Pflichtfelder."
 
diff --git a/templates/email/checking/shared_data_checked.html b/templates/email/checking/shared_data_checked.html
index 133dae2e..258315d2 100644
--- a/templates/email/checking/shared_data_checked.html
+++ b/templates/email/checking/shared_data_checked.html
@@ -14,6 +14,16 @@
         <br>
         <strong>{{obj_title}}</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'This means, the responsible registration office just confirmed the correctness of this dataset.' %}
         <br>
         <br>
diff --git a/templates/email/checking/shared_data_checked_team.html b/templates/email/checking/shared_data_checked_team.html
index 6a7a4500..6d02df52 100644
--- a/templates/email/checking/shared_data_checked_team.html
+++ b/templates/email/checking/shared_data_checked_team.html
@@ -14,6 +14,16 @@
         <br>
         <strong>{{obj_title}}</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'This means, the responsible registration office just confirmed the correctness of this dataset.' %}
         <br>
         <br>
diff --git a/templates/email/deleting/shared_data_deleted.html b/templates/email/deleting/shared_data_deleted.html
index 7857444c..491e70b4 100644
--- a/templates/email/deleting/shared_data_deleted.html
+++ b/templates/email/deleting/shared_data_deleted.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'If this should not have been happened, please contact us. See the signature for details.' %}
         <br>
         <br>
diff --git a/templates/email/deleting/shared_data_deleted_team.html b/templates/email/deleting/shared_data_deleted_team.html
index 0ffa8bbf..ba1328d3 100644
--- a/templates/email/deleting/shared_data_deleted_team.html
+++ b/templates/email/deleting/shared_data_deleted_team.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'If this should not have been happened, please contact us. See the signature for details.' %}
         <br>
         <br>
diff --git a/templates/email/recording/shared_data_recorded.html b/templates/email/recording/shared_data_recorded.html
index ccad11e0..71f92f7d 100644
--- a/templates/email/recording/shared_data_recorded.html
+++ b/templates/email/recording/shared_data_recorded.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'This means the data is now publicly available, e.g. in LANIS' %}
         <br>
         <br>
diff --git a/templates/email/recording/shared_data_recorded_team.html b/templates/email/recording/shared_data_recorded_team.html
index 0734bc62..1c84674b 100644
--- a/templates/email/recording/shared_data_recorded_team.html
+++ b/templates/email/recording/shared_data_recorded_team.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'This means the data is now publicly available, e.g. in LANIS' %}
         <br>
         <br>
diff --git a/templates/email/recording/shared_data_unrecorded.html b/templates/email/recording/shared_data_unrecorded.html
index 3406b750..c6c7b0c3 100644
--- a/templates/email/recording/shared_data_unrecorded.html
+++ b/templates/email/recording/shared_data_unrecorded.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'This means the data is no longer publicly available.' %}
         <br>
         <br>
diff --git a/templates/email/recording/shared_data_unrecorded_team.html b/templates/email/recording/shared_data_unrecorded_team.html
index 5c0f8560..6ac1d75b 100644
--- a/templates/email/recording/shared_data_unrecorded_team.html
+++ b/templates/email/recording/shared_data_unrecorded_team.html
@@ -14,6 +14,17 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        <br>
+        {% endfor %}
+        </ul>
         {% trans 'This means the data is no longer publicly available.' %}
         <br>
         <br>
diff --git a/templates/email/resubmission/resubmission.html b/templates/email/resubmission/resubmission.html
index 25848f55..0dcc32ce 100644
--- a/templates/email/resubmission/resubmission.html
+++ b/templates/email/resubmission/resubmission.html
@@ -18,6 +18,16 @@
         {% endif %}
         <br>
         <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
+        <br>
         {% trans 'Best regards' %}
         <br>
         KSP
diff --git a/templates/email/sharing/shared_access_given.html b/templates/email/sharing/shared_access_given.html
index 6ab759b3..785e602c 100644
--- a/templates/email/sharing/shared_access_given.html
+++ b/templates/email/sharing/shared_access_given.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'This means you can now edit this dataset.' %}
         {% trans 'The shared dataset appears now by default on your overview for this dataset type.' %}
         <br>
diff --git a/templates/email/sharing/shared_access_given_team.html b/templates/email/sharing/shared_access_given_team.html
index cdf3bb1c..0f23bc57 100644
--- a/templates/email/sharing/shared_access_given_team.html
+++ b/templates/email/sharing/shared_access_given_team.html
@@ -14,6 +14,17 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <br>
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'This means you can now edit this dataset.' %}
         {% trans 'The shared dataset appears now by default on your overview for this dataset type.' %}
         <br>
diff --git a/templates/email/sharing/shared_access_removed.html b/templates/email/sharing/shared_access_removed.html
index b3121117..f1845a3e 100644
--- a/templates/email/sharing/shared_access_removed.html
+++ b/templates/email/sharing/shared_access_removed.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'However, you are still able to view the dataset content.' %}
         {% trans 'Please use the provided search filter on the dataset`s overview pages to find them.' %}
         <br>
diff --git a/templates/email/sharing/shared_access_removed_team.html b/templates/email/sharing/shared_access_removed_team.html
index 992f00f8..ede05202 100644
--- a/templates/email/sharing/shared_access_removed_team.html
+++ b/templates/email/sharing/shared_access_removed_team.html
@@ -14,6 +14,16 @@
         <br>
         <strong>"{{obj_title}}"</strong>
         <br>
+        <br>
+        {% trans 'This entry is located in' %}
+        <ul>
+        {% for municipal in municipals_names %}
+            <li>{{municipal}}</li>
+        {% empty %}
+        </ul>
+        {% trans 'Unknown - No administrative location recognized' %}
+        {% endfor %}
+        </ul>
         {% trans 'However, you are still able to view the dataset content.' %}
         {% trans 'Please use the provided search filter on the dataset`s overview pages to find them.' %}
         <br>
diff --git a/user/models/team.py b/user/models/team.py
index b4bc26c1..0ff18a85 100644
--- a/user/models/team.py
+++ b/user/models/team.py
@@ -31,12 +31,13 @@ class Team(UuidModel, DeletableObjectMixin):
         self.deleted = delete_action
         self.save()
 
-    def send_mail_shared_access_given_team(self, obj_identifier, obj_title):
+    def send_mail_shared_access_given_team(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the team members in case of given shared access
 
         Args:
-            obj_identifier ():
-            obj_title ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -45,14 +46,15 @@ class Team(UuidModel, DeletableObjectMixin):
         users_to_notify = self.users.filter(
             notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_GAINED.value]
         )
-        mailer.send_mail_shared_access_given_team(obj_identifier, obj_title, self, users_to_notify)
+        mailer.send_mail_shared_access_given_team(obj_identifier, obj_title, self, users_to_notify, municipals_names)
 
-    def send_mail_shared_access_removed(self, obj_identifier, obj_title):
+    def send_mail_shared_access_removed(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the team members in case of removed shared access
 
         Args:
-            obj_identifier ():
-            obj_title ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -61,14 +63,15 @@ class Team(UuidModel, DeletableObjectMixin):
         users_to_notify = self.users.filter(
             notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_REMOVED.value]
         )
-        mailer.send_mail_shared_access_removed_team(obj_identifier, obj_title, self, users_to_notify)
+        mailer.send_mail_shared_access_removed_team(obj_identifier, obj_title, self, users_to_notify, municipals_names)
 
-    def send_mail_shared_data_unrecorded(self, obj_identifier, obj_title):
+    def send_mail_shared_data_unrecorded(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the team members in case of unrecorded data
 
         Args:
-            obj_identifier ():
-            obj_title ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -77,14 +80,15 @@ class Team(UuidModel, DeletableObjectMixin):
         users_to_notify = self.users.filter(
             notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED.value]
         )
-        mailer.send_mail_shared_data_unrecorded_team(obj_identifier, obj_title, self, users_to_notify)
+        mailer.send_mail_shared_data_unrecorded_team(obj_identifier, obj_title, self, users_to_notify, municipals_names)
 
-    def send_mail_shared_data_recorded(self, obj_identifier, obj_title):
+    def send_mail_shared_data_recorded(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the team members in case of unrecorded data
 
         Args:
-            obj_identifier ():
-            obj_title ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -93,14 +97,15 @@ class Team(UuidModel, DeletableObjectMixin):
         users_to_notify = self.users.filter(
             notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED.value]
         )
-        mailer.send_mail_shared_data_recorded_team(obj_identifier, obj_title, self, users_to_notify)
+        mailer.send_mail_shared_data_recorded_team(obj_identifier, obj_title, self, users_to_notify, municipals_names)
 
-    def send_mail_shared_data_checked(self, obj_identifier, obj_title):
+    def send_mail_shared_data_checked(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the team members in case of checked data
 
         Args:
-            obj_identifier ():
-            obj_title ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -109,7 +114,7 @@ class Team(UuidModel, DeletableObjectMixin):
         users_to_notify = self.users.filter(
             notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_CHECKED.value]
         )
-        mailer.send_mail_shared_data_checked_team(obj_identifier, obj_title, self, users_to_notify)
+        mailer.send_mail_shared_data_checked_team(obj_identifier, obj_title, self, users_to_notify, municipals_names)
 
     def send_mail_deduction_changed(self, obj_identifier, obj_title, data_changes):
         """ Sends a mail to the team members in case of changed deduction values
@@ -128,12 +133,13 @@ class Team(UuidModel, DeletableObjectMixin):
         )
         mailer.send_mail_deduction_changed_team(obj_identifier, obj_title, self, data_changes, users_to_notify)
 
-    def send_mail_shared_data_deleted(self, obj_identifier, obj_title):
+    def send_mail_shared_data_deleted(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the team members in case of deleted data
 
         Args:
-            obj_identifier ():
-            obj_title ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -142,7 +148,7 @@ class Team(UuidModel, DeletableObjectMixin):
         users_to_notify = self.users.filter(
             notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_DELETED.value]
         )
-        mailer.send_mail_shared_data_deleted_team(obj_identifier, obj_title, self, users_to_notify)
+        mailer.send_mail_shared_data_deleted_team(obj_identifier, obj_title, self, users_to_notify, municipals_names)
 
     def remove_user(self, user):
         """ Removes a user from the team
diff --git a/user/models/user.py b/user/models/user.py
index 20d3d50b..ad7a3eca 100644
--- a/user/models/user.py
+++ b/user/models/user.py
@@ -60,12 +60,13 @@ class User(AbstractUser):
             name=ETS_GROUP
         ).exists()
 
-    def send_mail_shared_access_removed(self, obj_identifier, obj_title):
+    def send_mail_shared_access_removed(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the user in case of removed shared access
 
         Args:
             obj_identifier ():
             obj_title ():
+            municipals_names ():
 
         Returns:
 
@@ -73,13 +74,15 @@ class User(AbstractUser):
         notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_REMOVED)
         if notification_set:
             mailer = Mailer()
-            mailer.send_mail_shared_access_removed(obj_identifier, obj_title, self)
+            mailer.send_mail_shared_access_removed(obj_identifier, obj_title, self, municipals_names)
 
-    def send_mail_shared_access_given(self, obj_identifier, obj_title):
+    def send_mail_shared_access_given(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the user in case of given shared access
 
         Args:
-            obj_identifier ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -87,13 +90,15 @@ class User(AbstractUser):
         notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_GAINED)
         if notification_set:
             mailer = Mailer()
-            mailer.send_mail_shared_access_given(obj_identifier, obj_title, self)
+            mailer.send_mail_shared_access_given(obj_identifier, obj_title, self, municipals_names)
 
-    def send_mail_shared_data_recorded(self, obj_identifier, obj_title):
+    def send_mail_shared_data_recorded(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the user in case of shared data has been recorded
 
         Args:
-            obj_identifier ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -101,13 +106,15 @@ class User(AbstractUser):
         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, obj_title, self)
+            mailer.send_mail_shared_data_recorded(obj_identifier, obj_title, self, municipals_names)
 
-    def send_mail_shared_data_unrecorded(self, obj_identifier, obj_title):
+    def send_mail_shared_data_unrecorded(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the user in case of shared data has been unrecorded
 
         Args:
-            obj_identifier ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -115,13 +122,15 @@ class User(AbstractUser):
         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, obj_title, self)
+            mailer.send_mail_shared_data_unrecorded(obj_identifier, obj_title, self, municipals_names)
 
-    def send_mail_shared_data_deleted(self, obj_identifier, obj_title):
+    def send_mail_shared_data_deleted(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the user in case of shared data has been deleted
 
         Args:
-            obj_identifier ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -129,13 +138,15 @@ class User(AbstractUser):
         notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_DELETED)
         if notification_set:
             mailer = Mailer()
-            mailer.send_mail_shared_data_deleted(obj_identifier, obj_title, self)
+            mailer.send_mail_shared_data_deleted(obj_identifier, obj_title, self, municipals_names)
 
-    def send_mail_shared_data_checked(self, obj_identifier, obj_title):
+    def send_mail_shared_data_checked(self, obj_identifier, obj_title, municipals_names):
         """ Sends a mail to the user in case of shared data has been deleted
 
         Args:
-            obj_identifier ():
+            obj_identifier (str): The entry identifier
+            obj_title (str): The entry title
+            municipals_names (iterable): List of municipals for this entry
 
         Returns:
 
@@ -143,7 +154,7 @@ class User(AbstractUser):
         notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_CHECKED)
         if notification_set:
             mailer = Mailer()
-            mailer.send_mail_shared_data_checked(obj_identifier, obj_title, self)
+            mailer.send_mail_shared_data_checked(obj_identifier, obj_title, self, municipals_names)
 
     def send_mail_deduction_changed(self, obj_identifier, obj_title, data_changes):
         """ Sends a mail to the user in case of a changed deduction