diff --git a/compensation/forms/forms.py b/compensation/forms/forms.py index 52575d32..212efa63 100644 --- a/compensation/forms/forms.py +++ b/compensation/forms/forms.py @@ -115,7 +115,33 @@ class CompensationResponsibleFormMixin(forms.Form): ) -class NewCompensationForm(AbstractCompensationForm): +class CEFCompensationFormMixin(forms.Form): + """ A form mixin, providing CEF compensation field + + """ + is_cef = forms.BooleanField( + label_suffix="", + label=_("Is CEF"), + help_text=_("Optionally: Whether this compensation is a CEF compensation?"), + required=False, + widget=forms.CheckboxInput() + ) + + +class CoherenceCompensationFormMixin(forms.Form): + """ A form mixin, providing coherence compensation field + + """ + is_coherence_keeping = forms.BooleanField( + label_suffix="", + label=_("Is coherence keeping"), + help_text=_("Optionally: Whether this compensation is a coherence keeping compensation?"), + required=False, + widget=forms.CheckboxInput() + ) + + +class NewCompensationForm(AbstractCompensationForm, CEFCompensationFormMixin, CoherenceCompensationFormMixin): """ Form for creating new compensations. Can be initialized with an intervention id for preselecting the related intervention. @@ -146,6 +172,8 @@ class NewCompensationForm(AbstractCompensationForm): "identifier", "title", "intervention", + "is_cef", + "is_coherence_keeping", "comment", ] @@ -177,6 +205,8 @@ class NewCompensationForm(AbstractCompensationForm): identifier = self.cleaned_data.get("identifier", None) title = self.cleaned_data.get("title", None) intervention = self.cleaned_data.get("intervention", None) + is_cef = self.cleaned_data.get("is_cef", None) + is_coherence_keeping = self.cleaned_data.get("is_coherence_keeping", None) comment = self.cleaned_data.get("comment", None) # Create log entry @@ -193,6 +223,8 @@ class NewCompensationForm(AbstractCompensationForm): title=title, intervention=intervention, created=action, + is_cef=is_cef, + is_coherence_keeping=is_coherence_keeping, geometry=geometry, comment=comment, ) @@ -217,6 +249,8 @@ class EditCompensationForm(NewCompensationForm): "identifier": self.instance.identifier, "title": self.instance.title, "intervention": self.instance.intervention, + "is_cef": self.instance.is_cef, + "is_coherence_keeping": self.instance.is_coherence_keeping, "comment": self.instance.comment, } disabled_fields = [] @@ -231,6 +265,8 @@ class EditCompensationForm(NewCompensationForm): identifier = self.cleaned_data.get("identifier", None) title = self.cleaned_data.get("title", None) intervention = self.cleaned_data.get("intervention", None) + is_cef = self.cleaned_data.get("is_cef", None) + is_coherence_keeping = self.cleaned_data.get("is_coherence_keeping", None) comment = self.cleaned_data.get("comment", None) # Create log entry @@ -247,6 +283,8 @@ class EditCompensationForm(NewCompensationForm): self.instance.title = title self.instance.intervention = intervention self.instance.geometry = geometry + self.instance.is_cef = is_cef + self.instance.is_coherence_keeping = is_coherence_keeping self.instance.comment = comment self.instance.modified = action self.instance.save() diff --git a/compensation/models.py b/compensation/models.py index 15aa30e6..a0cf80de 100644 --- a/compensation/models.py +++ b/compensation/models.py @@ -32,8 +32,7 @@ class Payment(BaseResource): """ amount = models.FloatField(validators=[MinValueValidator(limit_value=0.00)]) due_on = models.DateField(null=True, blank=True) - comment = models.CharField( - max_length=1000, + comment = models.TextField( null=True, blank=True, help_text="Refers to german money transfer 'Verwendungszweck'", @@ -190,7 +189,37 @@ class AbstractCompensation(BaseObject): return checker -class Compensation(AbstractCompensation): +class CEFMixin(models.Model): + """ Provides CEF flag as Mixin + + """ + is_cef = models.BooleanField( + blank=True, + null=True, + default=False, + help_text="Flag if compensation is a 'CEF-Maßnahme'" + ) + + class Meta: + abstract = True + + +class CoherenceMixin(models.Model): + """ Provides coherence keeping flag as Mixin + + """ + is_coherence_keeping = models.BooleanField( + blank=True, + null=True, + default=False, + help_text="Flag if compensation is a 'Kohärenzsicherung'" + ) + + class Meta: + abstract = True + + +class Compensation(AbstractCompensation, CEFMixin, CoherenceMixin): """ Regular compensation, linked to an intervention """ diff --git a/compensation/templates/compensation/detail/compensation/view.html b/compensation/templates/compensation/detail/compensation/view.html index 2adcd02e..581bf799 100644 --- a/compensation/templates/compensation/detail/compensation/view.html +++ b/compensation/templates/compensation/detail/compensation/view.html @@ -1,5 +1,5 @@ {% extends 'base.html' %} -{% load i18n l10n static fontawesome_5 humanize %} +{% load i18n l10n static fontawesome_5 humanize ksp_filters %} {% block head %} {% comment %} @@ -38,6 +38,26 @@ + + {% trans 'Is CEF compensation' %} + + {% if obj.is_cef %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + + + {% trans 'Is Coherence keeping compensation' %} + + {% if obj.is_coherence_keeping %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + {% trans 'Checked' %} diff --git a/compensation/templates/compensation/report/compensation/report.html b/compensation/templates/compensation/report/compensation/report.html index 74d67a58..711ce16d 100644 --- a/compensation/templates/compensation/report/compensation/report.html +++ b/compensation/templates/compensation/report/compensation/report.html @@ -16,7 +16,7 @@ {% trans 'compensates intervention' %} - {{obj.intervention.identifier}} + {{obj.intervention.identifier}} - {{obj.intervention.title}} diff --git a/compensation/templates/compensation/report/eco_account/report.html b/compensation/templates/compensation/report/eco_account/report.html index ff47772d..e71670a1 100644 --- a/compensation/templates/compensation/report/eco_account/report.html +++ b/compensation/templates/compensation/report/eco_account/report.html @@ -29,7 +29,7 @@ {% for deduction in deductions %} - {{deduction.intervention__identifier}} + {{deduction.intervention__identifier}} - {{deduction.intervention__title}}
{% empty %} diff --git a/compensation/views/eco_account_views.py b/compensation/views/eco_account_views.py index e9934d44..521963fc 100644 --- a/compensation/views/eco_account_views.py +++ b/compensation/views/eco_account_views.py @@ -570,7 +570,7 @@ def report_view(request:HttpRequest, id: str): deductions = acc.deductions.all()\ .distinct("intervention")\ .select_related("intervention")\ - .values_list("intervention__id", "intervention__identifier", named=True) + .values_list("intervention__id", "intervention__identifier", "intervention__title", named=True) context = { "obj": acc, diff --git a/intervention/forms/modalForms.py b/intervention/forms/modalForms.py index fe24efa9..fb6ee083 100644 --- a/intervention/forms/modalForms.py +++ b/intervention/forms/modalForms.py @@ -16,10 +16,9 @@ from compensation.models import EcoAccount, EcoAccountDeduction from intervention.inputs import TextToClipboardInput from intervention.models import Revocation, RevocationDocument, Intervention from konova.forms import BaseModalForm -from konova.settings import ZB_GROUP, ETS_GROUP from konova.utils.general import format_german_float from konova.utils.messenger import Messenger -from konova.utils.user_checks import in_group +from konova.utils.user_checks import is_default_group_only from user.models import UserActionLogEntry, UserAction @@ -36,6 +35,21 @@ class ShareInterventionModalForm(BaseModalForm): } ) ) + user_select = forms.ModelMultipleChoiceField( + label=_("Add user to share with"), + label_suffix="", + help_text=_("Multiple selection possible - You can only select users which do not already have access"), + required=False, + queryset=User.objects.all(), + widget=autocomplete.ModelSelect2Multiple( + url="share-user-autocomplete", + attrs={ + "data-placeholder": _("Click for selection"), + "data-minimum-input-length": 3, + }, + forward=["users"] + ), + ) users = forms.MultipleChoiceField( label=_("Shared with"), label_suffix="", @@ -78,28 +92,39 @@ class ShareInterventionModalForm(BaseModalForm): ) # Initialize users field - # Remove field if user is not in registration or conservation group - if not in_group(self.request.user, ZB_GROUP) and not in_group(self.request.user, ETS_GROUP): - del self.fields["users"] - else: - users = self.instance.users.all() - choices = [] - for n in users: - choices.append( - (n.id, n.username) - ) - self.fields["users"].choices = choices - u_ids = list(users.values_list("id", flat=True)) - self.initialize_form_field( - "users", - u_ids + # Disable field if user is not in registration or conservation group + if is_default_group_only(self.request.user): + self.disable_form_field("users") + + self._add_user_choices_to_field() + + def _add_user_choices_to_field(self): + """ Transforms the instance's sharing users into a list for the form field + + Returns: + + """ + users = self.instance.users.all() + choices = [] + for n in users: + choices.append( + (n.id, n.username) ) + self.fields["users"].choices = choices + u_ids = list(users.values_list("id", flat=True)) + self.initialize_form_field( + "users", + u_ids + ) def save(self): - accessing_users = User.objects.filter( - id__in=self.cleaned_data["users"] + still_accessing_users = self.cleaned_data["users"] + new_accessing_users = list(self.cleaned_data["user_select"].values_list("id", flat=True)) + accessing_users = still_accessing_users + new_accessing_users + users = User.objects.filter( + id__in=accessing_users ) - self.instance.share_with_list(accessing_users) + self.instance.share_with_list(users) class NewRevocationModalForm(BaseModalForm): @@ -162,14 +187,13 @@ class NewRevocationModalForm(BaseModalForm): ) revocation = Revocation.objects.create( date=self.cleaned_data["date"], + legal=self.instance.legal, comment=self.cleaned_data["comment"], created=created_action, ) self.instance.modified = edited_action self.instance.save() self.instance.log.add(edited_action) - self.instance.legal.revocation = revocation - self.instance.legal.save() if self.cleaned_data["file"]: RevocationDocument.objects.create( diff --git a/intervention/models.py b/intervention/models.py index 47d3a585..6043e422 100644 --- a/intervention/models.py +++ b/intervention/models.py @@ -68,6 +68,7 @@ class Revocation(BaseResource): Holds revocation data e.g. for intervention objects """ date = models.DateField(null=True, blank=True, help_text="Revocation from") + legal = models.ForeignKey("LegalData", null=False, blank=False, on_delete=models.CASCADE, help_text="Refers to 'Widerspruch am'", related_name="revocations") comment = models.TextField(null=True, blank=True) def delete(self, *args, **kwargs): @@ -99,7 +100,7 @@ class RevocationDocument(AbstractDocument): Returns: intervention (Intervention) """ - return self.instance.legaldata.intervention + return self.instance.legal.intervention def delete(self, *args, **kwargs): """ @@ -118,13 +119,14 @@ class RevocationDocument(AbstractDocument): # Remove the file itself super().delete(*args, **kwargs) - # Always remove 'revocation' folder + # Always remove 'revocation' folder if the one revocation we just processed is the only one left folder_path = self.file.path.split("/") - try: - shutil.rmtree("/".join(folder_path[:-1])) - except FileNotFoundError: - # Revocation subfolder seems to be missing already - pass + if revoc_docs.count() == 0: + try: + shutil.rmtree("/".join(folder_path[:-1])) + except FileNotFoundError: + # Revocation subfolder seems to be missing already + pass if other_intervention_docs.count() == 0: # If there are no further documents for the intervention, we can simply remove the whole folder as well! @@ -167,8 +169,6 @@ class LegalData(UuidModel): } ) - revocation = models.OneToOneField(Revocation, null=True, blank=True, help_text="Refers to 'Widerspruch am'", on_delete=models.SET_NULL) - class Intervention(BaseObject, ShareableObject, RecordableObject, CheckableObject): """ @@ -277,7 +277,7 @@ class Intervention(BaseObject, ShareableObject, RecordableObject, CheckableObjec regular_docs (QuerySet): The queryset of regular other documents """ revoc_docs = RevocationDocument.objects.filter( - instance=self.legal.revocation + instance__in=self.legal.revocations.all() ) regular_docs = InterventionDocument.objects.filter( instance=self @@ -366,6 +366,7 @@ class InterventionDocument(AbstractDocument): if folder_path is not None: try: shutil.rmtree(folder_path) + pass except FileNotFoundError: # Folder seems to be missing already... pass diff --git a/intervention/templates/intervention/detail/includes/revocation.html b/intervention/templates/intervention/detail/includes/revocation.html index c9d821ff..cc3e7b3e 100644 --- a/intervention/templates/intervention/detail/includes/revocation.html +++ b/intervention/templates/intervention/detail/includes/revocation.html @@ -4,8 +4,8 @@
- {% if obj.legal.revocation %}1{% else %}0{% endif %} - {% trans 'Revocation' %} + {{obj.legal.revocations.count}} + {% trans 'Revocations' %}
@@ -44,30 +44,28 @@ - {% if obj.legal.revocation %} - {% with obj.legal.revocation as rev %} - - - {{ rev.date }} - - - {% if rev.document %} - - {% trans 'Revocation' %} - - {% endif %} - - {{ rev.comment }} - - {% if is_default_member and has_access %} - - {% endif %} - - - {% endwith %} - {% endif %} + {% for rev in obj.legal.revocations.all %} + + + {{ rev.date }} + + + {% if rev.document %} + + {% trans 'Revocation' %} + + {% endif %} + + {{ rev.comment }} + + {% if is_default_member and has_access %} + + {% endif %} + + + {% endfor %}
diff --git a/intervention/templates/intervention/detail/view.html b/intervention/templates/intervention/detail/view.html index e3d919f3..408b3939 100644 --- a/intervention/templates/intervention/detail/view.html +++ b/intervention/templates/intervention/detail/view.html @@ -99,9 +99,9 @@ {% trans 'Binding on' %} {{obj.legal.binding_date|default_if_none:""}} - - {% trans 'Revocation' %} - {{obj.legal.revocation.date|naturalday|default_if_none:""}} + + {% trans 'Revocations' %} + {{obj.legal.revocations.count}} {% trans 'Last modified' %} diff --git a/intervention/templates/intervention/report/report.html b/intervention/templates/intervention/report/report.html index cf422042..25e6aac6 100644 --- a/intervention/templates/intervention/report/report.html +++ b/intervention/templates/intervention/report/report.html @@ -50,7 +50,7 @@ {% for comp in obj.compensations.all %} - {{comp.identifier}} + {{comp.identifier}} - {{comp.title}}
{% empty %} @@ -63,7 +63,7 @@ {% for deduction in deductions %} - {{deduction.account.identifier}} + {{deduction.account.identifier}} - {{deduction.account.title}}
{% endfor %} diff --git a/intervention/utils/quality.py b/intervention/utils/quality.py index 7896000d..b4717b18 100644 --- a/intervention/utils/quality.py +++ b/intervention/utils/quality.py @@ -66,8 +66,8 @@ class InterventionQualityChecker(AbstractQualityChecker): try: legal = self.obj.legal # Check for a revocation - if legal.revocation: - self.messages.append(_("Revocation exists")) + if legal.revocations.exists(): + self.messages.append(_("Revocations exists")) if legal.registration_date is None: self._add_missing_attr_name(_("Registration date")) diff --git a/intervention/views.py b/intervention/views.py index a535d753..c2a87d6e 100644 --- a/intervention/views.py +++ b/intervention/views.py @@ -11,7 +11,6 @@ from intervention.tables import InterventionTable from konova.contexts import BaseContext from konova.decorators import * from konova.forms import SimpleGeomForm, NewDocumentForm, RemoveModalForm, RecordModalForm -from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT from konova.utils.documents import remove_document, get_document from konova.utils.generators import generate_qr_code from konova.utils.message_templates import INTERVENTION_INVALID, FORM_INVALID, IDENTIFIER_REPLACED, \ @@ -147,7 +146,7 @@ def get_revocation_view(request: HttpRequest, doc_id: str): """ doc = get_object_or_404(RevocationDocument, id=doc_id) # File download only possible if related instance is shared with user - if not doc.instance.users.filter(id=request.user.id): + if not doc.instance.legal.intervention.users.filter(id=request.user.id): messages.info( request, DATA_UNSHARED @@ -238,10 +237,10 @@ def detail_view(request: HttpRequest, id: str): ) # Inform user about revocation - if intervention.legal.revocation: + if intervention.legal.revocations.exists(): messages.error( request, - _("This intervention has a revocation from {}").format(intervention.legal.revocation.date.strftime(DEFAULT_DATE_FORMAT)), + _("This intervention has {} revocations").format(intervention.legal.revocations.count()), extra_tags="danger", ) @@ -403,7 +402,7 @@ def create_share_view(request: HttpRequest, id: str): """ intervention = get_object_or_404(Intervention, id=id) - form = ShareInterventionModalForm(request.POST or None, instance=intervention, request=request) + form = ShareInterventionModalForm(request.POST or None, instance=intervention, request=request, user=request.user) return form.process_request( request, msg_success=_("Share settings updated") diff --git a/konova/autocompletes.py b/konova/autocompletes.py index 36e585bd..f0fb0fe0 100644 --- a/konova/autocompletes.py +++ b/konova/autocompletes.py @@ -6,6 +6,7 @@ Created on: 07.12.20 """ from dal_select2.views import Select2QuerySetView +from django.contrib.auth.models import User from django.db.models import Q from codelist.models import KonovaCode @@ -60,6 +61,29 @@ class InterventionAutocomplete(Select2QuerySetView): return qs +class ShareUserAutocomplete(Select2QuerySetView): + """ Autocomplete for intervention entries + + Only returns entries that are accessible for the requesting user + + """ + def get_queryset(self): + if self.request.user.is_anonymous: + return User.objects.none() + exclude_user_ids = self.forwarded.get("users", [None]) + _exclude = {"id__in": exclude_user_ids} + qs = User.objects.all().exclude( + **_exclude + ).order_by( + "username" + ) + if self.q: + qs = qs.filter( + username__istartswith=self.q + ) + return qs + + class KonovaCodeAutocomplete(Select2QuerySetView): """ Provides simple autocomplete functionality for codes diff --git a/konova/models.py b/konova/models.py index cc836a20..7dbe4f73 100644 --- a/konova/models.py +++ b/konova/models.py @@ -241,7 +241,7 @@ class Deadline(BaseResource): type = models.CharField(max_length=255, null=True, blank=True, choices=DeadlineType.choices) date = models.DateField(null=True, blank=True) - comment = models.CharField(max_length=1000, null=True, blank=True) + comment = models.TextField(null=True, blank=True) def __str__(self): return self.type diff --git a/konova/static/css/konova.css b/konova/static/css/konova.css index 6de1f8f8..294287ea 100644 --- a/konova/static/css/konova.css +++ b/konova/static/css/konova.css @@ -186,12 +186,15 @@ Overwrites bootstrap .btn:focus box shadow color background-color: var(--rlp-gray-light); } -.check-star{ +.check-star, .c-goldenrod{ color: goldenrod; } -.registered-bookmark{ +.registered-bookmark, .c-green{ color: green; } +.c-red{ + color: red; +} /* PAGINATION */ .page-item > .page-link{ diff --git a/konova/templatetags/ksp_filters.py b/konova/templatetags/ksp_filters.py index 1472d503..f311a538 100644 --- a/konova/templatetags/ksp_filters.py +++ b/konova/templatetags/ksp_filters.py @@ -8,6 +8,8 @@ Created on: 05.07.21 from django import template # Create custom library +from django.utils.html import format_html + from news.models import ServerMessageImportance register = template.Library() diff --git a/konova/urls.py b/konova/urls.py index 820de41b..1954d298 100644 --- a/konova/urls.py +++ b/konova/urls.py @@ -19,7 +19,8 @@ from django.urls import path, include from konova.autocompletes import EcoAccountAutocomplete, \ InterventionAutocomplete, CompensationActionCodeAutocomplete, BiotopeCodeAutocomplete, LawCodeAutocomplete, \ - RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete + RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete, \ + ShareUserAutocomplete from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG from konova.sso.sso import KonovaSSOClient from konova.views import logout_view, home_view, remove_deadline_view @@ -50,6 +51,7 @@ urlpatterns = [ path("atcmplt/codes/prc-type", ProcessTypeCodeAutocomplete.as_view(), name="codes-process-type-autocomplete"), path("atcmplt/codes/reg-off", RegistrationOfficeCodeAutocomplete.as_view(), name="codes-registration-office-autocomplete"), path("atcmplt/codes/cons-off", ConservationOfficeCodeAutocomplete.as_view(), name="codes-conservation-office-autocomplete"), + path("atcmplt/share/u", ShareUserAutocomplete.as_view(), name="share-user-autocomplete"), ] if DEBUG: diff --git a/konova/utils/user_checks.py b/konova/utils/user_checks.py index d6b688b4..a01dadbe 100644 --- a/konova/utils/user_checks.py +++ b/konova/utils/user_checks.py @@ -7,6 +7,8 @@ Created on: 02.07.21 """ from django.contrib.auth.models import User +from konova.settings import ETS_GROUP, ZB_GROUP + def in_group(user: User, group: str) -> bool: """ Checks if the user is part of a group @@ -21,3 +23,15 @@ def in_group(user: User, group: str) -> bool: return user.groups.filter( name=group ) + + +def is_default_group_only(user: User) -> bool: + """ Checks if the user is only part of the default group + + Args: + user (User): The user object + + Returns: + bool + """ + return not in_group(user, ZB_GROUP) and not in_group(user, ETS_GROUP) \ No newline at end of file diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index e4d126ba..19aafdf1 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index f850b346..388a9b86 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ #: intervention/filters.py:26 intervention/filters.py:40 #: intervention/filters.py:47 intervention/filters.py:48 #: intervention/forms/forms.py:53 intervention/forms/forms.py:155 -#: intervention/forms/forms.py:167 intervention/forms/modalForms.py:107 -#: intervention/forms/modalForms.py:120 intervention/forms/modalForms.py:133 +#: intervention/forms/forms.py:167 intervention/forms/modalForms.py:133 +#: intervention/forms/modalForms.py:146 intervention/forms/modalForms.py:159 #: konova/forms.py:142 konova/forms.py:247 konova/forms.py:313 #: konova/forms.py:340 konova/forms.py:350 konova/forms.py:363 #: konova/forms.py:375 konova/forms.py:396 user/forms.py:38 @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-25 17:10+0200\n" +"POT-Creation-Date: 2021-11-15 15:48+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -37,7 +37,7 @@ msgstr "Vom" msgid "To" msgstr "Bis" -#: analysis/forms.py:47 compensation/forms/forms.py:93 +#: analysis/forms.py:47 compensation/forms/forms.py:76 #: compensation/templates/compensation/detail/eco_account/view.html:58 #: compensation/templates/compensation/report/eco_account/report.html:16 #: compensation/utils/quality.py:100 ema/templates/ema/detail/view.html:42 @@ -49,14 +49,14 @@ msgstr "Bis" msgid "Conservation office" msgstr "Eintragungsstelle" -#: analysis/forms.py:49 compensation/forms/forms.py:95 +#: analysis/forms.py:49 compensation/forms/forms.py:78 msgid "Select the responsible office" msgstr "Verantwortliche Stelle" -#: analysis/forms.py:58 compensation/forms/forms.py:67 -#: compensation/forms/forms.py:104 compensation/forms/forms.py:155 -#: intervention/forms/forms.py:63 intervention/forms/forms.py:80 -#: intervention/forms/forms.py:96 intervention/forms/forms.py:112 +#: analysis/forms.py:58 compensation/forms/forms.py:87 +#: compensation/forms/forms.py:164 intervention/forms/forms.py:63 +#: intervention/forms/forms.py:80 intervention/forms/forms.py:96 +#: intervention/forms/forms.py:112 intervention/forms/modalForms.py:47 msgid "Click for selection" msgstr "Auswählen..." @@ -130,7 +130,7 @@ msgstr "Zuständigkeitsbereich" #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:8 #: analysis/templates/analysis/reports/includes/intervention/laws.html:17 #: compensation/tables.py:35 -#: compensation/templates/compensation/detail/compensation/view.html:43 +#: compensation/templates/compensation/detail/compensation/view.html:63 #: intervention/tables.py:33 #: intervention/templates/intervention/detail/view.html:68 user/models.py:48 msgid "Checked" @@ -145,7 +145,7 @@ msgstr "Geprüft" #: analysis/templates/analysis/reports/includes/intervention/laws.html:20 #: analysis/templates/analysis/reports/includes/old_data/amount.html:18 #: compensation/tables.py:41 compensation/tables.py:181 -#: compensation/templates/compensation/detail/compensation/view.html:57 +#: compensation/templates/compensation/detail/compensation/view.html:77 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:31 #: compensation/templates/compensation/detail/eco_account/view.html:44 #: ema/tables.py:38 ema/templates/ema/detail/view.html:28 @@ -210,7 +210,7 @@ msgstr "Abbuchungen" #: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36 #: ema/templates/ema/detail/includes/states-after.html:36 #: ema/templates/ema/detail/includes/states-before.html:36 -#: intervention/forms/modalForms.py:282 +#: intervention/forms/modalForms.py:301 msgid "Surface" msgstr "Fläche" @@ -273,7 +273,7 @@ msgid "Type" msgstr "Typ" #: analysis/templates/analysis/reports/includes/old_data/amount.html:24 -#: intervention/forms/modalForms.py:293 intervention/forms/modalForms.py:300 +#: intervention/forms/modalForms.py:312 intervention/forms/modalForms.py:319 #: intervention/tables.py:88 #: intervention/templates/intervention/detail/view.html:19 #: konova/templates/konova/home.html:11 templates/navbars/navbar.html:22 @@ -283,7 +283,7 @@ msgstr "Eingriff" #: analysis/templates/analysis/reports/includes/old_data/amount.html:34 #: compensation/tables.py:224 #: compensation/templates/compensation/detail/eco_account/view.html:19 -#: intervention/forms/modalForms.py:266 intervention/forms/modalForms.py:273 +#: intervention/forms/modalForms.py:285 intervention/forms/modalForms.py:292 #: konova/templates/konova/home.html:88 templates/navbars/navbar.html:34 msgid "Eco-account" msgstr "Ökokonto" @@ -335,19 +335,11 @@ msgstr "Bezeichnung" msgid "An explanatory name" msgstr "Aussagekräftiger Titel" -#: compensation/forms/forms.py:49 ema/forms.py:47 ema/forms.py:105 +#: compensation/forms/forms.py:49 ema/forms.py:49 ema/forms.py:105 msgid "Compensation XY; Location ABC" msgstr "Kompensation XY; Flur ABC" -#: compensation/forms/forms.py:55 -msgid "Fundings" -msgstr "Förderungen" - -#: compensation/forms/forms.py:58 -msgid "Select fundings for this compensation" -msgstr "Wählen Sie ggf. Fördermittelprojekte" - -#: compensation/forms/forms.py:73 compensation/forms/modalForms.py:61 +#: compensation/forms/forms.py:56 compensation/forms/modalForms.py:61 #: compensation/forms/modalForms.py:272 compensation/forms/modalForms.py:367 #: compensation/templates/compensation/detail/compensation/includes/actions.html:34 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34 @@ -358,7 +350,7 @@ msgstr "Wählen Sie ggf. Fördermittelprojekte" #: ema/templates/ema/detail/includes/actions.html:34 #: ema/templates/ema/detail/includes/deadlines.html:34 #: ema/templates/ema/detail/includes/documents.html:31 -#: intervention/forms/forms.py:179 intervention/forms/modalForms.py:132 +#: intervention/forms/forms.py:179 intervention/forms/modalForms.py:158 #: intervention/templates/intervention/detail/includes/documents.html:31 #: intervention/templates/intervention/detail/includes/payments.html:34 #: intervention/templates/intervention/detail/includes/revocation.html:38 @@ -366,11 +358,11 @@ msgstr "Wählen Sie ggf. Fördermittelprojekte" msgid "Comment" msgstr "Kommentar" -#: compensation/forms/forms.py:75 intervention/forms/forms.py:181 +#: compensation/forms/forms.py:58 intervention/forms/forms.py:181 msgid "Additional comment" msgstr "Zusätzlicher Kommentar" -#: compensation/forms/forms.py:109 +#: compensation/forms/forms.py:92 #: compensation/templates/compensation/detail/eco_account/view.html:62 #: compensation/templates/compensation/report/eco_account/report.html:20 #: compensation/utils/quality.py:102 ema/templates/ema/detail/view.html:46 @@ -382,67 +374,85 @@ msgstr "Zusätzlicher Kommentar" msgid "Conservation office file number" msgstr "Aktenzeichen Eintragungsstelle" -#: compensation/forms/forms.py:115 intervention/forms/forms.py:135 +#: compensation/forms/forms.py:98 intervention/forms/forms.py:135 msgid "ETS-123/ABC.456" msgstr "" -#: compensation/forms/forms.py:121 +#: compensation/forms/forms.py:104 msgid "Eco-account handler" msgstr "Maßnahmenträger" -#: compensation/forms/forms.py:125 +#: compensation/forms/forms.py:108 msgid "Who handles the eco-account" msgstr "Wer für die Herrichtung des Ökokontos verantwortlich ist" -#: compensation/forms/forms.py:128 intervention/forms/forms.py:148 +#: compensation/forms/forms.py:111 intervention/forms/forms.py:148 msgid "Company Mustermann" msgstr "Firma Mustermann" -#: compensation/forms/forms.py:146 +#: compensation/forms/forms.py:124 +msgid "Is CEF" +msgstr "Ist CEF-Maßnahme" + +#: compensation/forms/forms.py:125 +msgid "Optionally: Whether this compensation is a CEF compensation?" +msgstr "Optional: Handelt es sich um eine CEF-Maßnahme?" + +#: compensation/forms/forms.py:137 +msgid "Is coherence keeping" +msgstr "Ist Kohärenzsicherungsmaßnahme" + +#: compensation/forms/forms.py:138 +msgid "" +"Optionally: Whether this compensation is a coherence keeping compensation?" +msgstr "" +"Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?" + +#: compensation/forms/forms.py:155 #: compensation/templates/compensation/detail/compensation/view.html:35 #: compensation/templates/compensation/report/compensation/report.html:16 msgid "compensates intervention" msgstr "kompensiert Eingriff" -#: compensation/forms/forms.py:148 +#: compensation/forms/forms.py:157 msgid "Select the intervention for which this compensation compensates" msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist" -#: compensation/forms/forms.py:173 +#: compensation/forms/forms.py:183 msgid "New compensation" msgstr "Neue Kompensation" -#: compensation/forms/forms.py:231 +#: compensation/forms/forms.py:243 msgid "Edit compensation" msgstr "Bearbeite Kompensation" -#: compensation/forms/forms.py:290 compensation/utils/quality.py:84 +#: compensation/forms/forms.py:305 compensation/utils/quality.py:84 msgid "Available Surface" msgstr "Verfügbare Fläche" -#: compensation/forms/forms.py:293 +#: compensation/forms/forms.py:308 msgid "The amount that can be used for deductions" msgstr "Die für Abbuchungen zur Verfügung stehende Menge" -#: compensation/forms/forms.py:302 +#: compensation/forms/forms.py:317 #: compensation/templates/compensation/detail/eco_account/view.html:66 #: compensation/utils/quality.py:72 msgid "Agreement date" msgstr "Vereinbarungsdatum" -#: compensation/forms/forms.py:304 +#: compensation/forms/forms.py:319 msgid "When did the parties agree on this?" msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?" -#: compensation/forms/forms.py:329 +#: compensation/forms/forms.py:343 msgid "New Eco-Account" msgstr "Neues Ökokonto" -#: compensation/forms/forms.py:338 +#: compensation/forms/forms.py:352 msgid "Eco-Account XY; Location ABC" msgstr "Ökokonto XY; Flur ABC" -#: compensation/forms/forms.py:397 +#: compensation/forms/forms.py:409 msgid "Edit Eco-Account" msgstr "Ökokonto bearbeiten" @@ -460,7 +470,7 @@ msgid "Due on which date" msgstr "Zahlung wird an diesem Datum erwartet" #: compensation/forms/modalForms.py:63 compensation/forms/modalForms.py:274 -#: compensation/forms/modalForms.py:369 intervention/forms/modalForms.py:134 +#: compensation/forms/modalForms.py:369 intervention/forms/modalForms.py:160 #: konova/forms.py:376 msgid "Additional comment, maximum {} letters" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" @@ -485,7 +495,7 @@ msgstr "Biotoptyp" msgid "Select the biotope type" msgstr "Biotoptyp wählen" -#: compensation/forms/modalForms.py:155 intervention/forms/modalForms.py:284 +#: compensation/forms/modalForms.py:155 intervention/forms/modalForms.py:303 msgid "in m²" msgstr "" @@ -517,7 +527,7 @@ msgstr "Fristart wählen" #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31 #: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31 #: ema/templates/ema/detail/includes/deadlines.html:31 -#: intervention/forms/modalForms.py:106 +#: intervention/forms/modalForms.py:132 msgid "Date" msgstr "Datum" @@ -595,38 +605,38 @@ msgstr "Geben Sie die Daten der neuen Maßnahme ein" msgid "Added action" msgstr "Maßnahme hinzugefügt" -#: compensation/models.py:83 +#: compensation/models.py:81 msgid "cm" msgstr "" -#: compensation/models.py:84 +#: compensation/models.py:82 msgid "m" msgstr "" -#: compensation/models.py:85 +#: compensation/models.py:83 msgid "km" msgstr "" -#: compensation/models.py:86 +#: compensation/models.py:84 msgid "m²" msgstr "" -#: compensation/models.py:87 +#: compensation/models.py:85 msgid "ha" msgstr "" -#: compensation/models.py:88 +#: compensation/models.py:86 msgid "Pieces" msgstr "Stück" -#: compensation/models.py:359 +#: compensation/models.py:374 msgid "" "Deductable surface can not be larger than existing surfaces in after states" msgstr "" "Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht " "überschreiten" -#: compensation/models.py:366 +#: compensation/models.py:381 msgid "" "Deductable surface can not be smaller than the sum of already existing " "deductions. Please contact the responsible users for the deductions!" @@ -658,7 +668,7 @@ msgid "Checked on {} by {}" msgstr "Am {} von {} geprüft worden" #: compensation/tables.py:129 -#: compensation/templates/compensation/detail/compensation/view.html:60 +#: compensation/templates/compensation/detail/compensation/view.html:80 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:56 #: compensation/templates/compensation/detail/eco_account/view.html:47 #: ema/tables.py:101 ema/templates/ema/detail/view.html:31 @@ -744,22 +754,22 @@ msgid "Public report" msgstr "Öffentlicher Bericht" #: compensation/templates/compensation/detail/compensation/includes/controls.html:17 -#: compensation/templates/compensation/detail/eco_account/includes/controls.html:28 -#: ema/templates/ema/detail/includes/controls.html:28 +#: compensation/templates/compensation/detail/eco_account/includes/controls.html:31 +#: ema/templates/ema/detail/includes/controls.html:31 #: intervention/templates/intervention/detail/includes/controls.html:36 msgid "Edit" msgstr "Bearbeiten" #: compensation/templates/compensation/detail/compensation/includes/controls.html:21 -#: compensation/templates/compensation/detail/eco_account/includes/controls.html:32 -#: ema/templates/ema/detail/includes/controls.html:32 +#: compensation/templates/compensation/detail/eco_account/includes/controls.html:35 +#: ema/templates/ema/detail/includes/controls.html:35 #: intervention/templates/intervention/detail/includes/controls.html:40 msgid "Show log" msgstr "Log anzeigen" #: compensation/templates/compensation/detail/compensation/includes/controls.html:24 -#: compensation/templates/compensation/detail/eco_account/includes/controls.html:35 -#: ema/templates/ema/detail/includes/controls.html:35 +#: compensation/templates/compensation/detail/eco_account/includes/controls.html:38 +#: ema/templates/ema/detail/includes/controls.html:38 #: intervention/templates/intervention/detail/includes/controls.html:43 #: venv/lib/python3.7/site-packages/django/forms/formsets.py:391 msgid "Delete" @@ -861,13 +871,21 @@ msgstr "Neuen Ausgangszustand hinzufügen" msgid "Missing surfaces according to states after: " msgstr "Fehlende Flächenmengen laut Zielzustand: " -#: compensation/templates/compensation/detail/compensation/view.html:50 +#: compensation/templates/compensation/detail/compensation/view.html:43 +msgid "Is CEF compensation" +msgstr "Ist CEF Maßnahme" + +#: compensation/templates/compensation/detail/compensation/view.html:53 +msgid "Is Coherence keeping compensation" +msgstr "Ist Kohärenzsicherungsmaßnahme" + +#: compensation/templates/compensation/detail/compensation/view.html:70 #: intervention/templates/intervention/detail/view.html:75 msgid "Checked on " msgstr "Geprüft am " -#: compensation/templates/compensation/detail/compensation/view.html:50 -#: compensation/templates/compensation/detail/compensation/view.html:64 +#: compensation/templates/compensation/detail/compensation/view.html:70 +#: compensation/templates/compensation/detail/compensation/view.html:84 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:54 #: compensation/templates/compensation/detail/eco_account/view.html:51 #: ema/templates/ema/detail/view.html:35 @@ -876,60 +894,46 @@ msgstr "Geprüft am " msgid "by" msgstr "von" -#: compensation/templates/compensation/detail/compensation/view.html:64 +#: compensation/templates/compensation/detail/compensation/view.html:84 #: compensation/templates/compensation/detail/eco_account/view.html:51 #: ema/templates/ema/detail/view.html:35 #: intervention/templates/intervention/detail/view.html:89 msgid "Recorded on " msgstr "Verzeichnet am" -#: compensation/templates/compensation/detail/compensation/view.html:71 +#: compensation/templates/compensation/detail/compensation/view.html:91 #: compensation/templates/compensation/detail/eco_account/view.html:74 #: compensation/templates/compensation/report/compensation/report.html:24 -#: compensation/templates/compensation/report/eco_account/report.html:28 +#: compensation/templates/compensation/report/eco_account/report.html:41 #: ema/templates/ema/detail/view.html:54 #: ema/templates/ema/report/report.html:28 -msgid "Funded by" -msgstr "Gefördert mit" - -#: compensation/templates/compensation/detail/compensation/view.html:79 -#: compensation/templates/compensation/detail/eco_account/view.html:82 -#: compensation/templates/compensation/report/compensation/report.html:31 -#: compensation/templates/compensation/report/eco_account/report.html:35 -#: compensation/templates/compensation/report/eco_account/report.html:49 -#: ema/templates/ema/detail/view.html:62 -#: ema/templates/ema/report/report.html:35 -#: intervention/templates/intervention/report/report.html:57 -#: intervention/templates/intervention/report/report.html:78 -msgid "None" -msgstr "-" - -#: compensation/templates/compensation/detail/compensation/view.html:84 -#: compensation/templates/compensation/detail/eco_account/view.html:87 -#: compensation/templates/compensation/report/compensation/report.html:37 -#: compensation/templates/compensation/report/eco_account/report.html:54 -#: ema/templates/ema/detail/view.html:67 -#: ema/templates/ema/report/report.html:41 #: intervention/templates/intervention/detail/view.html:108 #: intervention/templates/intervention/report/report.html:91 msgid "Last modified" msgstr "Zuletzt bearbeitet" -#: compensation/templates/compensation/detail/compensation/view.html:92 -#: compensation/templates/compensation/detail/eco_account/view.html:95 -#: ema/templates/ema/detail/view.html:82 intervention/forms/modalForms.py:40 +#: compensation/templates/compensation/detail/compensation/view.html:99 +#: compensation/templates/compensation/detail/eco_account/view.html:82 +#: ema/templates/ema/detail/view.html:69 intervention/forms/modalForms.py:54 #: intervention/templates/intervention/detail/view.html:116 msgid "Shared with" msgstr "Freigegeben für" -#: compensation/templates/compensation/detail/eco_account/includes/controls.html:17 -#: ema/templates/ema/detail/includes/controls.html:17 +#: compensation/templates/compensation/detail/eco_account/includes/controls.html:15 +#: ema/templates/ema/detail/includes/controls.html:15 +#: intervention/forms/modalForms.py:68 +#: intervention/templates/intervention/detail/includes/controls.html:15 +msgid "Share" +msgstr "Freigabe" + +#: compensation/templates/compensation/detail/eco_account/includes/controls.html:20 +#: ema/templates/ema/detail/includes/controls.html:20 #: intervention/templates/intervention/detail/includes/controls.html:25 msgid "Unrecord" msgstr "Entzeichnen" -#: compensation/templates/compensation/detail/eco_account/includes/controls.html:21 -#: ema/templates/ema/detail/includes/controls.html:21 +#: compensation/templates/compensation/detail/eco_account/includes/controls.html:24 +#: ema/templates/ema/detail/includes/controls.html:24 #: intervention/templates/intervention/detail/includes/controls.html:29 msgid "Record" msgstr "Verzeichnen" @@ -1000,24 +1004,30 @@ msgstr "Maßnahmenträger" msgid "Report" msgstr "Bericht" -#: compensation/templates/compensation/report/compensation/report.html:55 -#: compensation/templates/compensation/report/eco_account/report.html:72 -#: ema/templates/ema/report/report.html:59 +#: compensation/templates/compensation/report/compensation/report.html:42 +#: compensation/templates/compensation/report/eco_account/report.html:59 +#: ema/templates/ema/report/report.html:46 #: intervention/templates/intervention/report/report.html:105 msgid "Open in browser" msgstr "Im Browser öffnen" -#: compensation/templates/compensation/report/compensation/report.html:59 -#: compensation/templates/compensation/report/eco_account/report.html:76 -#: ema/templates/ema/report/report.html:63 +#: compensation/templates/compensation/report/compensation/report.html:46 +#: compensation/templates/compensation/report/eco_account/report.html:63 +#: ema/templates/ema/report/report.html:50 #: intervention/templates/intervention/report/report.html:109 msgid "View in LANIS" msgstr "In LANIS öffnen" -#: compensation/templates/compensation/report/eco_account/report.html:41 +#: compensation/templates/compensation/report/eco_account/report.html:28 msgid "Deductions for" msgstr "Abbuchungen für" +#: compensation/templates/compensation/report/eco_account/report.html:36 +#: intervention/templates/intervention/report/report.html:57 +#: intervention/templates/intervention/report/report.html:78 +msgid "None" +msgstr "-" + #: compensation/utils/quality.py:34 msgid "States unequal" msgstr "Ungleiche Zustandsflächenmengen" @@ -1041,79 +1051,101 @@ msgstr "Daten zu den verantwortlichen Stellen" msgid "Compensation {} added" msgstr "Kompensation {} hinzugefügt" -#: compensation/views/compensation_views.py:132 +#: compensation/views/compensation_views.py:134 msgid "Compensation {} edited" msgstr "Kompensation {} bearbeitet" -#: compensation/views/compensation_views.py:216 -#: compensation/views/eco_account_views.py:290 ema/views.py:178 -#: intervention/views.py:448 +#: compensation/views/compensation_views.py:220 +#: compensation/views/eco_account_views.py:307 ema/views.py:182 +#: intervention/views.py:475 msgid "Log" msgstr "Log" -#: compensation/views/compensation_views.py:237 +#: compensation/views/compensation_views.py:243 msgid "Compensation removed" msgstr "Kompensation entfernt" -#: compensation/views/compensation_views.py:256 -#: compensation/views/eco_account_views.py:389 ema/views.py:331 -#: intervention/views.py:127 +#: compensation/views/compensation_views.py:264 +#: compensation/views/eco_account_views.py:459 ema/views.py:349 +#: intervention/views.py:129 msgid "Document added" msgstr "Dokument hinzugefügt" -#: compensation/views/compensation_views.py:321 -#: compensation/views/eco_account_views.py:333 ema/views.py:275 +#: compensation/views/compensation_views.py:333 +#: compensation/views/eco_account_views.py:353 ema/views.py:287 msgid "State added" msgstr "Zustand hinzugefügt" -#: compensation/views/compensation_views.py:340 -#: compensation/views/eco_account_views.py:352 ema/views.py:294 +#: compensation/views/compensation_views.py:354 +#: compensation/views/eco_account_views.py:374 ema/views.py:308 msgid "Action added" msgstr "Maßnahme hinzugefügt" -#: compensation/views/compensation_views.py:359 -#: compensation/views/eco_account_views.py:371 ema/views.py:313 +#: compensation/views/compensation_views.py:375 +#: compensation/views/eco_account_views.py:439 ema/views.py:329 msgid "Deadline added" msgstr "Frist/Termin hinzugefügt" -#: compensation/views/compensation_views.py:378 +#: compensation/views/compensation_views.py:397 +#: compensation/views/eco_account_views.py:396 ema/views.py:419 msgid "State removed" msgstr "Zustand gelöscht" -#: compensation/views/compensation_views.py:397 +#: compensation/views/compensation_views.py:419 +#: compensation/views/eco_account_views.py:418 ema/views.py:441 msgid "Action removed" msgstr "Maßnahme entfernt" -#: compensation/views/eco_account_views.py:86 +#: compensation/views/eco_account_views.py:88 msgid "Eco-Account {} added" msgstr "Ökokonto {} hinzugefügt" -#: compensation/views/eco_account_views.py:141 +#: compensation/views/eco_account_views.py:145 msgid "Eco-Account {} edited" msgstr "Ökokonto {} bearbeitet" -#: compensation/views/eco_account_views.py:240 +#: compensation/views/eco_account_views.py:255 msgid "Eco-account removed" msgstr "Ökokonto entfernt" -#: compensation/views/eco_account_views.py:267 +#: compensation/views/eco_account_views.py:283 msgid "Deduction removed" msgstr "Abbuchung entfernt" -#: compensation/views/eco_account_views.py:310 ema/views.py:252 -#: intervention/views.py:488 +#: compensation/views/eco_account_views.py:328 ema/views.py:262 +#: intervention/views.py:517 msgid "{} unrecorded" msgstr "{} entzeichnet" -#: compensation/views/eco_account_views.py:310 ema/views.py:252 -#: intervention/views.py:488 +#: compensation/views/eco_account_views.py:328 ema/views.py:262 +#: intervention/views.py:517 msgid "{} recorded" msgstr "{} verzeichnet" -#: compensation/views/eco_account_views.py:455 intervention/views.py:470 +#: compensation/views/eco_account_views.py:529 intervention/views.py:498 msgid "Deduction added" msgstr "Abbuchung hinzugefügt" +#: compensation/views/eco_account_views.py:612 ema/views.py:517 +#: intervention/views.py:373 +msgid "{} has already been shared with you" +msgstr "{} wurde bereits für Sie freigegeben" + +#: compensation/views/eco_account_views.py:617 ema/views.py:522 +#: intervention/views.py:378 +msgid "{} has been shared with you" +msgstr "{} ist nun für Sie freigegeben" + +#: compensation/views/eco_account_views.py:624 ema/views.py:529 +#: intervention/views.py:385 +msgid "Share link invalid" +msgstr "Freigabelink ungültig" + +#: compensation/views/eco_account_views.py:647 ema/views.py:552 +#: intervention/views.py:408 +msgid "Share settings updated" +msgstr "Freigabe Einstellungen aktualisiert" + #: compensation/views/payment_views.py:36 msgid "Payment added" msgstr "Zahlung hinzugefügt" @@ -1122,7 +1154,7 @@ msgstr "Zahlung hinzugefügt" msgid "Payment removed" msgstr "Zahlung gelöscht" -#: ema/forms.py:38 +#: ema/forms.py:40 msgid "New EMA" msgstr "Neue EMA hinzufügen" @@ -1150,15 +1182,15 @@ msgstr "" msgid "Payment funded compensation" msgstr "Ersatzzahlungsmaßnahme" -#: ema/views.py:78 +#: ema/views.py:79 msgid "EMA {} added" msgstr "EMA {} hinzugefügt" -#: ema/views.py:205 +#: ema/views.py:211 msgid "EMA {} edited" msgstr "EMA {} bearbeitet" -#: ema/views.py:235 +#: ema/views.py:243 msgid "EMA removed" msgstr "EMA entfernt" @@ -1243,59 +1275,66 @@ msgstr "Neuer Eingriff" msgid "Edit intervention" msgstr "Eingriff bearbeiten" -#: intervention/forms/modalForms.py:28 +#: intervention/forms/modalForms.py:27 msgid "Share link" msgstr "Freigabelink" -#: intervention/forms/modalForms.py:30 +#: intervention/forms/modalForms.py:29 msgid "Send this link to users who you want to have writing access on the data" msgstr "Andere Nutzer erhalten über diesen Link Zugriff auf die Daten" -#: intervention/forms/modalForms.py:43 +#: intervention/forms/modalForms.py:39 +msgid "Add user to share with" +msgstr "Nutzer direkt hinzufügen" + +#: intervention/forms/modalForms.py:41 +msgid "" +"Multiple selection possible - You can only select users which do not already " +"have access" +msgstr "" +"Mehrfachauswahl möglich - Sie können nur Nutzer wählen, für die der Eintrag " +"noch nicht freigegeben wurde" + +#: intervention/forms/modalForms.py:57 msgid "Remove check to remove access for this user" msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen" -#: intervention/forms/modalForms.py:54 -#: intervention/templates/intervention/detail/includes/controls.html:15 -msgid "Share" -msgstr "Freigabe" - -#: intervention/forms/modalForms.py:55 +#: intervention/forms/modalForms.py:69 msgid "Share settings for {}" msgstr "Freigabe Einstellungen für {}" -#: intervention/forms/modalForms.py:108 +#: intervention/forms/modalForms.py:134 msgid "Date of revocation" msgstr "Datum des Widerspruchs" -#: intervention/forms/modalForms.py:119 +#: intervention/forms/modalForms.py:145 #: intervention/templates/intervention/detail/includes/revocation.html:35 msgid "Document" msgstr "Dokument" -#: intervention/forms/modalForms.py:122 konova/forms.py:364 +#: intervention/forms/modalForms.py:148 konova/forms.py:364 msgid "Must be smaller than 15 Mb" msgstr "Muss kleiner als 15 Mb sein" -#: intervention/forms/modalForms.py:146 +#: intervention/forms/modalForms.py:172 #: intervention/templates/intervention/detail/includes/revocation.html:18 msgid "Add revocation" msgstr "Widerspruch hinzufügen" -#: intervention/forms/modalForms.py:186 +#: intervention/forms/modalForms.py:214 msgid "Checked intervention data" msgstr "Eingriffsdaten geprüft" -#: intervention/forms/modalForms.py:192 +#: intervention/forms/modalForms.py:220 msgid "Checked compensations data and payments" msgstr "Kompensationen und Zahlungen geprüft" -#: intervention/forms/modalForms.py:200 +#: intervention/forms/modalForms.py:228 #: intervention/templates/intervention/detail/includes/controls.html:19 msgid "Run check" msgstr "Prüfung vornehmen" -#: intervention/forms/modalForms.py:201 konova/forms.py:449 +#: intervention/forms/modalForms.py:229 konova/forms.py:449 msgid "" "I, {} {}, confirm that all necessary control steps have been performed by " "myself." @@ -1303,23 +1342,23 @@ msgstr "" "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "wurden:" -#: intervention/forms/modalForms.py:268 +#: intervention/forms/modalForms.py:287 msgid "Only recorded accounts can be selected for deductions" msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden." -#: intervention/forms/modalForms.py:295 +#: intervention/forms/modalForms.py:314 msgid "Only shared interventions can be selected" msgstr "Nur freigegebene Eingriffe können gewählt werden" -#: intervention/forms/modalForms.py:308 +#: intervention/forms/modalForms.py:327 msgid "New Deduction" msgstr "Neue Abbuchung" -#: intervention/forms/modalForms.py:309 +#: intervention/forms/modalForms.py:328 msgid "Enter the information for a new deduction from a chosen eco-account" msgstr "Geben Sie die Informationen für eine neue Abbuchung ein." -#: intervention/forms/modalForms.py:342 +#: intervention/forms/modalForms.py:361 msgid "" "Eco-account {} is not recorded yet. You can only deduct from recorded " "accounts." @@ -1327,7 +1366,7 @@ msgstr "" "Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von " "verzeichneten Ökokonten erfolgen." -#: intervention/forms/modalForms.py:355 +#: intervention/forms/modalForms.py:374 msgid "" "The account {} has not enough surface for a deduction of {} m². There are " "only {} m² left" @@ -1336,9 +1375,7 @@ msgstr "" "Restfläche. Es stehen noch {} m² zur Verfügung." #: intervention/tables.py:45 -#: intervention/templates/intervention/detail/includes/revocation.html:8 -#: intervention/templates/intervention/detail/includes/revocation.html:57 -#: intervention/templates/intervention/detail/view.html:104 +#: intervention/templates/intervention/detail/includes/revocation.html:56 msgid "Revocation" msgstr "Widerspruch" @@ -1388,12 +1425,17 @@ msgstr "Betrag" msgid "Remove payment" msgstr "Zahlung entfernen" +#: intervention/templates/intervention/detail/includes/revocation.html:8 +#: intervention/templates/intervention/detail/view.html:104 +msgid "Revocations" +msgstr "Widersprüche" + #: intervention/templates/intervention/detail/includes/revocation.html:32 msgctxt "Revocation" msgid "From" msgstr "Vom" -#: intervention/templates/intervention/detail/includes/revocation.html:64 +#: intervention/templates/intervention/detail/includes/revocation.html:63 msgid "Remove revocation" msgstr "Widerspruch entfernen" @@ -1410,8 +1452,8 @@ msgid "Exist" msgstr "Vorhanden" #: intervention/utils/quality.py:70 -msgid "Revocation exists" -msgstr "Widerspruch liegt vor" +msgid "Revocations exists" +msgstr "Widersprüche liegen vor" #: intervention/utils/quality.py:76 msgid "Binding date" @@ -1427,55 +1469,35 @@ msgstr "" "Kein Ausgleich jeglicher Art gefunden (Kompensation, Ersatzzahlung, " "Abbuchung)" -#: intervention/views.py:80 +#: intervention/views.py:79 msgid "Intervention {} added" msgstr "Eingriff {} hinzugefügt" -#: intervention/views.py:231 -msgid "This intervention has a revocation from {}" -msgstr "Es existiert ein Widerspruch vom {}" +#: intervention/views.py:243 +msgid "This intervention has {} revocations" +msgstr "Dem Eingriff liegen {} Widersprüche vor" -#: intervention/views.py:274 +#: intervention/views.py:291 msgid "Intervention {} edited" msgstr "Eingriff {} bearbeitet" -#: intervention/views.py:275 -msgid "Status of Checked and Recorded reseted" -msgstr "'Geprüft' und 'Verzeichnet' sind zurückgesetzt worden" - -#: intervention/views.py:307 +#: intervention/views.py:326 msgid "{} removed" msgstr "{} entfernt" -#: intervention/views.py:328 +#: intervention/views.py:347 msgid "Revocation removed" msgstr "Widerspruch entfernt" -#: intervention/views.py:354 -msgid "{} has already been shared with you" -msgstr "{} wurde bereits für Sie freigegeben" - -#: intervention/views.py:359 -msgid "{} has been shared with you" -msgstr "{} ist nun für Sie freigegeben" - -#: intervention/views.py:366 -msgid "Share link invalid" -msgstr "Freigabelink ungültig" - -#: intervention/views.py:387 -msgid "Share settings updated" -msgstr "Freigabe Einstellungen aktualisiert" - -#: intervention/views.py:406 +#: intervention/views.py:429 msgid "Check performed" msgstr "Prüfung durchgeführt" -#: intervention/views.py:426 +#: intervention/views.py:451 msgid "Revocation added" msgstr "Widerspruch hinzugefügt" -#: intervention/views.py:493 +#: intervention/views.py:522 msgid "There are errors on this intervention:" msgstr "Es liegen Fehler in diesem Eingriff vor:" @@ -1587,19 +1609,19 @@ msgstr "Wenn meine freigegebenen Daten gelöscht wurden" msgid "On registered data edited" msgstr "Wenn meine freigegebenen Daten bearbeitet wurden" -#: konova/models.py:206 +#: konova/models.py:231 msgid "Finished" msgstr "Umgesetzt bis" -#: konova/models.py:207 +#: konova/models.py:232 msgid "Maintain" msgstr "Unterhaltung bis" -#: konova/models.py:208 +#: konova/models.py:233 msgid "Control" msgstr "Kontrolle am" -#: konova/models.py:209 +#: konova/models.py:234 msgid "Other" msgstr "Sonstige" @@ -1684,6 +1706,16 @@ msgstr "" msgid "You need to be part of another user group." msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!" +#: konova/utils/message_templates.py:19 +msgid "Status of Checked and Recorded reseted" +msgstr "'Geprüft' und 'Verzeichnet' sind zurückgesetzt worden" + +#: konova/utils/message_templates.py:22 +msgid "" +"Action canceled. Eco account is recorded or deductions exist. Only " +"conservation office member can perform this action." +msgstr "" + #: konova/utils/messenger.py:69 msgid "{} checked" msgstr "{} geprüft" @@ -3146,3 +3178,15 @@ msgstr "" #: venv/lib/python3.7/site-packages/fontawesome_5/fields.py:16 msgid "A fontawesome icon field" msgstr "" + +#~ msgid "Share with user" +#~ msgstr "Freigeben für Nutzer" + +#~ msgid "Fundings" +#~ msgstr "Förderungen" + +#~ msgid "Select fundings for this compensation" +#~ msgstr "Wählen Sie ggf. Fördermittelprojekte" + +#~ msgid "Funded by" +#~ msgstr "Gefördert mit"