* adds NewCompensationForm content and functionality
* renames CODELIST_COMPENSATION_COMBINATION_ID into CODELIST_COMPENSATION_FUNDING_ID for more clarity
* reorganizes compensation forms into compensation/forms/forms.py and forms/modalForms.py
* adds new compensation html template in compensation/templates/compensation/new
* adds new default message template in message_templates.py: IDENTIFIER_REPLACED
* adds/updates translations
This commit is contained in:
mipel 2021-10-04 09:55:59 +02:00
parent 61b75be1a1
commit 9cfb400bad
17 changed files with 441 additions and 174 deletions

View File

@ -13,7 +13,7 @@ from codelist.models import KonovaCode, KonovaCodeList
from codelist.settings import CODELIST_INTERVENTION_HANDLER_ID, CODELIST_CONSERVATION_OFFICE_ID, \
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, CODELIST_COMPENSATION_HANDLER_ID, \
CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_CLASS_ID, CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID, \
CODELIST_COMPENSATION_COMBINATION_ID, CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID
CODELIST_COMPENSATION_FUNDING_ID, CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID
bool_map = {
"true": True,
@ -35,7 +35,7 @@ class Command(BaseCommand):
CODELIST_COMPENSATION_ACTION_ID,
CODELIST_COMPENSATION_ACTION_CLASS_ID,
CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID,
CODELIST_COMPENSATION_COMBINATION_ID,
CODELIST_COMPENSATION_FUNDING_ID,
CODELIST_PROCESS_TYPE_ID,
]
self._write_warning("Fetching codes...")

View File

@ -21,4 +21,4 @@ CODELIST_COMPENSATION_HANDLER_ID = 1052 # CLEingreifer
CODELIST_COMPENSATION_ACTION_ID = 1026 # CLMassnahmedetail
CODELIST_COMPENSATION_ACTION_CLASS_ID = 1034 # CLMassnahmeklasse
CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID = 1028 # CLMassnahmetyp, CEF and stuff
CODELIST_COMPENSATION_COMBINATION_ID = 1049 # CLKombimassnahme
CODELIST_COMPENSATION_FUNDING_ID = 1049 # CLKombimassnahme

View File

@ -12,6 +12,7 @@ urlpatterns = [
# Main compensation
path("", index_view, name="index"),
path('new', new_view, name='new'),
path('new/id', new_id_view, name='new-id'),
path('<id>', open_view, name='open'),
path('<id>/log', log_view, name='log'),
path('<id>/edit', edit_view, name='edit'),

136
compensation/forms/forms.py Normal file
View File

@ -0,0 +1,136 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 04.12.20
"""
from dal import autocomplete
from django.contrib.auth.models import User
from django.db import transaction
from django.urls import reverse_lazy, reverse
from django.utils.translation import gettext_lazy as _
from django import forms
from codelist.models import KonovaCode
from codelist.settings import CODELIST_COMPENSATION_FUNDING_ID
from compensation.models import Compensation
from intervention.inputs import GenerateInput
from intervention.models import Intervention
from konova.forms import BaseForm, SimpleGeomForm
from user.models import UserActionLogEntry, UserAction
class NewCompensationForm(BaseForm):
identifier = forms.CharField(
label=_("Identifier"),
label_suffix="",
max_length=255,
help_text=_("Generated automatically"),
widget=GenerateInput(
attrs={
"class": "form-control",
"url": reverse_lazy("compensation:new-id"),
}
)
)
title = forms.CharField(
label=_("Title"),
label_suffix="",
help_text=_("An explanatory name"),
max_length=255,
widget=forms.TextInput(
attrs={
"placeholder": _("Compensation XY; Location ABC"),
"class": "form-control",
}
)
)
intervention = forms.ModelChoiceField(
label=_("compensates intervention"),
label_suffix="",
help_text=_("Select the intervention for which this compensation compensates"),
queryset=Intervention.objects.filter(
deleted=None,
),
widget=autocomplete.ModelSelect2(
url="interventions-autocomplete",
attrs={
"data-placeholder": _("Intervention"),
"data-minimum-input-length": 3,
}
),
)
fundings = forms.ModelMultipleChoiceField(
label=_("Fundings"),
label_suffix="",
required=False,
help_text=_("Select fundings for this compensation"),
queryset=KonovaCode.objects.filter(
is_archived=False,
is_leaf=True,
code_lists__in=[CODELIST_COMPENSATION_FUNDING_ID],
),
widget=autocomplete.ModelSelect2Multiple(
url="codes-compensation-funding-autocomplete",
attrs={
"data-placeholder": _("Funding by..."),
}
),
)
comment = forms.CharField(
label_suffix="",
label=_("Comment"),
required=False,
help_text=_("Additional comment"),
widget=forms.Textarea(
attrs={
"rows": 5,
"class": "form-control"
}
)
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("New compensation")
self.action_url = reverse("compensation:new")
self.cancel_redirect = reverse("compensation:index")
tmp = Compensation()
identifier = tmp._generate_new_identifier()
self.initialize_form_field("identifier", identifier)
def save(self, user: User, geom_form: SimpleGeomForm):
with transaction.atomic():
# Fetch data from cleaned POST values
identifier = self.cleaned_data.get("identifier", None)
title = self.cleaned_data.get("title", None)
fundings = self.cleaned_data.get("fundings", None)
intervention = self.cleaned_data.get("intervention", None)
comment = self.cleaned_data.get("comment", None)
# Create log entry
action = UserActionLogEntry.objects.create(
user=user,
action=UserAction.CREATED,
)
# Process the geometry form
geometry = geom_form.save(action)
# Finally create main object
comp = Compensation.objects.create(
identifier=identifier,
title=title,
intervention=intervention,
created=action,
geometry=geometry,
comment=comment,
)
comp.fundings.set(fundings)
# Add the log entry to the main objects log list
comp.log.add(action)
return comp

View File

@ -2,7 +2,7 @@
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 04.12.20
Created on: 04.10.21
"""
from bootstrap_modal_forms.utils import is_ajax
@ -12,34 +12,22 @@ from django.contrib import messages
from django.db import transaction
from django.http import HttpRequest, HttpResponseRedirect
from django.shortcuts import render
from django.utils.translation import gettext_lazy as _
from django.utils.translation import pgettext_lazy as _con
from django.utils.translation import pgettext_lazy as _con, gettext_lazy as _
from codelist.models import KonovaCode
from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION_ID
from compensation.models import Payment, CompensationState, CompensationAction, UnitChoices
from compensation.models import Payment, CompensationState, UnitChoices, CompensationAction
from konova.contexts import BaseContext
from konova.forms import BaseForm, BaseModalForm
from konova.models import Deadline, DeadlineType
from konova.forms import BaseModalForm
from konova.models import DeadlineType, Deadline
from konova.utils.message_templates import FORM_INVALID
from user.models import UserActionLogEntry, UserAction
class NewCompensationForm(BaseForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def save(self):
with transaction.atomic():
user_action = UserActionLogEntry.objects.create(
user=self.user,
action=UserAction.CREATED
)
# Save action to log
class NewPaymentForm(BaseModalForm):
""" Form handling payment related input
"""
amount = forms.DecimalField(
min_value=0.00,
decimal_places=2,
@ -135,6 +123,12 @@ class NewPaymentForm(BaseModalForm):
class NewStateModalForm(BaseModalForm):
""" Form handling state related input
Compensation states refer to 'before' and 'after' states of a compensated surface. Basically it means:
What has been on this area before changes/compensations have been applied and what will be the result ('after')?
"""
biotope_type = forms.ModelChoiceField(
label=_("Biotope Type"),
label_suffix="",
@ -243,6 +237,9 @@ class NewStateModalForm(BaseModalForm):
class NewDeadlineModalForm(BaseModalForm):
""" Form handling deadline related input
"""
type = forms.ChoiceField(
label=_("Deadline Type"),
label_suffix="",
@ -314,6 +311,13 @@ class NewDeadlineModalForm(BaseModalForm):
class NewActionModalForm(BaseModalForm):
""" Form handling action related input
Compensation actions are the actions performed on the area, which shall be compensated. Actions will change the
surface of the area, the biotopes, and have an environmental impact. With actions the before-after states can change
(not in the process logic in Konova, but in the real world).
"""
action_type = forms.ModelChoiceField(
label=_("Action Type"),
label_suffix="",
@ -398,5 +402,4 @@ class NewActionModalForm(BaseModalForm):
self.instance.save()
self.instance.log.add(edited_action)
self.instance.actions.add(comp_action)
return comp_action
return comp_action

View File

@ -16,7 +16,7 @@ from django.utils.translation import gettext_lazy as _
from codelist.models import KonovaCode
from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, \
CODELIST_COMPENSATION_COMBINATION_ID
CODELIST_COMPENSATION_FUNDING_ID
from intervention.models import Intervention, ResponsibilityData
from konova.models import BaseObject, BaseResource, Geometry, UuidModel, AbstractDocument, \
generate_document_file_upload_path
@ -144,7 +144,7 @@ class AbstractCompensation(BaseObject):
null=True,
blank=True,
limit_choices_to={
"code_lists__in": [CODELIST_COMPENSATION_COMBINATION_ID],
"code_lists__in": [CODELIST_COMPENSATION_FUNDING_ID],
"is_selectable": True,
"is_archived": False,
},

View File

@ -0,0 +1,16 @@
{% extends 'base.html' %}
{% load i18n l10n %}
{% block head %}
{% comment %}
dal documentation (django-autocomplete-light) states using form.media for adding needed scripts.
This does not work properly with modal forms, as the scripts are not loaded properly inside the modal.
Therefore the script linkages from form.media have been extracted and put inside dal/scripts.html to ensure
these scripts are loaded when needed.
{% endcomment %}
{% include 'dal/scripts.html' %}
{% endblock %}
{% block body %}
{% include 'form/main_data_collapse_form.html' %}
{% endblock %}

View File

@ -1,16 +1,18 @@
from django.contrib.auth.decorators import login_required
from django.db.models import Sum
from django.http import HttpRequest
from django.http import HttpRequest, JsonResponse
from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _
from compensation.forms import NewStateModalForm, NewDeadlineModalForm, NewActionModalForm
from compensation.forms.forms import NewCompensationForm
from compensation.forms.modalForms import NewStateModalForm, NewDeadlineModalForm, NewActionModalForm
from compensation.models import Compensation, CompensationState, CompensationAction, CompensationDocument
from compensation.tables import CompensationTable
from konova.contexts import BaseContext
from konova.decorators import *
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm
from konova.utils.documents import get_document, remove_document
from konova.utils.message_templates import FORM_INVALID, IDENTIFIER_REPLACED
from konova.utils.user_checks import in_group
@ -45,8 +47,62 @@ def index_view(request: HttpRequest):
@login_required
@default_group_required
def new_view(request: HttpRequest):
# ToDo
pass
"""
Renders a view for a new compensation creation
Args:
request (HttpRequest): The incoming request
Returns:
"""
template = "compensation/new/view.html"
data_form = NewCompensationForm(request.POST or None)
geom_form = SimpleGeomForm(request.POST or None, read_only=False)
if request.method == "POST":
if data_form.is_valid() and geom_form.is_valid():
generated_identifier = data_form.cleaned_data.get("identifier", None)
comp = data_form.save(request.user, geom_form)
if generated_identifier != comp.identifier:
messages.info(
request,
IDENTIFIER_REPLACED.format(
generated_identifier,
comp.identifier
)
)
messages.success(request, _("Compensation {} added").format(comp.identifier))
return redirect("compensation:open", id=comp.id)
else:
messages.error(request, FORM_INVALID)
else:
# For clarification: nothing in this case
pass
context = {
"form": data_form,
"geom_form": geom_form,
"url": reverse("compensation:new-id")
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
def new_id_view(request: HttpRequest):
""" JSON endpoint
Provides fetching of free identifiers for e.g. AJAX calls
"""
tmp = Compensation()
identifier = tmp._generate_new_identifier()
while Compensation.objects.filter(identifier=identifier).exists():
identifier = tmp._generate_new_identifier()
return JsonResponse(
data={
"identifier": identifier
}
)
@login_required

View File

@ -13,7 +13,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpRequest, Http404
from django.shortcuts import render, get_object_or_404
from compensation.forms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm
from compensation.forms.modalForms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm
from compensation.models import EcoAccount, EcoAccountDocument
from compensation.tables import EcoAccountTable
from intervention.forms.modalForms import NewDeductionModalForm

View File

@ -10,7 +10,7 @@ from django.contrib.auth.decorators import login_required
from django.http import HttpRequest
from django.shortcuts import get_object_or_404
from compensation.forms import NewPaymentForm
from compensation.forms.modalForms import NewPaymentForm
from compensation.models import Payment
from intervention.models import Intervention
from konova.decorators import default_group_required

View File

@ -6,7 +6,7 @@ from django.urls import reverse
from django.utils.translation import gettext_lazy as _
import compensation
from compensation.forms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm
from compensation.forms.modalForms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm
from ema.tables import EmaTable
from konova.contexts import BaseContext
from konova.decorators import conservation_office_group_required

View File

@ -13,7 +13,7 @@ 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.message_templates import INTERVENTION_INVALID, FORM_INVALID
from konova.utils.message_templates import INTERVENTION_INVALID, FORM_INVALID, IDENTIFIER_REPLACED
from konova.utils.user_checks import in_group
@ -68,13 +68,13 @@ def new_view(request: HttpRequest):
if generated_identifier != intervention.identifier:
messages.info(
request,
_("The identifier '{}' had to be changed to '{}' since another entry has been added in the meanwhile, which uses this identifier").format(
IDENTIFIER_REPLACED.format(
generated_identifier,
intervention.identifier
)
)
messages.success(request, _("Intervention {} added").format(intervention.identifier))
return redirect("intervention:index")
return redirect("intervention:open", id=intervention.id)
else:
messages.error(request, FORM_INVALID)
else:

View File

@ -10,7 +10,8 @@ from django.db.models import Q
from codelist.models import KonovaCode
from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, \
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_PROCESS_TYPE_ID
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_PROCESS_TYPE_ID, \
CODELIST_COMPENSATION_FUNDING_ID
from compensation.models import EcoAccount
from intervention.models import Intervention
from organisation.models import Organisation
@ -45,12 +46,18 @@ class NonOfficialOrganisationAutocomplete(Select2QuerySetView):
class EcoAccountAutocomplete(Select2QuerySetView):
""" Autocomplete for ecoAccount entries
Only returns entries that are accessible for the requesting user and already are recorded
"""
def get_queryset(self):
if self.request.user.is_anonymous:
return EcoAccount.objects.none()
qs = EcoAccount.objects.filter(
deleted=None,
recorded__isnull=False,
users__in=[self.request.user],
)
if self.q:
qs = qs.filter(
@ -63,6 +70,11 @@ class EcoAccountAutocomplete(Select2QuerySetView):
class InterventionAutocomplete(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 Intervention.objects.none()
@ -128,6 +140,15 @@ class CompensationActionCodeAutocomplete(KonovaCodeAutocomplete):
super().__init__(*args, **kwargs)
class CompensationFundingCodeAutocomplete(KonovaCodeAutocomplete):
"""
Due to limitations of the django dal package, we need to subclass for each code list
"""
def __init__(self, *args, **kwargs):
self.c = CODELIST_COMPENSATION_FUNDING_ID
super().__init__(*args, **kwargs)
class BiotopeCodeAutocomplete(KonovaCodeAutocomplete):
"""
Due to limitations of the django dal package, we need to subclass for each code list

View File

@ -19,7 +19,8 @@ from django.urls import path, include
from konova.autocompletes import OrganisationAutocomplete, NonOfficialOrganisationAutocomplete, EcoAccountAutocomplete, \
InterventionAutocomplete, CompensationActionCodeAutocomplete, BiotopeCodeAutocomplete, LawCodeAutocomplete, \
RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete
RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete, \
CompensationFundingCodeAutocomplete
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
@ -46,7 +47,8 @@ urlpatterns = [
path("atcmplt/orgs/other", NonOfficialOrganisationAutocomplete.as_view(), name="other-orgs-autocomplete"),
path("atcmplt/eco-accounts", EcoAccountAutocomplete.as_view(), name="accounts-autocomplete"),
path("atcmplt/interventions", InterventionAutocomplete.as_view(), name="interventions-autocomplete"),
path("atcmplt/codes/compensation-action", CompensationActionCodeAutocomplete.as_view(), name="codes-compensation-action-autocomplete"),
path("atcmplt/codes/comp/action", CompensationActionCodeAutocomplete.as_view(), name="codes-compensation-action-autocomplete"),
path("atcmplt/codes/comp/funding", CompensationFundingCodeAutocomplete.as_view(), name="codes-compensation-funding-autocomplete"),
path("atcmplt/codes/biotope", BiotopeCodeAutocomplete.as_view(), name="codes-biotope-autocomplete"),
path("atcmplt/codes/law", LawCodeAutocomplete.as_view(), name="codes-law-autocomplete"),
path("atcmplt/codes/prc-type", ProcessTypeCodeAutocomplete.as_view(), name="codes-process-type-autocomplete"),

View File

@ -10,3 +10,4 @@ from django.utils.translation import gettext_lazy as _
FORM_INVALID = _("There was an error on this form.")
INTERVENTION_INVALID = _("There are errors in this intervention.")
IDENTIFIER_REPLACED = _("The identifier '{}' had to be changed to '{}' since another entry has been added in the meanwhile, which uses this identifier")

Binary file not shown.

View File

@ -3,22 +3,23 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#: compensation/filters.py:71 compensation/forms.py:47 compensation/forms.py:57
#: compensation/forms.py:73 compensation/forms.py:276 compensation/forms.py:363
#: compensation/filters.py:71 compensation/forms/modalForms.py:35
#: compensation/forms/modalForms.py:45 compensation/forms/modalForms.py:61
#: compensation/forms/modalForms.py:273 compensation/forms/modalForms.py:367
#: 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:151
#: intervention/forms/forms.py:163 intervention/forms/modalForms.py:107
#: intervention/forms/modalForms.py:120 intervention/forms/modalForms.py:133
#: konova/forms.py:140 konova/forms.py:244 konova/forms.py:294
#: konova/forms.py:321 konova/forms.py:331 konova/forms.py:344
#: konova/forms.py:356 konova/forms.py:377 user/forms.py:38
#: konova/forms.py:140 konova/forms.py:244 konova/forms.py:293
#: konova/forms.py:320 konova/forms.py:330 konova/forms.py:343
#: konova/forms.py:355 konova/forms.py:376 user/forms.py:38
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-27 13:56+0200\n"
"POT-Creation-Date: 2021-10-04 09:54+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -32,20 +33,70 @@ msgstr ""
msgid "Show only unrecorded"
msgstr "Nur unverzeichnete anzeigen"
#: compensation/forms.py:48
msgid "in Euro"
msgstr "in Euro"
#: compensation/forms/forms.py:26 compensation/tables.py:25
#: compensation/tables.py:167 ema/tables.py:28 intervention/forms/forms.py:27
#: intervention/tables.py:23
#: intervention/templates/intervention/detail/includes/compensations.html:30
msgid "Identifier"
msgstr "Kennung"
#: compensation/forms.py:56
#: intervention/templates/intervention/detail/includes/payments.html:31
msgid "Due on"
msgstr "Fällig am"
#: compensation/forms/forms.py:29 intervention/forms/forms.py:30
msgid "Generated automatically"
msgstr "Automatisch generiert"
#: compensation/forms.py:59
msgid "Due on which date"
msgstr "Zahlung wird an diesem Datum erwartet"
#: compensation/forms/forms.py:38 compensation/tables.py:30
#: compensation/tables.py:172
#: compensation/templates/compensation/detail/compensation/includes/documents.html:28
#: compensation/templates/compensation/detail/compensation/view.html:31
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:28
#: compensation/templates/compensation/detail/eco_account/view.html:31
#: ema/tables.py:33 ema/templates/ema/detail/includes/documents.html:28
#: ema/templates/ema/detail/view.html:24 intervention/forms/forms.py:39
#: intervention/tables.py:28
#: intervention/templates/intervention/detail/includes/compensations.html:33
#: intervention/templates/intervention/detail/includes/documents.html:28
#: intervention/templates/intervention/detail/view.html:31 konova/forms.py:319
msgid "Title"
msgstr "Bezeichnung"
#: compensation/forms.py:72 compensation/forms.py:275 compensation/forms.py:362
#: compensation/forms/forms.py:40 intervention/forms/forms.py:41
msgid "An explanatory name"
msgstr "Aussagekräftiger Titel"
#: compensation/forms/forms.py:44
msgid "Compensation XY; Location ABC"
msgstr "Kompensation XY; Flur ABC"
#: compensation/forms/forms.py:50
#: compensation/templates/compensation/detail/compensation/view.html:35
msgid "compensates intervention"
msgstr "kompensiert Eingriff"
#: compensation/forms/forms.py:52
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:59 intervention/forms/modalForms.py:284
#: intervention/forms/modalForms.py:291 intervention/tables.py:88
#: intervention/templates/intervention/detail/view.html:19
#: konova/templates/konova/home.html:11 templates/navbar.html:22
msgid "Intervention"
msgstr "Eingriff"
#: compensation/forms/forms.py:65
msgid "Fundings"
msgstr ""
#: compensation/forms/forms.py:68
msgid "Select fundings for this compensation"
msgstr "Wählen Sie ggf. Fördermittelprojekte"
#: compensation/forms/forms.py:77
msgid "Funding by..."
msgstr "Gefördert mit..."
#: compensation/forms/forms.py:83 compensation/forms/modalForms.py:60
#: compensation/forms/modalForms.py:272 compensation/forms/modalForms.py:366
#: compensation/templates/compensation/detail/compensation/includes/actions.html:34
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34
#: compensation/templates/compensation/detail/compensation/includes/documents.html:31
@ -56,43 +107,66 @@ msgstr "Zahlung wird an diesem Datum erwartet"
#: ema/templates/ema/detail/includes/deadlines.html:34
#: ema/templates/ema/detail/includes/documents.html:31
#: intervention/forms/forms.py:175 intervention/forms/modalForms.py:132
#: intervention/templates/intervention/detail/includes/comment.html:10
#: intervention/templates/intervention/detail/includes/documents.html:31
#: intervention/templates/intervention/detail/includes/payments.html:34
#: intervention/templates/intervention/detail/includes/revocation.html:38
#: konova/forms.py:355
#: konova/forms.py:354
msgid "Comment"
msgstr "Kommentar"
#: compensation/forms.py:74 compensation/forms.py:277 compensation/forms.py:364
#: intervention/forms/modalForms.py:134 konova/forms.py:357
#: compensation/forms/forms.py:85 intervention/forms/forms.py:177
msgid "Additional comment"
msgstr "Zusätzlicher Kommentar"
#: compensation/forms/forms.py:96
msgid "New compensation"
msgstr "Neue Kompensation"
#: compensation/forms/modalForms.py:36
msgid "in Euro"
msgstr "in Euro"
#: compensation/forms/modalForms.py:44
#: intervention/templates/intervention/detail/includes/payments.html:31
msgid "Due on"
msgstr "Fällig am"
#: compensation/forms/modalForms.py:47
msgid "Due on which date"
msgstr "Zahlung wird an diesem Datum erwartet"
#: compensation/forms/modalForms.py:62 compensation/forms/modalForms.py:274
#: compensation/forms/modalForms.py:368 intervention/forms/modalForms.py:134
#: konova/forms.py:356
msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
#: compensation/forms.py:86
#: compensation/forms/modalForms.py:74
msgid "Payment"
msgstr "Zahlung"
#: compensation/forms.py:87
#: compensation/forms/modalForms.py:75
msgid "Add a payment for intervention '{}'"
msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen"
#: compensation/forms.py:108
#: compensation/forms/modalForms.py:96
msgid "If there is no date you can enter, please explain why."
msgstr "Falls Sie kein Datum angeben können, erklären Sie bitte weshalb."
#: compensation/forms.py:122
#: compensation/forms/modalForms.py:110
msgid "Added payment"
msgstr "Zahlung hinzufügen"
#: compensation/forms.py:139 compensation/forms.py:151
#: compensation/forms/modalForms.py:133 compensation/forms/modalForms.py:145
msgid "Biotope Type"
msgstr "Biotoptyp"
#: compensation/forms.py:142
#: compensation/forms/modalForms.py:136
msgid "Select the biotope type"
msgstr "Biotoptyp wählen"
#: compensation/forms.py:158
#: compensation/forms/modalForms.py:152
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:36
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:36
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:36
@ -103,35 +177,35 @@ msgstr "Biotoptyp wählen"
msgid "Surface"
msgstr "Fläche"
#: compensation/forms.py:161 intervention/forms/modalForms.py:276
#: compensation/forms/modalForms.py:155 intervention/forms/modalForms.py:276
msgid "in m²"
msgstr ""
#: compensation/forms.py:171
#: compensation/forms/modalForms.py:165
msgid "New state"
msgstr "Neuer Zustand"
#: compensation/forms.py:172
#: compensation/forms/modalForms.py:166
msgid "Insert data for the new state"
msgstr "Geben Sie die Daten des neuen Zustandes ein"
#: compensation/forms.py:180
#: compensation/forms/modalForms.py:174
msgid "Added state"
msgstr "Zustand hinzugefügt"
#: compensation/forms.py:196 konova/forms.py:193
#: compensation/forms/modalForms.py:190 konova/forms.py:193
msgid "Object removed"
msgstr "Objekt entfernt"
#: compensation/forms.py:247
#: compensation/forms/modalForms.py:244
msgid "Deadline Type"
msgstr "Fristart"
#: compensation/forms.py:250
#: compensation/forms/modalForms.py:247
msgid "Select the deadline type"
msgstr "Fristart wählen"
#: compensation/forms.py:259
#: compensation/forms/modalForms.py:256
#: 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
@ -139,31 +213,31 @@ msgstr "Fristart wählen"
msgid "Date"
msgstr "Datum"
#: compensation/forms.py:262
#: compensation/forms/modalForms.py:259
msgid "Select date"
msgstr "Datum wählen"
#: compensation/forms.py:289
#: compensation/forms/modalForms.py:286
msgid "New deadline"
msgstr "Neue Frist"
#: compensation/forms.py:290
#: compensation/forms/modalForms.py:287
msgid "Insert data for the new deadline"
msgstr "Geben Sie die Daten der neuen Frist ein"
#: compensation/forms.py:307
#: compensation/forms/modalForms.py:304
msgid "Added deadline"
msgstr "Frist/Termin hinzugefügt"
#: compensation/forms.py:318
#: compensation/forms/modalForms.py:322
msgid "Action Type"
msgstr "Maßnahmentyp"
#: compensation/forms.py:321
#: compensation/forms/modalForms.py:325
msgid "Select the action type"
msgstr "Maßnahmentyp wählen"
#: compensation/forms.py:330
#: compensation/forms/modalForms.py:334
#: compensation/templates/compensation/detail/compensation/includes/actions.html:37
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:37
#: compensation/templates/compensation/detail/compensation/includes/documents.html:34
@ -189,33 +263,33 @@ msgstr "Maßnahmentyp wählen"
msgid "Action"
msgstr "Aktionen"
#: compensation/forms.py:335
#: compensation/forms/modalForms.py:339
msgid "Unit"
msgstr "Einheit"
#: compensation/forms.py:338
#: compensation/forms/modalForms.py:342
msgid "Select the unit"
msgstr "Einheit wählen"
#: compensation/forms.py:347
#: compensation/forms/modalForms.py:351
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:34
#: intervention/templates/intervention/detail/includes/deductions.html:31
msgid "Amount"
msgstr "Menge"
#: compensation/forms.py:350
#: compensation/forms/modalForms.py:354
msgid "Insert the amount"
msgstr "Menge eingeben"
#: compensation/forms.py:375
#: compensation/forms/modalForms.py:379
msgid "New action"
msgstr "Neue Maßnahme"
#: compensation/forms.py:376
#: compensation/forms/modalForms.py:380
msgid "Insert data for the new action"
msgstr "Geben Sie die Daten der neuen Maßnahme ein"
#: compensation/forms.py:395
#: compensation/forms/modalForms.py:399
msgid "Added action"
msgstr "Maßnahme hinzugefügt"
@ -258,26 +332,6 @@ msgstr ""
"Es wurde bereits mehr Fläche abgebucht, als Sie nun als abbuchbar einstellen "
"wollen. Kontaktieren Sie die für die Abbuchungen verantwortlichen Nutzer!"
#: compensation/tables.py:25 compensation/tables.py:167 ema/tables.py:28
#: intervention/forms/forms.py:27 intervention/tables.py:23
#: intervention/templates/intervention/detail/includes/compensations.html:30
msgid "Identifier"
msgstr "Kennung"
#: compensation/tables.py:30 compensation/tables.py:172
#: compensation/templates/compensation/detail/compensation/includes/documents.html:28
#: compensation/templates/compensation/detail/compensation/view.html:31
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:28
#: compensation/templates/compensation/detail/eco_account/view.html:31
#: ema/tables.py:33 ema/templates/ema/detail/includes/documents.html:28
#: ema/templates/ema/detail/view.html:24 intervention/forms/forms.py:39
#: intervention/tables.py:28
#: intervention/templates/intervention/detail/includes/compensations.html:33
#: intervention/templates/intervention/detail/includes/documents.html:28
#: intervention/templates/intervention/detail/view.html:31 konova/forms.py:320
msgid "Title"
msgstr "Bezeichnung"
#: compensation/tables.py:35
#: compensation/templates/compensation/detail/compensation/view.html:43
#: intervention/tables.py:33
@ -478,7 +532,7 @@ msgstr "Dokumente"
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:14
#: ema/templates/ema/detail/includes/documents.html:14
#: intervention/templates/intervention/detail/includes/documents.html:14
#: konova/forms.py:376
#: konova/forms.py:375
msgid "Add new document"
msgstr "Neues Dokument hinzufügen"
@ -543,10 +597,6 @@ 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:35
msgid "compensates intervention"
msgstr "kompensiert Eingriff"
#: compensation/templates/compensation/detail/compensation/view.html:50
#: intervention/templates/intervention/detail/view.html:75
msgid "Checked on "
@ -666,42 +716,46 @@ msgstr "Eingriffsverursacher"
msgid "None"
msgstr ""
#: compensation/views/compensation_views.py:123
#: compensation/views/compensation_views.py:74
msgid "Compensation {} added"
msgstr "Kompensation {} hinzugefügt"
#: compensation/views/compensation_views.py:179
#: compensation/views/eco_account_views.py:190 ema/views.py:128
#: intervention/views.py:428
msgid "Log"
msgstr "Log"
#: compensation/views/compensation_views.py:144
#: compensation/views/compensation_views.py:200
msgid "Compensation removed"
msgstr "Kompensation entfernt"
#: compensation/views/compensation_views.py:163
#: compensation/views/compensation_views.py:219
#: compensation/views/eco_account_views.py:289 ema/views.py:250
#: intervention/views.py:124
msgid "Document added"
msgstr "Dokument hinzugefügt"
#: compensation/views/compensation_views.py:219
#: compensation/views/compensation_views.py:275
#: compensation/views/eco_account_views.py:233 ema/views.py:194
msgid "State added"
msgstr "Zustand hinzugefügt"
#: compensation/views/compensation_views.py:238
#: compensation/views/compensation_views.py:294
#: compensation/views/eco_account_views.py:252 ema/views.py:213
msgid "Action added"
msgstr "Maßnahme hinzugefügt"
#: compensation/views/compensation_views.py:257
#: compensation/views/compensation_views.py:313
#: compensation/views/eco_account_views.py:271 ema/views.py:232
msgid "Deadline added"
msgstr "Frist/Termin hinzugefügt"
#: compensation/views/compensation_views.py:276
#: compensation/views/compensation_views.py:332
msgid "State removed"
msgstr "Zustand gelöscht"
#: compensation/views/compensation_views.py:295
#: compensation/views/compensation_views.py:351
msgid "Action removed"
msgstr "Maßnahme entfernt"
@ -775,14 +829,6 @@ msgstr "Gemarkung"
msgid "Search for district"
msgstr "Nach Gemarkung suchen"
#: intervention/forms/forms.py:30
msgid "Generated automatically"
msgstr "Automatisch generiert"
#: intervention/forms/forms.py:41
msgid "An explanatory name"
msgstr "Aussagekräftiger Titel"
#: intervention/forms/forms.py:45
msgid "Construction XY; Location ABC"
msgstr "Bauvorhaben XY; Flur ABC"
@ -837,10 +883,6 @@ msgstr "Datum Zulassung bzw. Satzungsbeschluss"
msgid "Binding on"
msgstr "Datum Bestandskraft"
#: intervention/forms/forms.py:177
msgid "Additional comment"
msgstr "Zusätzlicher Kommentar"
#: intervention/forms/forms.py:188
msgid "New intervention"
msgstr "Neuer Eingriff"
@ -879,7 +921,7 @@ msgstr "Datum des Widerspruchs"
msgid "Document"
msgstr "Dokument"
#: intervention/forms/modalForms.py:122 konova/forms.py:345
#: intervention/forms/modalForms.py:122 konova/forms.py:344
msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein"
@ -901,7 +943,7 @@ msgstr "Kompensationen und Zahlungen geprüft"
msgid "Run check"
msgstr "Prüfung vornehmen"
#: intervention/forms/modalForms.py:201 konova/forms.py:430
#: intervention/forms/modalForms.py:201 konova/forms.py:429
msgid ""
"I, {} {}, confirm that all necessary control steps have been performed by "
"myself."
@ -913,13 +955,6 @@ msgstr ""
msgid "Only recorded accounts can be selected for deductions"
msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden."
#: intervention/forms/modalForms.py:284 intervention/forms/modalForms.py:291
#: intervention/tables.py:88
#: intervention/templates/intervention/detail/view.html:19
#: konova/templates/konova/home.html:11 templates/navbar.html:22
msgid "Intervention"
msgstr "Eingriff"
#: intervention/forms/modalForms.py:286
msgid "Only shared interventions can be selected"
msgstr "Nur freigegebene Eingriffe können gewählt werden"
@ -1045,22 +1080,10 @@ msgstr "Widerspruch entfernen"
msgid "Exists"
msgstr "vorhanden"
#: intervention/views.py:71
msgid ""
"The identifier '{}' had to be changed to '{}' since another entry has been "
"added in the meanwhile, which uses this identifier"
msgstr ""
"Die Kennung '{}' musste zu '{}' geändert werden, da ein anderer Eintrag in "
"der Zwischenzeit angelegt wurde, welcher diese Kennung nun bereits verwendet"
#: intervention/views.py:76
msgid "Intervention {} added"
msgstr "Eingriff {} hinzugefügt"
#: intervention/views.py:79 intervention/views.py:258
msgid "Invalid input"
msgstr "Eingabe fehlerhaft"
#: intervention/views.py:212
msgid "This intervention has a revocation from {}"
msgstr "Es existiert ein Widerspruch vom {}"
@ -1140,11 +1163,11 @@ msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
msgid "Not editable"
msgstr "Nicht editierbar"
#: konova/forms.py:139 konova/forms.py:293
#: konova/forms.py:139 konova/forms.py:292
msgid "Confirm"
msgstr "Bestätige"
#: konova/forms.py:151 konova/forms.py:302
#: konova/forms.py:151 konova/forms.py:301
msgid "Remove"
msgstr "Löschen"
@ -1152,48 +1175,48 @@ msgstr "Löschen"
msgid "You are about to remove {} {}"
msgstr "Sie sind dabei {} {} zu löschen"
#: konova/forms.py:243 templates/form/main_data_collapse_form.html:47
#: konova/forms.py:243 templates/form/main_data_collapse_form.html:45
msgid "Geometry"
msgstr "Geometrie"
#: konova/forms.py:303
#: konova/forms.py:302
msgid "Are you sure?"
msgstr "Sind Sie sicher?"
#: konova/forms.py:330
#: konova/forms.py:329
msgid "Created on"
msgstr "Erstellt"
#: konova/forms.py:332
#: konova/forms.py:331
msgid "When has this file been created? Important for photos."
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
#: konova/forms.py:343
#: konova/forms.py:342
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
msgid "File"
msgstr "Datei"
#: konova/forms.py:407
#: konova/forms.py:406
msgid "Added document"
msgstr "Dokument hinzugefügt"
#: konova/forms.py:421
#: konova/forms.py:420
msgid "Confirm record"
msgstr "Verzeichnen bestätigen"
#: konova/forms.py:429
#: konova/forms.py:428
msgid "Record data"
msgstr "Daten verzeichnen"
#: konova/forms.py:436
#: konova/forms.py:435
msgid "Confirm unrecord"
msgstr "Entzeichnen bestätigen"
#: konova/forms.py:437
#: konova/forms.py:436
msgid "Unrecord data"
msgstr "Daten entzeichnen"
#: konova/forms.py:438
#: konova/forms.py:437
msgid "I, {} {}, confirm that this data must be unrecorded."
msgstr ""
"Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen."
@ -1286,6 +1309,14 @@ msgstr "Es gab einen Fehler im Formular."
msgid "There are errors in this intervention."
msgstr "Es liegen Fehler in diesem Eingriff vor:"
#: konova/utils/message_templates.py:13
msgid ""
"The identifier '{}' had to be changed to '{}' since another entry has been "
"added in the meanwhile, which uses this identifier"
msgstr ""
"Die Kennung '{}' musste zu '{}' geändert werden, da ein anderer Eintrag in "
"der Zwischenzeit angelegt wurde, welcher diese Kennung nun bereits verwendet"
#: konova/utils/messenger.py:69
msgid "{} checked"
msgstr "{} geprüft"
@ -1343,12 +1374,12 @@ msgid "Contact"
msgstr "Kontakt"
#: templates/form/generic_table_form.html:23
#: templates/form/main_data_collapse_form.html:61
#: templates/form/main_data_collapse_form.html:58
msgid "Cancel"
msgstr "Abbrechen"
#: templates/form/generic_table_form.html:27
#: templates/form/main_data_collapse_form.html:65
#: templates/form/main_data_collapse_form.html:62
msgid "Save"
msgstr "Speichern"
@ -1421,7 +1452,7 @@ msgstr "Zeitpunkt"
msgid "User"
msgstr "Nutzer"
#: templates/map/geom_form.html:9
#: templates/map/geom_form.html:8
msgid "No geometry added, yet."
msgstr "Keine Geometrie vorhanden"
@ -2737,6 +2768,9 @@ msgstr ""
msgid "A fontawesome icon field"
msgstr ""
#~ msgid "Invalid input"
#~ msgstr "Eingabe fehlerhaft"
#~ msgid "{} edited"
#~ msgstr "{} bearbeitet"
@ -2845,9 +2879,6 @@ msgstr ""
#~ msgid "Show intervention"
#~ msgstr "Zeige Eingriffe"
#~ msgid "Show compensation"
#~ msgstr "Zeige Kompensationen"
#~ msgid "Eco-account management"
#~ msgstr "Ökokontoverwaltung"