Merge pull request 'master' (#303) from master into Docker

Reviewed-on: SGD-Nord/konova#303
pull/380/head
mpeltriaux 2 years ago
commit 4bc94e78e0

@ -61,7 +61,7 @@ class AbstractModelAPISerializerV1(AbstractModelAPISerializer):
if konova_code is None: if konova_code is None:
return None return None
return { return {
"atom_id": konova_code.atom_id, "id": konova_code.id,
"long_name": konova_code.long_name, "long_name": konova_code.long_name,
"short_name": konova_code.short_name, "short_name": konova_code.short_name,
} }
@ -70,7 +70,7 @@ class AbstractModelAPISerializerV1(AbstractModelAPISerializer):
""" Returns a konova code instance """ Returns a konova code instance
Args: Args:
json_str (str): The value for the code (atom id) json_str (str): The value for the code (id)
code_list_identifier (str): From which konova code list this code is supposed to be from code_list_identifier (str): From which konova code list this code is supposed to be from
Returns: Returns:
@ -83,7 +83,7 @@ class AbstractModelAPISerializerV1(AbstractModelAPISerializer):
return None return None
try: try:
code = KonovaCode.objects.get( code = KonovaCode.objects.get(
atom_id=json_str, id=json_str,
code_lists__in=[code_list_identifier] code_lists__in=[code_list_identifier]
) )
except ObjectDoesNotExist as e: except ObjectDoesNotExist as e:
@ -297,9 +297,12 @@ class AbstractCompensationAPISerializerV1Mixin:
""" """
deadlines = [] deadlines = []
for entry in deadline_data: for entry in deadline_data:
deadline_type = entry["type"] try:
date = entry["date"] deadline_type = entry["type"]
comment = entry["comment"] date = entry["date"]
comment = entry["comment"]
except KeyError:
raise ValueError(f"Invalid deadline content. Content was {entry} but should follow the specification")
# Check on validity # Check on validity
if deadline_type not in DeadlineType: if deadline_type not in DeadlineType:
@ -341,11 +344,14 @@ class AbstractCompensationAPISerializerV1Mixin:
""" """
states = [] states = []
for entry in states_data: for entry in states_data:
biotope_type = entry["biotope"] try:
biotope_details = [ biotope_type = entry["biotope"]
self._konova_code_from_json(e, CODELIST_BIOTOPES_EXTRA_CODES_ID) for e in entry["biotope_details"] biotope_details = [
] self._konova_code_from_json(e, CODELIST_BIOTOPES_EXTRA_CODES_ID) for e in entry["biotope_details"]
surface = float(entry["surface"]) ]
surface = float(entry["surface"])
except KeyError:
raise ValueError(f"Invalid biotope content. Content was {entry} but should follow the specification ")
# Check on validity # Check on validity
if surface <= 0: if surface <= 0:
@ -354,7 +360,7 @@ class AbstractCompensationAPISerializerV1Mixin:
# If this exact data is already existing, we do not create it new. Instead put it's id in the list of # If this exact data is already existing, we do not create it new. Instead put it's id in the list of
# entries, we will use to set the new actions # entries, we will use to set the new actions
state = states_manager.filter( state = states_manager.filter(
biotope_type__atom_id=biotope_type, biotope_type__id=biotope_type,
surface=surface, surface=surface,
).exclude( ).exclude(
id__in=states id__in=states
@ -385,16 +391,19 @@ class AbstractCompensationAPISerializerV1Mixin:
""" """
actions = [] actions = []
for entry in actions_data: for entry in actions_data:
action_types = [ try:
self._konova_code_from_json(e, CODELIST_COMPENSATION_ACTION_ID) for e in entry["action_types"] action_types = [
] self._konova_code_from_json(e, CODELIST_COMPENSATION_ACTION_ID) for e in entry["action_types"]
action_details = [ ]
self._konova_code_from_json(e, CODELIST_COMPENSATION_ACTION_DETAIL_ID) for e in entry["action_details"] action_details = [
] self._konova_code_from_json(e, CODELIST_COMPENSATION_ACTION_DETAIL_ID) for e in entry["action_details"]
amount = float(entry["amount"]) ]
# Mapping of old "qm" into "m²" amount = float(entry["amount"])
unit = UnitChoices.m2.value if entry["unit"] == "qm" else entry["unit"] # Mapping of old "qm" into "m²"
comment = entry["comment"] unit = UnitChoices.m2.value if entry["unit"] == "qm" else entry["unit"]
comment = entry["comment"]
except KeyError:
raise ValueError(f"Invalid action content. Content was {entry} but should follow specification")
# Check on validity # Check on validity
if amount <= 0: if amount <= 0:

@ -55,10 +55,12 @@ class CheckboxCompensationTableFilter(CheckboxTableFilter):
""" """
if not value: if not value:
return queryset.filter( user_teams = self.user.shared_teams
result = queryset.filter(
Q(intervention__users__in=[self.user]) | # requesting user has access Q(intervention__users__in=[self.user]) | # requesting user has access
Q(intervention__teams__in=self.user.shared_teams) Q(intervention__teams__in=user_teams)
).distinct() ).distinct()
return result
else: else:
return queryset return queryset

@ -8,6 +8,7 @@ Created on: 18.08.22
from django.http import HttpRequest from django.http import HttpRequest
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.urls import reverse from django.urls import reverse
from django.utils.formats import number_format
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -111,6 +112,7 @@ class EcoAccountTable(BaseTable, TableRenderMixin, TableOrderMixin):
except ZeroDivisionError: except ZeroDivisionError:
value_relative = 0 value_relative = 0
html = render_to_string("konova/widgets/progressbar.html", {"value": value_relative}) html = render_to_string("konova/widgets/progressbar.html", {"value": value_relative})
html += f"{number_format(record.deductable_rest, decimal_pos=2)}"
return format_html(html) return format_html(html)
def render_r(self, value, record: EcoAccount): def render_r(self, value, record: EcoAccount):

@ -204,7 +204,11 @@ def detail_view(request: HttpRequest, id: str):
""" """
template = "compensation/detail/compensation/view.html" template = "compensation/detail/compensation/view.html"
comp = get_object_or_404( comp = get_object_or_404(
Compensation, Compensation.objects.select_related(
"modified",
"created",
"geometry"
),
id=id, id=id,
deleted=None, deleted=None,
intervention__deleted=None, intervention__deleted=None,

@ -142,6 +142,8 @@ def detail_view(request: HttpRequest, id: str):
"geometry", "geometry",
"legal", "legal",
"responsible", "responsible",
).prefetch_related(
"legal__revocations",
), ),
id=id, id=id,
deleted=None deleted=None
@ -158,7 +160,10 @@ def detail_view(request: HttpRequest, id: str):
last_checked = intervention.get_last_checked_action() last_checked = intervention.get_last_checked_action()
last_checked_tooltip = "" last_checked_tooltip = ""
if last_checked: if last_checked:
last_checked_tooltip = DATA_CHECKED_PREVIOUSLY_TEMPLATE.format(last_checked.get_timestamp_str_formatted(), last_checked.user) last_checked_tooltip = DATA_CHECKED_PREVIOUSLY_TEMPLATE.format(
last_checked.get_timestamp_str_formatted(),
last_checked.user
)
has_payment_without_document = intervention.payments.exists() and not intervention.get_documents()[1].exists() has_payment_without_document = intervention.payments.exists() and not intervention.get_documents()[1].exists()

@ -50,9 +50,11 @@ class ShareableTableFilterMixin(django_filters.FilterSet):
""" """
if not value: if not value:
return queryset.filter( user_teams = self.user.shared_teams
result = queryset.filter(
Q(users__in=[self.user]) | # requesting user has access Q(users__in=[self.user]) | # requesting user has access
Q(teams__in=self.user.shared_teams) Q(teams__in=user_teams)
).distinct() ).distinct()
return result
else: else:
return queryset return queryset

@ -276,6 +276,22 @@ class Geometry(BaseResource):
return parcels 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): def count_underlying_parcels(self):
""" Getter for number of underlying parcels """ Getter for number of underlying parcels

@ -120,13 +120,14 @@ class DeletableObjectMixin(models.Model):
if send_mail: if send_mail:
# Send mail # Send mail
shared_users = self.shared_users.values_list("id", flat=True) 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: 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 # Send mail
shared_teams = self.shared_teams.values_list("id", flat=True) shared_teams = self.shared_teams.values_list("id", flat=True)
for team_id in shared_teams: 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() self.save()
@ -277,12 +278,13 @@ class RecordableObjectMixin(models.Model):
shared_users = self.shared_users.values_list("id", flat=True) shared_users = self.shared_users.values_list("id", flat=True)
shared_teams = self.shared_teams.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: 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: 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 return action
@ -307,12 +309,13 @@ class RecordableObjectMixin(models.Model):
shared_users = self.shared_users.values_list("id", flat=True) shared_users = self.shared_users.values_list("id", flat=True)
shared_teams = self.shared_teams.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: 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: 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 return action
@ -404,15 +407,17 @@ class CheckableObjectMixin(models.Model):
self.checked = action self.checked = action
self.save() self.save()
municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
# Send mail # Send mail
shared_users = self.shared_users.values_list("id", flat=True) shared_users = self.shared_users.values_list("id", flat=True)
for user_id in shared_users: 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 # Send mail
shared_teams = self.shared_teams.values_list("id", flat=True) shared_teams = self.shared_teams.values_list("id", flat=True)
for team_id in shared_teams: 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) self.log.add(action)
return action return action
@ -501,10 +506,13 @@ class ShareableObjectMixin(models.Model):
Returns: Returns:
""" """
directly_shared = self.shared_users.filter(id=user.id).exists() obj_shared_teams = self.shared_teams
team_shared = self.shared_teams.filter( obj_shared_users = self.shared_users
users__in=[user] user_shared_teams = user.shared_teams
).exists()
directly_shared = obj_shared_users.filter(id=user.id).exists()
team_shared = (obj_shared_teams & user_shared_teams).exists()
is_shared = directly_shared or team_shared is_shared = directly_shared or team_shared
return is_shared return is_shared
@ -574,10 +582,11 @@ class ShareableObjectMixin(models.Model):
id__in=shared_teams id__in=shared_teams
).values_list("id", flat=True) ).values_list("id", flat=True)
municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
for team_id in new_teams: 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: 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) self.share_with_team_list(accessing_teams)
@ -602,11 +611,12 @@ class ShareableObjectMixin(models.Model):
id__in=shared_users id__in=shared_users
).values_list("id", flat=True) ).values_list("id", flat=True)
municipals_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
# Send mails # Send mails
for user_id in removed_users: 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: 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 # Set new shared users
self.share_with_user_list(accessing_users) self.share_with_user_list(accessing_users)
@ -669,8 +679,9 @@ class ShareableObjectMixin(models.Model):
default_users.append(user) default_users.append(user)
self.share_with_user_list(cleaned_users) 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: 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): class GeoReferencedMixin(models.Model):
@ -767,5 +778,6 @@ class ResubmitableObjectMixin(models.Model):
""" """
resubmissions = self.resubmissions.all() resubmissions = self.resubmissions.all()
municipal_names = list(self.geometry.get_underlying_municipals().values_list("name", flat=True))
for resubmission in resubmissions: for resubmission in resubmissions:
resubmission.send_resubmission_mail(self.identifier) resubmission.send_resubmission_mail(self.identifier, municipal_names)

@ -31,7 +31,7 @@ class Resubmission(BaseResource):
help_text="Optional comment for the user itself" 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 """ Sends a resubmission mail
""" """
@ -41,6 +41,6 @@ class Resubmission(BaseResource):
return return
mailer = Mailer() mailer = Mailer()
mailer.send_mail_resubmission(obj_identifier, self) mailer.send_mail_resubmission(obj_identifier, self, municipal_names)
self.resubmission_sent = True self.resubmission_sent = True
self.save() self.save()

@ -25,87 +25,87 @@ def celery_update_parcels(geometry_id: str, recheck: bool = True):
@shared_task @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 from user.models import User
user = User.objects.get(id=user_id) 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 @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 from user.models import User
user = User.objects.get(id=user_id) 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 @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 from user.models import Team
team = Team.objects.get(id=team_id) 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 @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 from user.models import Team
team = Team.objects.get(id=team_id) 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 @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 from user.models import User
user = User.objects.get(id=user_id) 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 @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 from user.models import User
user = User.objects.get(id=user_id) 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 @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 from user.models import Team
team = Team.objects.get(id=team_id) 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 @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 from user.models import Team
team = Team.objects.get(id=team_id) 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 @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 from user.models import User
user = User.objects.get(id=user_id) 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 @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 from user.models import User
user = User.objects.get(id=user_id) 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 @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 from user.models import Team
team = Team.objects.get(id=team_id) 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 @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 from user.models import Team
team = Team.objects.get(id=team_id) 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 @shared_task

@ -9,7 +9,7 @@ from django.contrib.gis.db.models.functions import Translate
from konova.models import Geometry, GeometryConflict from konova.models import Geometry, GeometryConflict
from konova.tests.test_views import BaseTestCase from konova.tests.test_views import BaseTestCase
from konova.utils.wfs.spatial import ParcelWFSFetcher from konova.utils.schneider.fetcher import ParcelFetcher
class GeometryTestCase(BaseTestCase): class GeometryTestCase(BaseTestCase):
@ -63,18 +63,14 @@ class GeometryTestCase(BaseTestCase):
num_conflict = GeometryConflict.objects.all().count() num_conflict = GeometryConflict.objects.all().count()
self.assertEqual(0, num_conflict) self.assertEqual(0, num_conflict)
def test_wfs_fetch(self): def test_fetch(self):
""" Tests the fetching functionality of ParcelWFSFetcher """ Tests the fetching functionality of ParcelFetcher
+++ Test relies on the availability of the RLP Flurstück WFS +++ +++ Test relies on the availability of the spatial computation component 'Schneider' +++
Returns: Returns:
""" """
fetcher = ParcelWFSFetcher( fetcher = ParcelFetcher(geometry=self.geom_1)
geometry_id=self.geom_1.id, features = fetcher.get_parcels()
) self.assertNotEqual(0, len(features), msg="Spatial fetcher get feature did not work!")
features = fetcher.get_features(
"ave:Flurstueck",
)
self.assertNotEqual(0, len(features), msg="Spatial wfs get feature did not work!")

@ -45,12 +45,14 @@ class Mailer:
auth_password=self.auth_password 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 """ Send a mail if user has no access to the object anymore
Args: Args:
obj_identifier (str): The object identifier obj_identifier (str): The object identifier
obj_title (str): The object title obj_title (str): The object title
user (User): Related user
municipals_names (iterable): List of municipals of the entry
Returns: Returns:
@ -59,6 +61,7 @@ class Mailer:
"user": user, "user": user,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/sharing/shared_access_removed.html", context) msg = render_to_string("email/sharing/shared_access_removed.html", context)
@ -69,11 +72,14 @@ class Mailer:
msg 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 """ Send a mail if user just got access to the object
Args: Args:
obj_identifier (str): The object identifier 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: Returns:
@ -82,6 +88,7 @@ class Mailer:
"user": user, "user": user,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/sharing/shared_access_given.html", context) msg = render_to_string("email/sharing/shared_access_given.html", context)
@ -92,7 +99,7 @@ class Mailer:
msg 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 """ Send a mail if a team just got access to the object
Args: Args:
@ -100,6 +107,7 @@ class Mailer:
obj_title (str): Title of the main object obj_title (str): Title of the main object
team (Team): Team to be notified team (Team): Team to be notified
users_to_notify (QueryDict): Contains the team users which should be notified users_to_notify (QueryDict): Contains the team users which should be notified
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -108,6 +116,7 @@ class Mailer:
"team": team, "team": team,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/sharing/shared_access_given_team.html", context) msg = render_to_string("email/sharing/shared_access_given_team.html", context)
@ -118,7 +127,7 @@ class Mailer:
msg 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 """ Send a mail if a team just lost access to the object
Args: Args:
@ -126,6 +135,7 @@ class Mailer:
obj_title (str): Title of the main object obj_title (str): Title of the main object
team (Team): Team to be notified team (Team): Team to be notified
users_to_notify (QueryDict): Contains the team users which should be notified users_to_notify (QueryDict): Contains the team users which should be notified
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -134,6 +144,7 @@ class Mailer:
"team": team, "team": team,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/sharing/shared_access_removed_team.html", context) msg = render_to_string("email/sharing/shared_access_removed_team.html", context)
@ -144,7 +155,7 @@ class Mailer:
msg 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 """ Send a mail if data has just been unrecorded
Args: Args:
@ -152,6 +163,7 @@ class Mailer:
obj_title (str): Title of the main object obj_title (str): Title of the main object
team (Team): Team to be notified team (Team): Team to be notified
users_to_notify (QueryDict): Contains the team users which should be notified users_to_notify (QueryDict): Contains the team users which should be notified
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -160,6 +172,7 @@ class Mailer:
"team": team, "team": team,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/recording/shared_data_unrecorded_team.html", context) msg = render_to_string("email/recording/shared_data_unrecorded_team.html", context)
@ -170,7 +183,7 @@ class Mailer:
msg 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 """ Send a mail if data has just been recorded
Args: Args:
@ -178,6 +191,7 @@ class Mailer:
obj_title (str): Title of the main object obj_title (str): Title of the main object
team (Team): Team to be notified team (Team): Team to be notified
users_to_notify (QueryDict): Contains the team users which should be notified users_to_notify (QueryDict): Contains the team users which should be notified
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -186,6 +200,7 @@ class Mailer:
"team": team, "team": team,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/recording/shared_data_recorded_team.html", context) msg = render_to_string("email/recording/shared_data_recorded_team.html", context)
@ -196,7 +211,7 @@ class Mailer:
msg 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 """ Send a mail if data has just been checked
Args: Args:
@ -204,6 +219,7 @@ class Mailer:
obj_title (str): Title of the main object obj_title (str): Title of the main object
team (Team): Team to be notified team (Team): Team to be notified
users_to_notify (QueryDict): Contains the team users which should be notified users_to_notify (QueryDict): Contains the team users which should be notified
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -212,6 +228,7 @@ class Mailer:
"team": team, "team": team,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/checking/shared_data_checked_team.html", context) msg = render_to_string("email/checking/shared_data_checked_team.html", context)
@ -249,11 +266,15 @@ class Mailer:
msg 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 """ Send a mail if data has just been deleted
Args: Args:
obj_identifier (str): The object identifier 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: Returns:
@ -262,6 +283,7 @@ class Mailer:
"team": team, "team": team,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/deleting/shared_data_deleted_team.html", context) msg = render_to_string("email/deleting/shared_data_deleted_team.html", context)
@ -272,11 +294,14 @@ class Mailer:
msg 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 """ Send a mail if the user's shared data has just been unrecorded
Args: Args:
obj_identifier (str): The object identifier 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: Returns:
@ -285,6 +310,7 @@ class Mailer:
"user": user, "user": user,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/recording/shared_data_recorded.html", context) msg = render_to_string("email/recording/shared_data_recorded.html", context)
@ -295,11 +321,14 @@ class Mailer:
msg 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 """ Send a mail if the user's shared data has just been unrecorded
Args: Args:
obj_identifier (str): The object identifier 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: Returns:
@ -308,6 +337,7 @@ class Mailer:
"user": user, "user": user,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/recording/shared_data_unrecorded.html", context) msg = render_to_string("email/recording/shared_data_unrecorded.html", context)
@ -318,11 +348,14 @@ class Mailer:
msg 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 """ Send a mail if shared data has just been deleted
Args: Args:
obj_identifier (str): The object identifier 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: Returns:
@ -331,6 +364,7 @@ class Mailer:
"user": user, "user": user,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/deleting/shared_data_deleted.html", context) msg = render_to_string("email/deleting/shared_data_deleted.html", context)
@ -341,11 +375,14 @@ class Mailer:
msg 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 """ Send a mail if shared data just has been checked
Args: Args:
obj_identifier (str): The object identifier 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: Returns:
@ -354,6 +391,7 @@ class Mailer:
"user": user, "user": user,
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"obj_title": obj_title, "obj_title": obj_title,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/checking/shared_data_checked.html", context) msg = render_to_string("email/checking/shared_data_checked.html", context)
@ -413,12 +451,13 @@ class Mailer:
msg 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 """ Send a resubmission mail for a user
Args: Args:
obj_identifier (str): The (resubmitted) object's identifier obj_identifier (str): The (resubmitted) object's identifier
resubmission (Resubmission): The resubmission resubmission (Resubmission): The resubmission
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -426,6 +465,7 @@ class Mailer:
context = { context = {
"obj_identifier": obj_identifier, "obj_identifier": obj_identifier,
"resubmission": resubmission, "resubmission": resubmission,
"municipals_names": municipals_names,
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/resubmission/resubmission.html", context) msg = render_to_string("email/resubmission/resubmission.html", context)

@ -44,9 +44,7 @@ def get_geom_parcels(request: HttpRequest, id: str):
status_code = 200 status_code = 200
if parcels_available or not geometry_exists: if parcels_available or not geometry_exists:
parcels = parcels.order_by("-municipal", "flr", "flrstck_zhlr", "flrstck_nnr") municipals = geom.get_underlying_municipals(parcels)
municipals = parcels.order_by("municipal").distinct("municipal").values("municipal__id")
municipals = Municipal.objects.filter(id__in=municipals)
rpp = 100 rpp = 100
num_all_parcels = parcels.count() num_all_parcels = parcels.count()

@ -35,6 +35,7 @@ def home_view(request: HttpRequest):
template = "konova/home.html" template = "konova/home.html"
now = timezone.now() now = timezone.now()
user = request.user user = request.user
user_teams = user.shared_teams
# Fetch the four newest active and published ServerMessages # Fetch the four newest active and published ServerMessages
msgs = ServerMessage.objects.filter( msgs = ServerMessage.objects.filter(
@ -51,7 +52,7 @@ def home_view(request: HttpRequest):
) )
# Then fetch only user related ones # Then fetch only user related ones
user_interventions = interventions.filter( user_interventions = interventions.filter(
Q(users__in=[user]) | Q(teams__in=user.shared_teams) Q(users__in=[user]) | Q(teams__in=user_teams)
).distinct() ).distinct()
# Repeat for other objects # Repeat for other objects
@ -59,13 +60,13 @@ def home_view(request: HttpRequest):
deleted=None, deleted=None,
) )
user_comps = comps.filter( user_comps = comps.filter(
Q(intervention__users__in=[user]) | Q(intervention__teams__in=user.shared_teams) Q(intervention__users__in=[user]) | Q(intervention__teams__in=user_teams)
).distinct() ).distinct()
eco_accs = EcoAccount.objects.filter( eco_accs = EcoAccount.objects.filter(
deleted=None, deleted=None,
) )
user_ecco_accs = eco_accs.filter( user_ecco_accs = eco_accs.filter(
Q(users__in=[user]) | Q(teams__in=user.shared_teams) Q(users__in=[user]) | Q(teams__in=user_teams)
).distinct() ).distinct()
additional_context = { additional_context = {

Binary file not shown.

@ -9,8 +9,8 @@
#: compensation/forms/modals/payment.py:23 #: compensation/forms/modals/payment.py:23
#: compensation/forms/modals/payment.py:34 #: compensation/forms/modals/payment.py:34
#: compensation/forms/modals/payment.py:50 #: compensation/forms/modals/payment.py:50
#: intervention/forms/intervention.py:55 intervention/forms/intervention.py:175 #: intervention/forms/intervention.py:56 intervention/forms/intervention.py:176
#: intervention/forms/intervention.py:187 #: intervention/forms/intervention.py:188
#: intervention/forms/modals/revocation.py:20 #: intervention/forms/modals/revocation.py:20
#: intervention/forms/modals/revocation.py:33 #: intervention/forms/modals/revocation.py:33
#: intervention/forms/modals/revocation.py:46 #: intervention/forms/modals/revocation.py:46
@ -43,7 +43,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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/templates/compensation/report/eco_account/report.html:16
#: compensation/utils/quality.py:111 ema/templates/ema/detail/view.html:49 #: compensation/utils/quality.py:111 ema/templates/ema/detail/view.html:49
#: ema/templates/ema/report/report.html:16 ema/utils/quality.py:26 #: 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/detail/view.html:56
#: intervention/templates/intervention/report/report.html:37 #: intervention/templates/intervention/report/report.html:37
#: intervention/utils/quality.py:62 konova/filters/mixins/office.py:34 #: intervention/utils/quality.py:62 konova/filters/mixins/office.py:34
@ -85,11 +85,11 @@ msgstr "Eintragungsstelle"
msgid "Select the responsible office" msgid "Select the responsible office"
msgstr "Verantwortliche Stelle" 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 #: compensation/forms/mixins.py:32 compensation/forms/mixins.py:62
#: intervention/forms/intervention.py:65 intervention/forms/intervention.py:82 #: intervention/forms/intervention.py:66 intervention/forms/intervention.py:83
#: intervention/forms/intervention.py:98 intervention/forms/intervention.py:114 #: intervention/forms/intervention.py:99 intervention/forms/intervention.py:115
#: intervention/forms/intervention.py:155 intervention/forms/modals/share.py:41 #: intervention/forms/intervention.py:156 intervention/forms/modals/share.py:41
#: intervention/forms/modals/share.py:55 user/forms/modals/team.py:48 #: intervention/forms/modals/share.py:55 user/forms/modals/team.py:48
#: user/forms/modals/team.py:112 #: user/forms/modals/team.py:112
msgid "Click for selection" msgid "Click for selection"
@ -309,7 +309,7 @@ msgstr ""
" " " "
#: analysis/templates/analysis/reports/includes/intervention/laws.html:14 #: 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/detail/view.html:39
#: intervention/templates/intervention/report/report.html:20 #: intervention/templates/intervention/report/report.html:20
msgid "Law" msgid "Law"
@ -368,7 +368,7 @@ msgstr "Kennung"
msgid "Generated automatically - not editable" msgid "Generated automatically - not editable"
msgstr "Automatisch generiert - nicht bearbeitbar" 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/tables/eco_account.py:28
#: compensation/templates/compensation/detail/compensation/includes/documents.html:28 #: compensation/templates/compensation/detail/compensation/includes/documents.html:28
#: compensation/templates/compensation/detail/compensation/view.html:32 #: 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/tables.py:31 ema/templates/ema/detail/includes/documents.html:28
#: ema/templates/ema/detail/view.html:31 #: ema/templates/ema/detail/view.html:31
#: ema/templates/ema/report/report.html:12 #: 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/compensations.html:33
#: intervention/templates/intervention/detail/includes/documents.html:33 #: intervention/templates/intervention/detail/includes/documents.html:33
#: intervention/templates/intervention/detail/view.html:31 #: intervention/templates/intervention/detail/view.html:31
@ -388,15 +388,15 @@ msgstr "Automatisch generiert - nicht bearbeitbar"
msgid "Title" msgid "Title"
msgstr "Bezeichnung" 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" msgid "An explanatory name"
msgstr "Aussagekräftiger Titel" 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" msgid "Compensation XY; Location ABC"
msgstr "Kompensation XY; Flur 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/compensation_action.py:81
#: compensation/forms/modals/deadline.py:49 #: compensation/forms/modals/deadline.py:49
#: compensation/forms/modals/payment.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/actions.html:34
#: ema/templates/ema/detail/includes/deadlines.html:39 #: ema/templates/ema/detail/includes/deadlines.html:39
#: ema/templates/ema/detail/includes/documents.html:34 #: 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/forms/modals/revocation.py:45
#: intervention/templates/intervention/detail/includes/documents.html:39 #: intervention/templates/intervention/detail/includes/documents.html:39
#: intervention/templates/intervention/detail/includes/payments.html:34 #: intervention/templates/intervention/detail/includes/payments.html:34
@ -420,29 +420,29 @@ msgstr "Kompensation XY; Flur ABC"
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: compensation/forms/compensation.py:57 #: compensation/forms/compensation.py:58
#: compensation/forms/modals/compensation_action.py:83 #: compensation/forms/modals/compensation_action.py:83
#: intervention/forms/intervention.py:201 #: intervention/forms/intervention.py:202
#: konova/forms/modals/resubmission_form.py:37 #: konova/forms/modals/resubmission_form.py:37
msgid "Additional comment" msgid "Additional comment"
msgstr "Zusätzlicher Kommentar" 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/detail/compensation/view.html:36
#: compensation/templates/compensation/report/compensation/report.html:16 #: compensation/templates/compensation/report/compensation/report.html:16
msgid "compensates intervention" msgid "compensates intervention"
msgstr "kompensiert Eingriff" msgstr "kompensiert Eingriff"
#: compensation/forms/compensation.py:86 #: compensation/forms/compensation.py:87
msgid "Select the intervention for which this compensation compensates" msgid "Select the intervention for which this compensation compensates"
msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist" 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 #: compensation/views/compensation/compensation.py:115
msgid "New compensation" msgid "New compensation"
msgstr "Neue Kompensation" msgstr "Neue Kompensation"
#: compensation/forms/compensation.py:189 #: compensation/forms/compensation.py:190
msgid "Edit compensation" msgid "Edit compensation"
msgstr "Bearbeite Kompensation" msgstr "Bearbeite Kompensation"
@ -488,14 +488,14 @@ msgstr ""
#: compensation/templates/compensation/report/eco_account/report.html:20 #: compensation/templates/compensation/report/eco_account/report.html:20
#: compensation/utils/quality.py:113 ema/templates/ema/detail/view.html:53 #: compensation/utils/quality.py:113 ema/templates/ema/detail/view.html:53
#: ema/templates/ema/report/report.html:20 ema/utils/quality.py:28 #: 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/detail/view.html:60
#: intervention/templates/intervention/report/report.html:41 #: intervention/templates/intervention/report/report.html:41
#: intervention/utils/quality.py:55 #: intervention/utils/quality.py:55
msgid "Conservation office file number" msgid "Conservation office file number"
msgstr "Aktenzeichen Eintragungsstelle" 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" msgid "ETS-123/ABC.456"
msgstr "" msgstr ""
@ -511,11 +511,11 @@ msgstr "Zu welcher Kategorie dieser Maßnahmenträger gehört"
msgid "Eco-Account handler detail" msgid "Eco-Account handler detail"
msgstr "Detailangabe zum Maßnahmenträger" 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" msgid "Detail input on the handler"
msgstr "Name der Behörde, Stadt, Firma, ..." 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" msgid "Company Mustermann"
msgstr "Firma Mustermann" msgstr "Firma Mustermann"
@ -1284,7 +1284,7 @@ msgstr "Kompensation {} bearbeitet"
#: compensation/views/compensation/compensation.py:187 #: compensation/views/compensation/compensation.py:187
#: compensation/views/eco_account/eco_account.py:161 ema/views/ema.py:212 #: 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 {}" msgid "Edit {}"
msgstr "Bearbeite {}" msgstr "Bearbeite {}"
@ -1306,7 +1306,7 @@ msgstr "Ökokonto {} hinzugefügt"
msgid "Eco-Account {} edited" msgid "Eco-Account {} edited"
msgstr "Ökokonto {} bearbeitet" msgstr "Ökokonto {} bearbeitet"
#: compensation/views/eco_account/eco_account.py:267 #: compensation/views/eco_account/eco_account.py:268
msgid "Eco-account removed" msgid "Eco-account removed"
msgstr "Ökokonto entfernt" msgstr "Ökokonto entfernt"
@ -1354,70 +1354,70 @@ msgstr "EMA {} bearbeitet"
msgid "EMA removed" msgid "EMA removed"
msgstr "EMA entfernt" msgstr "EMA entfernt"
#: intervention/forms/intervention.py:47 #: intervention/forms/intervention.py:48
msgid "Construction XY; Location ABC" msgid "Construction XY; Location ABC"
msgstr "Bauvorhaben XY; Flur 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/detail/view.html:35
#: intervention/templates/intervention/report/report.html:16 #: intervention/templates/intervention/report/report.html:16
#: intervention/utils/quality.py:95 #: intervention/utils/quality.py:95
msgid "Process type" msgid "Process type"
msgstr "Verfahrenstyp" msgstr "Verfahrenstyp"
#: intervention/forms/intervention.py:72 #: intervention/forms/intervention.py:73
msgid "Multiple selection possible" msgid "Multiple selection possible"
msgstr "Mehrfachauswahl möglich" msgstr "Mehrfachauswahl möglich"
#: intervention/forms/intervention.py:87 #: intervention/forms/intervention.py:88
#: intervention/templates/intervention/detail/view.html:48 #: intervention/templates/intervention/detail/view.html:48
#: intervention/templates/intervention/report/report.html:29 #: intervention/templates/intervention/report/report.html:29
#: intervention/utils/quality.py:59 konova/filters/mixins/office.py:66 #: intervention/utils/quality.py:59 konova/filters/mixins/office.py:66
msgid "Registration office" msgid "Registration office"
msgstr "Zulassungsbehörde" msgstr "Zulassungsbehörde"
#: intervention/forms/intervention.py:119 #: intervention/forms/intervention.py:120
#: intervention/templates/intervention/detail/view.html:52 #: intervention/templates/intervention/detail/view.html:52
#: intervention/templates/intervention/report/report.html:33 #: intervention/templates/intervention/report/report.html:33
#: intervention/utils/quality.py:52 #: intervention/utils/quality.py:52
msgid "Registration office file number" msgid "Registration office file number"
msgstr "Aktenzeichen Zulassungsbehörde" msgstr "Aktenzeichen Zulassungsbehörde"
#: intervention/forms/intervention.py:125 #: intervention/forms/intervention.py:126
msgid "ZB-123/ABC.456" msgid "ZB-123/ABC.456"
msgstr "" msgstr ""
#: intervention/forms/intervention.py:143 #: intervention/forms/intervention.py:144
msgid "Intervention handler type" msgid "Intervention handler type"
msgstr "Art des Eingriffsverursachers" msgstr "Art des Eingriffsverursachers"
#: intervention/forms/intervention.py:145 #: intervention/forms/intervention.py:146
msgid "What type of handler is responsible for the intervention?" msgid "What type of handler is responsible for the intervention?"
msgstr "Zu welcher Kategorie dieser Eingriffsverursacher gehört" msgstr "Zu welcher Kategorie dieser Eingriffsverursacher gehört"
#: intervention/forms/intervention.py:160 #: intervention/forms/intervention.py:161
msgid "Intervention handler detail" msgid "Intervention handler detail"
msgstr "Detailangabe zum Eingriffsverursacher" msgstr "Detailangabe zum Eingriffsverursacher"
#: intervention/forms/intervention.py:174 #: intervention/forms/intervention.py:175
#: intervention/templates/intervention/detail/view.html:101 #: intervention/templates/intervention/detail/view.html:101
#: intervention/templates/intervention/report/report.html:81 #: intervention/templates/intervention/report/report.html:81
#: intervention/utils/quality.py:86 #: intervention/utils/quality.py:86
msgid "Registration date" msgid "Registration date"
msgstr "Datum Zulassung bzw. Satzungsbeschluss" 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/detail/view.html:105
#: intervention/templates/intervention/report/report.html:85 #: intervention/templates/intervention/report/report.html:85
msgid "Binding on" msgid "Binding on"
msgstr "Datum Bestandskraft bzw. Rechtskraft" msgstr "Datum Bestandskraft bzw. Rechtskraft"
#: intervention/forms/intervention.py:212 #: intervention/forms/intervention.py:213
#: intervention/views/intervention.py:100 #: intervention/views/intervention.py:100
msgid "New intervention" msgid "New intervention"
msgstr "Neuer Eingriff" msgstr "Neuer Eingriff"
#: intervention/forms/intervention.py:302 #: intervention/forms/intervention.py:303
msgid "Edit intervention" msgid "Edit intervention"
msgstr "Eingriff bearbeiten" msgstr "Eingriff bearbeiten"
@ -1653,11 +1653,11 @@ msgstr "Eingriffe - Übersicht"
msgid "Intervention {} added" msgid "Intervention {} added"
msgstr "Eingriff {} hinzugefügt" msgstr "Eingriff {} hinzugefügt"
#: intervention/views/intervention.py:218 #: intervention/views/intervention.py:219
msgid "Intervention {} edited" msgid "Intervention {} edited"
msgstr "Eingriff {} bearbeitet" msgstr "Eingriff {} bearbeitet"
#: intervention/views/intervention.py:255 #: intervention/views/intervention.py:256
msgid "{} removed" msgid "{} removed"
msgstr "{} entfernt" msgstr "{} entfernt"
@ -1744,7 +1744,8 @@ msgstr "Verzeichnete anzeigen"
#: konova/filters/mixins/record.py:27 #: konova/filters/mixins/record.py:27
msgid "If activated also shows entries which have been already recorded" 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 #: konova/filters/mixins/self_created.py:23
msgid "Show only self created" msgid "Show only self created"
@ -1752,7 +1753,9 @@ msgstr "Nur selbst erstellte anzeigen"
#: konova/filters/mixins/self_created.py:28 #: konova/filters/mixins/self_created.py:28
msgid "If activated only shows entries which have been created by you" 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 #: konova/filters/mixins/share.py:22
msgid "Show unshared" msgid "Show unshared"
@ -1760,13 +1763,15 @@ msgstr "Nicht freigegebene anzeigen"
#: konova/filters/mixins/share.py:27 #: konova/filters/mixins/share.py:27
msgid "If activated also shows entries which are not shared with you" 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 #: konova/forms/base_form.py:23 templates/form/collapsable/form.html:62
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
#: konova/forms/base_form.py:57 #: konova/forms/base_form.py:72
msgid "Not editable" msgid "Not editable"
msgstr "Nicht editierbar" msgstr "Nicht editierbar"
@ -1822,11 +1827,11 @@ msgstr ""
msgid "Confirm" msgid "Confirm"
msgstr "Bestätige" 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" msgid "Remove"
msgstr "Löschen" msgstr "Löschen"
#: konova/forms/modals/remove_form.py:32 #: konova/forms/modals/remove_form.py:33
msgid "Are you sure?" msgid "Are you sure?"
msgstr "Sind Sie sicher?" msgstr "Sind Sie sicher?"
@ -1976,39 +1981,39 @@ msgstr "In Zwischenablage kopiert"
msgid "Search" msgid "Search"
msgstr "Suchen" 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" msgid "{} - Shared access removed"
msgstr "{} - Zugriff entzogen" 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" msgid "{} - Shared access given"
msgstr "{} - Zugriff freigegeben" 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" msgid "{} - Shared data unrecorded"
msgstr "{} - Freigegebene Daten entzeichnet" 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" msgid "{} - Shared data recorded"
msgstr "{} - Freigegebene Daten verzeichnet" 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" msgid "{} - Shared data checked"
msgstr "{} - Freigegebene Daten geprüft" 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" msgid "{} - Deduction changed"
msgstr "{} - Abbuchung geändert" 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" msgid "{} - Shared data deleted"
msgstr "{} - Freigegebene Daten gelöscht" 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" msgid "Request for new API token"
msgstr "Anfrage für neuen API Token" msgstr "Anfrage für neuen API Token"
#: konova/utils/mailer.py:435 #: konova/utils/mailer.py:474
msgid "Resubmission - {}" msgid "Resubmission - {}"
msgstr "Wiedervorlage - {}" msgstr "Wiedervorlage - {}"
@ -2369,7 +2374,7 @@ msgstr ""
#: templates/email/recording/shared_data_unrecorded.html:20 #: templates/email/recording/shared_data_unrecorded.html:20
#: templates/email/recording/shared_data_unrecorded_team.html:20 #: templates/email/recording/shared_data_unrecorded_team.html:20
#: templates/email/resubmission/resubmission.html:21 #: 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_given_team.html:21
#: templates/email/sharing/shared_access_removed.html:21 #: templates/email/sharing/shared_access_removed.html:21
#: templates/email/sharing/shared_access_removed_team.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 " msgstr "der folgende Datensatz wurde soeben für Sie freigegeben "
#: templates/email/sharing/shared_access_given.html:17 #: 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 #: templates/email/sharing/shared_access_given_team.html:17
msgid "This means you can now edit this dataset." msgid "This means you can now edit this dataset."
msgstr "Das bedeutet, dass Sie diesen Datensatz nun auch bearbeiten können." 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 #: templates/email/sharing/shared_access_given_team.html:18
msgid "" msgid ""
"The shared dataset appears now by default on your overview for this dataset " "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 " "Der freigegebene Datensatz ist nun standardmäßig in Ihrer Übersicht für den "
"Datensatztyp im KSP gelistet." "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 #: templates/email/sharing/shared_access_given_team.html:28
msgid "" msgid ""
"Please note: Shared access on an intervention means you automatically have " "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" "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." msgid "Fields with * are required."
msgstr "* sind Pflichtfelder." msgstr "* sind Pflichtfelder."

@ -14,6 +14,16 @@
<br> <br>
<strong>{{obj_title}}</strong> <strong>{{obj_title}}</strong>
<br> <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.' %} {% trans 'This means, the responsible registration office just confirmed the correctness of this dataset.' %}
<br> <br>
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>{{obj_title}}</strong> <strong>{{obj_title}}</strong>
<br> <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.' %} {% trans 'This means, the responsible registration office just confirmed the correctness of this dataset.' %}
<br> <br>
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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.' %} {% trans 'If this should not have been happened, please contact us. See the signature for details.' %}
<br> <br>
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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.' %} {% trans 'If this should not have been happened, please contact us. See the signature for details.' %}
<br> <br>
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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' %} {% trans 'This means the data is now publicly available, e.g. in LANIS' %}
<br> <br>
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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' %} {% trans 'This means the data is now publicly available, e.g. in LANIS' %}
<br> <br>
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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.' %} {% trans 'This means the data is no longer publicly available.' %}
<br> <br>
<br> <br>

@ -14,6 +14,17 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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.' %} {% trans 'This means the data is no longer publicly available.' %}
<br> <br>
<br> <br>

@ -18,6 +18,16 @@
{% endif %} {% endif %}
<br> <br>
<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' %} {% trans 'Best regards' %}
<br> <br>
KSP KSP

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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 'This means you can now edit this dataset.' %}
{% trans 'The shared dataset appears now by default on your overview for this dataset type.' %} {% trans 'The shared dataset appears now by default on your overview for this dataset type.' %}
<br> <br>

@ -14,6 +14,17 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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 'This means you can now edit this dataset.' %}
{% trans 'The shared dataset appears now by default on your overview for this dataset type.' %} {% trans 'The shared dataset appears now by default on your overview for this dataset type.' %}
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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 '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.' %} {% trans 'Please use the provided search filter on the dataset`s overview pages to find them.' %}
<br> <br>

@ -14,6 +14,16 @@
<br> <br>
<strong>"{{obj_title}}"</strong> <strong>"{{obj_title}}"</strong>
<br> <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 '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.' %} {% trans 'Please use the provided search filter on the dataset`s overview pages to find them.' %}
<br> <br>

@ -31,12 +31,13 @@ class Team(UuidModel, DeletableObjectMixin):
self.deleted = delete_action self.deleted = delete_action
self.save() 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 """ Sends a mail to the team members in case of given shared access
Args: Args:
obj_identifier (): obj_identifier (str): The entry identifier
obj_title (): obj_title (str): The entry title
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -45,14 +46,15 @@ class Team(UuidModel, DeletableObjectMixin):
users_to_notify = self.users.filter( users_to_notify = self.users.filter(
notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_GAINED.value] 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 """ Sends a mail to the team members in case of removed shared access
Args: Args:
obj_identifier (): obj_identifier (str): The entry identifier
obj_title (): obj_title (str): The entry title
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -61,14 +63,15 @@ class Team(UuidModel, DeletableObjectMixin):
users_to_notify = self.users.filter( users_to_notify = self.users.filter(
notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_REMOVED.value] 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 """ Sends a mail to the team members in case of unrecorded data
Args: Args:
obj_identifier (): obj_identifier (str): The entry identifier
obj_title (): obj_title (str): The entry title
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -77,14 +80,15 @@ class Team(UuidModel, DeletableObjectMixin):
users_to_notify = self.users.filter( users_to_notify = self.users.filter(
notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED.value] 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 """ Sends a mail to the team members in case of unrecorded data
Args: Args:
obj_identifier (): obj_identifier (str): The entry identifier
obj_title (): obj_title (str): The entry title
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -93,14 +97,15 @@ class Team(UuidModel, DeletableObjectMixin):
users_to_notify = self.users.filter( users_to_notify = self.users.filter(
notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED.value] 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 """ Sends a mail to the team members in case of checked data
Args: Args:
obj_identifier (): obj_identifier (str): The entry identifier
obj_title (): obj_title (str): The entry title
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -109,7 +114,7 @@ class Team(UuidModel, DeletableObjectMixin):
users_to_notify = self.users.filter( users_to_notify = self.users.filter(
notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_CHECKED.value] 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): 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 """ 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) 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 """ Sends a mail to the team members in case of deleted data
Args: Args:
obj_identifier (): obj_identifier (str): The entry identifier
obj_title (): obj_title (str): The entry title
municipals_names (iterable): List of municipals for this entry
Returns: Returns:
@ -142,7 +148,7 @@ class Team(UuidModel, DeletableObjectMixin):
users_to_notify = self.users.filter( users_to_notify = self.users.filter(
notifications__in=[UserNotificationEnum.NOTIFY_ON_SHARED_DATA_DELETED.value] 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): def remove_user(self, user):
""" Removes a user from the team """ Removes a user from the team

@ -60,12 +60,13 @@ class User(AbstractUser):
name=ETS_GROUP name=ETS_GROUP
).exists() ).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 """ Sends a mail to the user in case of removed shared access
Args: Args:
obj_identifier (): obj_identifier ():
obj_title (): obj_title ():
municipals_names ():
Returns: Returns:
@ -73,13 +74,15 @@ class User(AbstractUser):
notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_REMOVED) notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_REMOVED)
if notification_set: if notification_set:
mailer = Mailer() 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 """ Sends a mail to the user in case of given shared access
Args: 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: Returns:
@ -87,13 +90,15 @@ class User(AbstractUser):
notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_GAINED) notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_GAINED)
if notification_set: if notification_set:
mailer = Mailer() 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 """ Sends a mail to the user in case of shared data has been recorded
Args: 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: Returns:
@ -101,13 +106,15 @@ class User(AbstractUser):
notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED) notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED)
if notification_set: if notification_set:
mailer = Mailer() 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 """ Sends a mail to the user in case of shared data has been unrecorded
Args: 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: Returns:
@ -115,13 +122,15 @@ class User(AbstractUser):
notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED) notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_RECORDED)
if notification_set: if notification_set:
mailer = Mailer() 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 """ Sends a mail to the user in case of shared data has been deleted
Args: 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: Returns:
@ -129,13 +138,15 @@ class User(AbstractUser):
notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_DELETED) notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_DELETED)
if notification_set: if notification_set:
mailer = Mailer() 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 """ Sends a mail to the user in case of shared data has been deleted
Args: 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: Returns:
@ -143,7 +154,7 @@ class User(AbstractUser):
notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_CHECKED) notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_DATA_CHECKED)
if notification_set: if notification_set:
mailer = Mailer() 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): def send_mail_deduction_changed(self, obj_identifier, obj_title, data_changes):
""" Sends a mail to the user in case of a changed deduction """ Sends a mail to the user in case of a changed deduction

Loading…
Cancel
Save