#7 New forms WIP

* adds saving functionality for new intervention form
* refactors new identifier generating, so a pre-generated identifier from a new element form will be checked again before saving
* adds css fixes for disturbing input field:focus bugs
* adds missing csrf token to new collapsible form
* adds/updates translations
* introduces mark_as_deleted as only marking instead of using delete() which will really delete from the db
This commit is contained in:
mipel 2021-09-23 15:05:17 +02:00
parent 951477c58f
commit 9b728e5d10
11 changed files with 375 additions and 182 deletions

View File

@ -74,6 +74,9 @@ class NewPaymentForm(BaseModalForm):
) )
) )
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.intervention = self.instance self.intervention = self.instance

View File

@ -8,23 +8,21 @@ Created on: 02.12.20
from dal import autocomplete from dal import autocomplete
from django import forms from django import forms
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.gis import forms as gis_forms
from django.contrib.gis.geos import Polygon from django.contrib.gis.geos import Polygon
from django.db import transaction from django.db import transaction
from django.urls import reverse from django.urls import reverse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from codelist.models import KonovaCode from codelist.models import KonovaCode
from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_PROCESS_TYPE_ID, CODELIST_LAW_ID, \ from codelist.settings import CODELIST_PROCESS_TYPE_ID, CODELIST_LAW_ID, \
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID
from compensation.models import EcoAccountDeduction, EcoAccount from compensation.models import EcoAccountDeduction, EcoAccount
from intervention.models import Intervention, Revocation, RevocationDocument from intervention.models import Intervention, Revocation, RevocationDocument, LegalData, ResponsibilityData
from konova.forms import BaseForm, BaseModalForm from konova.forms import BaseForm, BaseModalForm, SimpleGeomForm
from konova.settings import DEFAULT_LAT, DEFAULT_LON, DEFAULT_ZOOM, ZB_GROUP, ETS_GROUP from konova.settings import ZB_GROUP, ETS_GROUP
from konova.utils.general import format_german_float from konova.utils.general import format_german_float
from konova.utils.messenger import Messenger from konova.utils.messenger import Messenger
from konova.utils.user_checks import in_group from konova.utils.user_checks import in_group
from organisation.models import Organisation
from user.models import UserActionLogEntry, UserAction from user.models import UserActionLogEntry, UserAction
@ -40,10 +38,16 @@ class NewInterventionForm(BaseForm):
label_suffix="", label_suffix="",
help_text=_("An explanatory name"), help_text=_("An explanatory name"),
max_length=255, max_length=255,
widget=forms.TextInput(
attrs={
"placeholder": _("Construction XY; Location ABC")
}
)
) )
type = forms.ModelChoiceField( type = forms.ModelChoiceField(
label=_("Process type"), label=_("Process type"),
label_suffix="", label_suffix="",
help_text=_(""),
required=False, required=False,
queryset=KonovaCode.objects.filter( queryset=KonovaCode.objects.filter(
is_archived=False, is_archived=False,
@ -107,12 +111,22 @@ class NewInterventionForm(BaseForm):
label_suffix="", label_suffix="",
max_length=255, max_length=255,
required=False, required=False,
widget=forms.TextInput(
attrs={
"placeholder": _("ZB-123/ABC.456")
}
)
) )
conservation_office_file_number = forms.CharField( conservation_office_file_number = forms.CharField(
label=_("Conservation office file number"), label=_("Conservation office file number"),
label_suffix="", label_suffix="",
max_length=255, max_length=255,
required=False, required=False,
widget=forms.TextInput(
attrs={
"placeholder": _("ETS-123/ABC.456")
}
)
) )
handler = forms.CharField( handler = forms.CharField(
label=_("Intervention handler"), label=_("Intervention handler"),
@ -120,20 +134,45 @@ class NewInterventionForm(BaseForm):
max_length=255, max_length=255,
required=False, required=False,
help_text=_("Who performs the intervention"), help_text=_("Who performs the intervention"),
) widget=forms.TextInput(
geometry = gis_forms.MultiPolygonField(
widget=gis_forms.OSMWidget(
attrs={ attrs={
"default_lat": DEFAULT_LAT, "placeholder": _("Company Mustermann")
"default_lon": DEFAULT_LON, }
"default_zoom": DEFAULT_ZOOM, )
'map_width': 800, )
'map_height': 500 registration_date = forms.DateField(
label=_("Registration date"),
label_suffix=_(""),
required=False,
widget=forms.DateInput(
attrs={
"type": "date",
}, },
), format="%d.%m.%Y"
label=_("Map"), )
)
binding_date = forms.DateField(
label=_("Binding on"),
label_suffix=_(""),
required=False,
widget=forms.DateInput(
attrs={
"type": "date",
},
format="%d.%m.%Y"
)
)
comment = forms.CharField(
label_suffix="", label_suffix="",
help_text=_("Where does the intervention take place") label=_("Comment"),
required=False,
help_text=_("Additional comment"),
widget=forms.Textarea(
attrs={
"rows": 5,
"class": "w-100"
}
)
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -142,30 +181,69 @@ class NewInterventionForm(BaseForm):
self.action_url = reverse("intervention:new") self.action_url = reverse("intervention:new")
self.cancel_redirect = reverse("intervention:index") self.cancel_redirect = reverse("intervention:index")
def save(self, user: User): tmp_intervention = Intervention()
identifier = tmp_intervention._generate_new_identifier()
self.initialize_form_field("identifier", identifier)
def save(self, user: User, geom_form: SimpleGeomForm):
with transaction.atomic(): with transaction.atomic():
# Fetch data from cleaned POST values
identifier = self.cleaned_data.get("identifier", None) identifier = self.cleaned_data.get("identifier", None)
title = self.cleaned_data.get("title", None) title = self.cleaned_data.get("title", None)
_type = self.cleaned_data.get("type", None) _type = self.cleaned_data.get("type", None)
laws = self.cleaned_data.get("laws", None) laws = self.cleaned_data.get("laws", None)
handler = self.cleaned_data.get("handler", None) handler = self.cleaned_data.get("handler", None)
geometry = self.cleaned_data.get("geometry", Polygon()) registration_office = self.cleaned_data.get("registration_office", None)
conservation_office = self.cleaned_data.get("conservation_office", None)
conservation_office_file_number = self.cleaned_data.get("conservation_office_file_number", None)
registration_office_file_number = self.cleaned_data.get("registration_office_file_number", None)
binding_date = self.cleaned_data.get("binding_date", None)
registration_date = self.cleaned_data.get("registration_date", None)
comment = self.cleaned_data.get("comment", None)
# Create log entry
action = UserActionLogEntry.objects.create( action = UserActionLogEntry.objects.create(
user=user, user=user,
action=UserAction.CREATED, action=UserAction.CREATED,
) )
intervention = Intervention(
# Create legal data object (without M2M laws first)
legal_data = LegalData.objects.create(
registration_date=registration_date,
binding_date=binding_date,
process_type=_type,
)
# Then add the M2M laws to the object
legal_data.laws.set(laws)
# Create responsible data object
responsibility_data = ResponsibilityData.objects.create(
registration_office=registration_office,
conservation_office=conservation_office,
registration_file_number=registration_office_file_number,
conservation_file_number=conservation_office_file_number,
handler=handler,
)
# Process the geometry form
geometry = geom_form.save(action)
# Finally create main object, holding the other objects
intervention = Intervention.objects.create(
identifier=identifier, identifier=identifier,
title=title, title=title,
type=_type, responsible=responsibility_data,
laws=laws, legal=legal_data,
handler=handler,
geometry=geometry,
created=action, created=action,
geometry=geometry,
comment=comment,
) )
intervention.save()
# Add the log entry to the main objects log list
intervention.log.add(action) intervention.log.add(action)
# Add the performing user as the first user having access to the data
intervention.users.add(user)
return intervention return intervention
@ -384,6 +462,9 @@ class NewRevocationForm(BaseModalForm):
) )
) )
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.form_title = _("Add revocation") self.form_title = _("Add revocation")
@ -532,6 +613,9 @@ class NewDeductionForm(BaseModalForm):
), ),
) )
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.form_title = _("New Deduction") self.form_title = _("New Deduction")

View File

@ -260,14 +260,41 @@ class Intervention(BaseObject):
self.save() self.save()
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
""" Custom save functionality
Performs some pre-save checks:
1. Checking for existing identifiers
Args:
*args ():
**kwargs ():
Returns:
"""
if self.identifier is None or len(self.identifier) == 0: if self.identifier is None or len(self.identifier) == 0:
# Create new identifier # No identifier given
new_id = self._generate_new_identifier() self.identifier = self._generate_new_identifier()
while Intervention.objects.filter(identifier=new_id).exists():
new_id = self._generate_new_identifier() # Before saving, make sure the set identifier is not used, yet
self.identifier = new_id while Intervention.objects.filter(identifier=self.identifier).exists():
self.identifier = self._generate_new_identifier()
super().save(*args, **kwargs) super().save(*args, **kwargs)
def delete(self, using=None, keep_parents=False):
to_delete = [
self.legal,
self.responsible,
self.geometry,
self.log.all()
]
for entry in to_delete:
try:
entry.delete()
except AttributeError:
pass
super().delete(using, keep_parents)
def quality_check(self) -> list: def quality_check(self) -> list:
""" Quality check """ Quality check

View File

@ -1,6 +1,17 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n l10n %} {% 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 %} {% block body %}
<h2>{{data_form.form_title}}</h2>
{% include 'form/main_data_collapse_form.html' %} {% include 'form/main_data_collapse_form.html' %}
{% endblock %} {% endblock %}

View File

@ -59,11 +59,18 @@ def new_view(request: HttpRequest):
""" """
template = "intervention/new/view.html" template = "intervention/new/view.html"
form = NewInterventionForm(request.POST or None) data_form = NewInterventionForm(request.POST or None)
geom_form = SimpleGeomForm(request.POST or None, read_only=False)
if request.method == "POST": if request.method == "POST":
if form.is_valid(): if data_form.is_valid() and geom_form.is_valid():
intervention = form.save(request.user) generated_identifier = data_form.cleaned_data.get("identifier", None)
messages.success(request, _("Intervention {} added").format(intervention.title)) intervention = data_form.save(request.user, geom_form)
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")
)
messages.success(request, _("Intervention {} added").format(intervention.identifier))
return redirect("intervention:index") return redirect("intervention:index")
else: else:
messages.error(request, _("Invalid input")) messages.error(request, _("Invalid input"))
@ -71,7 +78,8 @@ def new_view(request: HttpRequest):
# For clarification: nothing in this case # For clarification: nothing in this case
pass pass
context = { context = {
"form": form, "data_form": data_form,
"geom_form": geom_form,
} }
context = BaseContext(request, context).context context = BaseContext(request, context).context
return render(request, template, context) return render(request, template, context)

View File

@ -13,8 +13,8 @@ from bootstrap_modal_forms.utils import is_ajax
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.gis.forms import GeometryField, OSMWidget from django.contrib.gis.forms import OSMWidget, MultiPolygonField
from django.contrib.gis.geos import Polygon from django.contrib.gis.geos import Polygon, MultiPolygon
from django.db import transaction from django.db import transaction
from django.http import HttpRequest, HttpResponseRedirect from django.http import HttpRequest, HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
@ -25,7 +25,8 @@ from compensation.models import EcoAccount, Compensation, EcoAccountDocument, Co
from ema.models import Ema, EmaDocument from ema.models import Ema, EmaDocument
from intervention.models import Intervention, Revocation, RevocationDocument, InterventionDocument from intervention.models import Intervention, Revocation, RevocationDocument, InterventionDocument
from konova.contexts import BaseContext from konova.contexts import BaseContext
from konova.models import BaseObject from konova.models import BaseObject, Geometry
from konova.settings import DEFAULT_SRID
from konova.utils.message_templates import FORM_INVALID from konova.utils.message_templates import FORM_INVALID
from user.models import UserActionLogEntry, UserAction from user.models import UserActionLogEntry, UserAction
@ -187,8 +188,7 @@ class BaseModalForm(BaseForm, BSModalForm):
full_width_fields = False full_width_fields = False
template = "modal/modal_form.html" template = "modal/modal_form.html"
def __init__(self, full_width_fields: bool = True, *args, **kwargs): def __init__(self, *args, **kwargs):
self.full_width_fields = full_width_fields
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if self.full_width_fields: if self.full_width_fields:
# Automatically add bootstrap w-100 class for maximum width of form fields in modals # Automatically add bootstrap w-100 class for maximum width of form fields in modals
@ -243,18 +243,26 @@ class SimpleGeomForm(BaseForm):
""" A geometry form for rendering geometry read-only using a widget """ A geometry form for rendering geometry read-only using a widget
""" """
geom = GeometryField( geom = MultiPolygonField(
srid=DEFAULT_SRID,
label=_("Geometry"),
help_text=_(""),
label_suffix="",
required=False, required=False,
disabled=True, disabled=False,
widget=OSMWidget( widget=OSMWidget(
attrs={ attrs={
"map_width": 600, "map_width": 600,
"map_height": 400, "map_height": 400,
# default_zoom defines the nearest possible zoom level from which the JS automatically
# zooms out if geometry requires a larger view port. So define a larger range for smaller geometries
"default_zoom": 25,
} }
) )
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
read_only = kwargs.pop("read_only", True)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# Initialize geometry # Initialize geometry
@ -267,8 +275,17 @@ class SimpleGeomForm(BaseForm):
geom = Polygon.from_bbox([0, 0, 0, 0]) geom = Polygon.from_bbox([0, 0, 0, 0])
# Zoom out to a very high level, so the user can see directly that there is no geometry for this entry # Zoom out to a very high level, so the user can see directly that there is no geometry for this entry
self.fields["geom"].widget.attrs["default_zoom"] = 1 self.fields["geom"].widget.attrs["default_zoom"] = 1
self.initialize_form_field("geom", geom) if read_only:
self.area = geom.area self.initialize_form_field("geom", geom)
self.area = geom.area
self.fields["geom"].disabled = True
def save(self, action: UserActionLogEntry):
geometry = Geometry.objects.create(
geom=self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID)),
created=action,
)
return geometry
class RemoveModalForm(BaseModalForm): class RemoveModalForm(BaseModalForm):
@ -294,15 +311,7 @@ class RemoveModalForm(BaseModalForm):
def save(self): def save(self):
if isinstance(self.instance, BaseObject): if isinstance(self.instance, BaseObject):
with transaction.atomic(): self.instance.mark_as_deleted(self.user)
action = UserActionLogEntry.objects.create(
user=self.user,
timestamp=timezone.now(),
action=UserAction.DELETED,
)
self.instance.deleted = action
self.instance.log.add(action)
self.instance.save()
else: else:
# If the class does not provide restorable delete functionality, we must delete the entry finally # If the class does not provide restorable delete functionality, we must delete the entry finally
self.instance.delete() self.instance.delete()
@ -360,6 +369,9 @@ class NewDocumentForm(BaseModalForm):
Ema: EmaDocument, Ema: EmaDocument,
} }
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.form_title = _("Add new document") self.form_title = _("Add new document")

View File

@ -9,6 +9,8 @@ import os
import uuid import uuid
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from django.utils import timezone
from django.utils.timezone import now from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.contrib.gis.db.models import MultiPolygonField from django.contrib.gis.db.models import MultiPolygonField
@ -61,8 +63,20 @@ class BaseResource(UuidModel):
abstract = True abstract = True
def delete(self, using=None, keep_parents=False): def delete(self, using=None, keep_parents=False):
if self.created: """ Base deletin of a resource
Args:
using ():
keep_parents ():
Returns:
"""
try:
self.created.delete() self.created.delete()
except ObjectDoesNotExist:
# Object does not exist anymore - we can skip this
pass
super().delete() super().delete()
@ -81,14 +95,13 @@ class BaseObject(BaseResource):
class Meta: class Meta:
abstract = True abstract = True
def delete(self, *args, **kwargs): def mark_as_deleted(self, user: User):
""" Custom delete functionality """ Mark an entry as deleted
Does not delete from database but sets a timestamp for being deleted on and which user deleted the object Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
Args: Args:
*args (): user (User): The performing user
**kwargs ():
Returns: Returns:
@ -97,13 +110,14 @@ class BaseObject(BaseResource):
# Nothing to do here # Nothing to do here
return return
_user = kwargs.get("user", None)
with transaction.atomic(): with transaction.atomic():
action = UserActionLogEntry.objects.create( action = UserActionLogEntry.objects.create(
user=_user, user=user,
action=UserAction.DELETED action=UserAction.DELETED,
timestamp=timezone.now()
) )
self.deleted = action self.deleted = action
self.log.add(action)
self.save() self.save()
def add_log_entry(self, action: UserAction, user: User, comment: str): def add_log_entry(self, action: UserAction, user: User, comment: str):

View File

@ -60,8 +60,18 @@ a {
color: var(--rlp-red); color: var(--rlp-red);
} }
input[type=text] { input[type=text], input[type=date] {
width: 100%; border: 1px solid gray;
border-radius: 0.2rem;
padding: 0.3rem 0.5rem;
}
input:focus, textarea:focus, select:focus{
outline: none;
border-color: var(--rlp-red);
box-shadow: 0 0 3px var(--rlp-red);
-moz-box-shadow: 0 0 3px var(--rlp-red);
-webkit-box-shadow: 0 0 3px var(--rlp-red);
} }
.body-content{ .body-content{
@ -137,6 +147,13 @@ input[type=text] {
height: 8rem; height: 8rem;
} }
/**
Overwrites bootstrap .btn:focus box shadow color
*/
.btn:focus{
box-shadow: 0 0 5px .2rem var(--rlp-gray-light);
}
.btn-default{ .btn-default{
color: white; color: white;
background-color: var(--rlp-red); background-color: var(--rlp-red);
@ -175,13 +192,6 @@ input[type=text] {
background-color: var(--rlp-gray-light); background-color: var(--rlp-gray-light);
} }
input:focus, textarea:focus, select:focus{
border-color: var(--rlp-red) !important;
box-shadow: 0 0 3px var(--rlp-red) !important;
-moz-box-shadow: 0 0 3px var(--rlp-red) !important;
-webkit-box-shadow: 0 0 3px var(--rlp-red) !important;
}
.check-star{ .check-star{
color: goldenrod; color: goldenrod;
} }
@ -219,4 +229,7 @@ No other approach worked to get the autocomplete fields to full width of parent
*/ */
.select2-container{ .select2-container{
width: 100% !important; width: 100% !important;
}
.select2-results__option--highlighted{
background-color: var(--rlp-red) !important;
} }

Binary file not shown.

View File

@ -7,16 +7,17 @@
#: compensation/forms.py:67 compensation/forms.py:264 compensation/forms.py:345 #: compensation/forms.py:67 compensation/forms.py:264 compensation/forms.py:345
#: intervention/filters.py:26 intervention/filters.py:40 #: intervention/filters.py:26 intervention/filters.py:40
#: intervention/filters.py:47 intervention/filters.py:48 #: intervention/filters.py:47 intervention/filters.py:48
#: intervention/forms.py:352 intervention/forms.py:364 #: intervention/forms.py:56 intervention/forms.py:151 intervention/forms.py:162
#: intervention/forms.py:377 konova/forms.py:139 konova/forms.py:282 #: intervention/forms.py:422 intervention/forms.py:434
#: konova/forms.py:317 konova/forms.py:322 konova/forms.py:334 #: intervention/forms.py:447 konova/forms.py:140 konova/forms.py:250
#: konova/forms.py:346 konova/forms.py:366 user/forms.py:38 #: konova/forms.py:296 konova/forms.py:331 konova/forms.py:336
#: konova/forms.py:348 konova/forms.py:360 konova/forms.py:380 user/forms.py:38
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-21 14:24+0200\n" "POT-Creation-Date: 2021-09-23 12:46+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -53,16 +54,16 @@ msgstr "Zahlung wird an diesem Datum erwartet"
#: ema/templates/ema/detail/includes/actions.html:34 #: ema/templates/ema/detail/includes/actions.html:34
#: ema/templates/ema/detail/includes/deadlines.html:34 #: ema/templates/ema/detail/includes/deadlines.html:34
#: ema/templates/ema/detail/includes/documents.html:31 #: ema/templates/ema/detail/includes/documents.html:31
#: intervention/forms.py:376 #: intervention/forms.py:446
#: intervention/templates/intervention/detail/includes/documents.html:31 #: intervention/templates/intervention/detail/includes/documents.html:31
#: intervention/templates/intervention/detail/includes/payments.html:34 #: intervention/templates/intervention/detail/includes/payments.html:34
#: intervention/templates/intervention/detail/includes/revocation.html:38 #: intervention/templates/intervention/detail/includes/revocation.html:38
#: konova/forms.py:345 #: konova/forms.py:359
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: compensation/forms.py:68 compensation/forms.py:265 compensation/forms.py:346 #: compensation/forms.py:68 compensation/forms.py:265 compensation/forms.py:346
#: intervention/forms.py:378 konova/forms.py:347 #: intervention/forms.py:448 konova/forms.py:361
msgid "Additional comment, maximum {} letters" msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
@ -97,11 +98,11 @@ msgstr "Biotoptyp wählen"
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36 #: 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-after.html:36
#: ema/templates/ema/detail/includes/states-before.html:36 #: ema/templates/ema/detail/includes/states-before.html:36
#: intervention/forms.py:517 #: intervention/forms.py:587
msgid "Surface" msgid "Surface"
msgstr "Fläche" msgstr "Fläche"
#: compensation/forms.py:155 intervention/forms.py:519 #: compensation/forms.py:155 intervention/forms.py:589
msgid "in m²" msgid "in m²"
msgstr "" msgstr ""
@ -117,7 +118,7 @@ msgstr "Geben Sie die Daten des neuen Zustandes ein"
msgid "Added state" msgid "Added state"
msgstr "Zustand hinzugefügt" msgstr "Zustand hinzugefügt"
#: compensation/forms.py:185 konova/forms.py:198 #: compensation/forms.py:185 konova/forms.py:199
msgid "Object removed" msgid "Object removed"
msgstr "Objekt entfernt" msgstr "Objekt entfernt"
@ -133,7 +134,7 @@ msgstr "Fristart wählen"
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31 #: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31
#: ema/templates/ema/detail/includes/deadlines.html:31 #: ema/templates/ema/detail/includes/deadlines.html:31
#: intervention/forms.py:351 #: intervention/forms.py:421
msgid "Date" msgid "Date"
msgstr "Datum" msgstr "Datum"
@ -257,7 +258,7 @@ msgstr ""
"wollen. Kontaktieren Sie die für die Abbuchungen verantwortlichen Nutzer!" "wollen. Kontaktieren Sie die für die Abbuchungen verantwortlichen Nutzer!"
#: compensation/tables.py:24 compensation/tables.py:164 ema/tables.py:28 #: compensation/tables.py:24 compensation/tables.py:164 ema/tables.py:28
#: intervention/forms.py:33 intervention/tables.py:23 #: intervention/forms.py:37 intervention/tables.py:23
#: intervention/templates/intervention/detail/includes/compensations.html:30 #: intervention/templates/intervention/detail/includes/compensations.html:30
msgid "Identifier" msgid "Identifier"
msgstr "Kennung" msgstr "Kennung"
@ -268,11 +269,11 @@ msgstr "Kennung"
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:28 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:28
#: compensation/templates/compensation/detail/eco_account/view.html:31 #: compensation/templates/compensation/detail/eco_account/view.html:31
#: ema/tables.py:33 ema/templates/ema/detail/includes/documents.html:28 #: ema/tables.py:33 ema/templates/ema/detail/includes/documents.html:28
#: ema/templates/ema/detail/view.html:24 intervention/forms.py:39 #: ema/templates/ema/detail/view.html:24 intervention/forms.py:43
#: intervention/tables.py:28 #: intervention/tables.py:28
#: intervention/templates/intervention/detail/includes/compensations.html:33 #: intervention/templates/intervention/detail/includes/compensations.html:33
#: intervention/templates/intervention/detail/includes/documents.html:28 #: intervention/templates/intervention/detail/includes/documents.html:28
#: intervention/templates/intervention/detail/view.html:31 konova/forms.py:316 #: intervention/templates/intervention/detail/view.html:31 konova/forms.py:330
msgid "Title" msgid "Title"
msgstr "Bezeichnung" msgstr "Bezeichnung"
@ -363,7 +364,7 @@ msgstr "Ökokonten"
#: compensation/tables.py:222 #: compensation/tables.py:222
#: compensation/templates/compensation/detail/eco_account/view.html:19 #: compensation/templates/compensation/detail/eco_account/view.html:19
#: intervention/forms.py:501 intervention/forms.py:508 #: intervention/forms.py:571 intervention/forms.py:578
#: konova/templates/konova/home.html:88 templates/navbar.html:34 #: konova/templates/konova/home.html:88 templates/navbar.html:34
msgid "Eco-account" msgid "Eco-account"
msgstr "Ökokonto" msgstr "Ökokonto"
@ -476,7 +477,7 @@ msgstr "Dokumente"
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:14 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:14
#: ema/templates/ema/detail/includes/documents.html:14 #: ema/templates/ema/detail/includes/documents.html:14
#: intervention/templates/intervention/detail/includes/documents.html:14 #: intervention/templates/intervention/detail/includes/documents.html:14
#: konova/forms.py:365 #: konova/forms.py:379
msgid "Add new document" msgid "Add new document"
msgstr "Neues Dokument hinzufügen" msgstr "Neues Dokument hinzufügen"
@ -581,7 +582,7 @@ msgstr "Zuletzt bearbeitet"
#: compensation/templates/compensation/detail/compensation/view.html:92 #: compensation/templates/compensation/detail/compensation/view.html:92
#: compensation/templates/compensation/detail/eco_account/view.html:91 #: compensation/templates/compensation/detail/eco_account/view.html:91
#: ema/templates/ema/detail/view.html:82 intervention/forms.py:285 #: ema/templates/ema/detail/view.html:82 intervention/forms.py:355
#: intervention/templates/intervention/detail/view.html:116 #: intervention/templates/intervention/detail/view.html:116
msgid "Shared with" msgid "Shared with"
msgstr "Freigegeben für" msgstr "Freigegeben für"
@ -642,19 +643,19 @@ msgid "Missing"
msgstr "Fehlt" msgstr "Fehlt"
#: compensation/templates/compensation/detail/eco_account/view.html:58 #: compensation/templates/compensation/detail/eco_account/view.html:58
#: ema/templates/ema/detail/view.html:42 intervention/forms.py:91 #: ema/templates/ema/detail/view.html:42 intervention/forms.py:101
#: intervention/templates/intervention/detail/view.html:56 #: intervention/templates/intervention/detail/view.html:56
msgid "Conservation office" msgid "Conservation office"
msgstr "Eintragungsstelle" msgstr "Eintragungsstelle"
#: compensation/templates/compensation/detail/eco_account/view.html:62 #: compensation/templates/compensation/detail/eco_account/view.html:62
#: ema/templates/ema/detail/view.html:46 intervention/forms.py:112 #: ema/templates/ema/detail/view.html:46 intervention/forms.py:127
#: intervention/templates/intervention/detail/view.html:60 #: intervention/templates/intervention/detail/view.html:60
msgid "Conservation office file number" msgid "Conservation office file number"
msgstr "Aktenzeichen Eintragungsstelle" msgstr "Aktenzeichen Eintragungsstelle"
#: compensation/templates/compensation/detail/eco_account/view.html:66 #: compensation/templates/compensation/detail/eco_account/view.html:66
#: ema/templates/ema/detail/view.html:50 intervention/forms.py:118 #: ema/templates/ema/detail/view.html:50 intervention/forms.py:138
#: intervention/templates/intervention/detail/view.html:64 #: intervention/templates/intervention/detail/view.html:64
msgid "Intervention handler" msgid "Intervention handler"
msgstr "Eingriffsverursacher" msgstr "Eingriffsverursacher"
@ -666,7 +667,7 @@ msgstr ""
#: compensation/views/compensation_views.py:123 #: compensation/views/compensation_views.py:123
#: compensation/views/eco_account_views.py:190 ema/views.py:128 #: compensation/views/eco_account_views.py:190 ema/views.py:128
#: intervention/views.py:391 #: intervention/views.py:393
msgid "Log" msgid "Log"
msgstr "Log" msgstr "Log"
@ -676,7 +677,7 @@ msgstr "Kompensation entfernt"
#: compensation/views/compensation_views.py:163 #: compensation/views/compensation_views.py:163
#: compensation/views/eco_account_views.py:289 ema/views.py:250 #: compensation/views/eco_account_views.py:289 ema/views.py:250
#: intervention/views.py:94 #: intervention/views.py:96
msgid "Document added" msgid "Document added"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
@ -712,16 +713,16 @@ msgid "Deduction removed"
msgstr "Abbuchung entfernt" msgstr "Abbuchung entfernt"
#: compensation/views/eco_account_views.py:210 ema/views.py:171 #: compensation/views/eco_account_views.py:210 ema/views.py:171
#: intervention/views.py:431 #: intervention/views.py:433
msgid "{} unrecorded" msgid "{} unrecorded"
msgstr "{} entzeichnet" msgstr "{} entzeichnet"
#: compensation/views/eco_account_views.py:210 ema/views.py:171 #: compensation/views/eco_account_views.py:210 ema/views.py:171
#: intervention/views.py:431 #: intervention/views.py:433
msgid "{} recorded" msgid "{} recorded"
msgstr "{} verzeichnet" msgstr "{} verzeichnet"
#: compensation/views/eco_account_views.py:346 intervention/views.py:413 #: compensation/views/eco_account_views.py:346 intervention/views.py:415
msgid "Deduction added" msgid "Deduction added"
msgstr "Abbuchung hinzugefügt" msgstr "Abbuchung hinzugefügt"
@ -773,111 +774,129 @@ msgstr "Gemarkung"
msgid "Search for district" msgid "Search for district"
msgstr "Nach Gemarkung suchen" msgstr "Nach Gemarkung suchen"
#: intervention/forms.py:36 #: intervention/forms.py:40
msgid "Generated automatically" msgid "Generated automatically"
msgstr "Automatisch generiert" msgstr "Automatisch generiert"
#: intervention/forms.py:41 #: intervention/forms.py:45
msgid "An explanatory name" msgid "An explanatory name"
msgstr "Aussagekräftiger Titel" msgstr "Aussagekräftiger Titel"
#: intervention/forms.py:45 #: intervention/forms.py:49
msgid "Construction XY; Location ABC"
msgstr "Bauvorhaben XY; Flur ABC"
#: intervention/forms.py:54
#: intervention/templates/intervention/detail/view.html:35 #: intervention/templates/intervention/detail/view.html:35
msgid "Process type" msgid "Process type"
msgstr "Verfahrenstyp" msgstr "Verfahrenstyp"
#: intervention/forms.py:60 #: intervention/forms.py:70
#: intervention/templates/intervention/detail/view.html:39 #: intervention/templates/intervention/detail/view.html:39
msgid "Law" msgid "Law"
msgstr "Gesetz" msgstr "Gesetz"
#: intervention/forms.py:62 #: intervention/forms.py:72
msgid "Multiple selection possible" msgid "Multiple selection possible"
msgstr "Mehrfachauswahl möglich" msgstr "Mehrfachauswahl möglich"
#: intervention/forms.py:76 #: intervention/forms.py:86
#: intervention/templates/intervention/detail/view.html:48 #: intervention/templates/intervention/detail/view.html:48
msgid "Registration office" msgid "Registration office"
msgstr "Zulassungsbehörde" msgstr "Zulassungsbehörde"
#: intervention/forms.py:106 #: intervention/forms.py:116
#: intervention/templates/intervention/detail/view.html:52 #: intervention/templates/intervention/detail/view.html:52
msgid "Registration office file number" msgid "Registration office file number"
msgstr "Aktenzeichen Zulassungsbehörde" msgstr "Aktenzeichen Zulassungsbehörde"
#: intervention/forms.py:122 #: intervention/forms.py:122
msgid "ZB-123/ABC.456"
msgstr ""
#: intervention/forms.py:133
msgid "ETS-123/ABC.456"
msgstr ""
#: intervention/forms.py:142
msgid "Who performs the intervention" msgid "Who performs the intervention"
msgstr "Wer führt den Eingriff durch" msgstr "Wer führt den Eingriff durch"
#: intervention/forms.py:134 #: intervention/forms.py:145
msgid "Map" msgid "Company Mustermann"
msgstr "Karte" msgstr "Firma Mustermann"
#: intervention/forms.py:136 #: intervention/forms.py:150
msgid "Where does the intervention take place" #: intervention/templates/intervention/detail/view.html:96
msgstr "Wo findet der Eingriff statt" msgid "Registration date"
msgstr "Datum Zulassung bzw. Satzungsbeschluss"
#: intervention/forms.py:141 #: intervention/forms.py:161
#: intervention/templates/intervention/detail/view.html:100
msgid "Binding on"
msgstr "Datum Bestandskraft"
#: intervention/forms.py:174
msgid "New intervention" msgid "New intervention"
msgstr "Neuer Eingriff" msgstr "Neuer Eingriff"
#: intervention/forms.py:178 #: intervention/forms.py:248
msgid "Edit intervention" msgid "Edit intervention"
msgstr "Eingriff bearbeiten" msgstr "Eingriff bearbeiten"
#: intervention/forms.py:274 #: intervention/forms.py:344
msgid "Share link" msgid "Share link"
msgstr "Freigabelink" msgstr "Freigabelink"
#: intervention/forms.py:276 #: intervention/forms.py:346
msgid "Send this link to users who you want to have writing access on the data" 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" msgstr "Andere Nutzer erhalten über diesen Link Zugriff auf die Daten"
#: intervention/forms.py:288 #: intervention/forms.py:358
msgid "Remove check to remove access for this user" msgid "Remove check to remove access for this user"
msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen" msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen"
#: intervention/forms.py:299 #: intervention/forms.py:369
#: intervention/templates/intervention/detail/includes/controls.html:15 #: intervention/templates/intervention/detail/includes/controls.html:15
msgid "Share" msgid "Share"
msgstr "Freigabe" msgstr "Freigabe"
#: intervention/forms.py:300 #: intervention/forms.py:370
msgid "Share settings for {}" msgid "Share settings for {}"
msgstr "Freigabe Einstellungen für {}" msgstr "Freigabe Einstellungen für {}"
#: intervention/forms.py:353 #: intervention/forms.py:423
msgid "Date of revocation" msgid "Date of revocation"
msgstr "Datum des Widerspruchs" msgstr "Datum des Widerspruchs"
#: intervention/forms.py:363 #: intervention/forms.py:433
#: intervention/templates/intervention/detail/includes/revocation.html:35 #: intervention/templates/intervention/detail/includes/revocation.html:35
msgid "Document" msgid "Document"
msgstr "Dokument" msgstr "Dokument"
#: intervention/forms.py:366 konova/forms.py:335 #: intervention/forms.py:436 konova/forms.py:349
msgid "Must be smaller than 15 Mb" msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein" msgstr "Muss kleiner als 15 Mb sein"
#: intervention/forms.py:389 #: intervention/forms.py:459
#: intervention/templates/intervention/detail/includes/revocation.html:18 #: intervention/templates/intervention/detail/includes/revocation.html:18
msgid "Add revocation" msgid "Add revocation"
msgstr "Widerspruch hinzufügen" msgstr "Widerspruch hinzufügen"
#: intervention/forms.py:429 #: intervention/forms.py:499
msgid "Checked intervention data" msgid "Checked intervention data"
msgstr "Eingriffsdaten geprüft" msgstr "Eingriffsdaten geprüft"
#: intervention/forms.py:435 #: intervention/forms.py:505
msgid "Checked compensations data and payments" msgid "Checked compensations data and payments"
msgstr "Kompensationen und Zahlungen geprüft" msgstr "Kompensationen und Zahlungen geprüft"
#: intervention/forms.py:443 #: intervention/forms.py:513
#: intervention/templates/intervention/detail/includes/controls.html:19 #: intervention/templates/intervention/detail/includes/controls.html:19
msgid "Run check" msgid "Run check"
msgstr "Prüfung vornehmen" msgstr "Prüfung vornehmen"
#: intervention/forms.py:444 konova/forms.py:419 #: intervention/forms.py:514 konova/forms.py:433
msgid "" msgid ""
"I, {} {}, confirm that all necessary control steps have been performed by " "I, {} {}, confirm that all necessary control steps have been performed by "
"myself." "myself."
@ -885,30 +904,30 @@ msgstr ""
"Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt "
"wurden:" "wurden:"
#: intervention/forms.py:503 #: intervention/forms.py:573
msgid "Only recorded accounts can be selected for deductions" msgid "Only recorded accounts can be selected for deductions"
msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden." msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden."
#: intervention/forms.py:522 intervention/forms.py:529 #: intervention/forms.py:592 intervention/forms.py:599
#: intervention/tables.py:88 #: intervention/tables.py:88
#: intervention/templates/intervention/detail/view.html:19 #: intervention/templates/intervention/detail/view.html:19
#: konova/templates/konova/home.html:11 templates/navbar.html:22 #: konova/templates/konova/home.html:11 templates/navbar.html:22
msgid "Intervention" msgid "Intervention"
msgstr "Eingriff" msgstr "Eingriff"
#: intervention/forms.py:524 #: intervention/forms.py:594
msgid "Only shared interventions can be selected" msgid "Only shared interventions can be selected"
msgstr "Nur freigegebene Eingriffe können gewählt werden" msgstr "Nur freigegebene Eingriffe können gewählt werden"
#: intervention/forms.py:537 #: intervention/forms.py:607
msgid "New Deduction" msgid "New Deduction"
msgstr "Neue Abbuchung" msgstr "Neue Abbuchung"
#: intervention/forms.py:538 #: intervention/forms.py:608
msgid "Enter the information for a new deduction from a chosen eco-account" msgid "Enter the information for a new deduction from a chosen eco-account"
msgstr "Geben Sie die Informationen für eine neue Abbuchung ein." msgstr "Geben Sie die Informationen für eine neue Abbuchung ein."
#: intervention/forms.py:574 #: intervention/forms.py:644
msgid "" msgid ""
"Eco-account {} is not recorded yet. You can only deduct from recorded " "Eco-account {} is not recorded yet. You can only deduct from recorded "
"accounts." "accounts."
@ -916,7 +935,7 @@ msgstr ""
"Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von " "Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von "
"verzeichneten Ökokonten erfolgen." "verzeichneten Ökokonten erfolgen."
#: intervention/forms.py:587 #: intervention/forms.py:657
msgid "" msgid ""
"The account {} has not enough surface for a deduction of {} m². There are " "The account {} has not enough surface for a deduction of {} m². There are "
"only {} m² left" "only {} m² left"
@ -1017,31 +1036,23 @@ msgstr "Vom"
msgid "Remove revocation" msgid "Remove revocation"
msgstr "Widerspruch entfernen" msgstr "Widerspruch entfernen"
#: intervention/templates/intervention/detail/view.html:96
msgid "Registration date"
msgstr "Datum Zulassung bzw. Satzungsbeschluss"
#: intervention/templates/intervention/detail/view.html:100
msgid "Binding on"
msgstr "Datum Bestandskraft"
#: intervention/templates/intervention/detail/view.html:103 #: intervention/templates/intervention/detail/view.html:103
msgid "Exists" msgid "Exists"
msgstr "vorhanden" msgstr "vorhanden"
#: intervention/views.py:66 #: intervention/views.py:67
msgid "Intervention {} added" msgid "Intervention {} added"
msgstr "Eingriff {} hinzugefügt" msgstr "Eingriff {} hinzugefügt"
#: intervention/views.py:69 intervention/views.py:224 #: intervention/views.py:70 intervention/views.py:226
msgid "Invalid input" msgid "Invalid input"
msgstr "Eingabe fehlerhaft" msgstr "Eingabe fehlerhaft"
#: intervention/views.py:182 #: intervention/views.py:184
msgid "This intervention has a revocation from {}" msgid "This intervention has a revocation from {}"
msgstr "Es existiert ein Widerspruch vom {}" msgstr "Es existiert ein Widerspruch vom {}"
#: intervention/views.py:198 #: intervention/views.py:200
msgid "" msgid ""
"Remember: This data has not been shared with you, yet. This means you can " "Remember: This data has not been shared with you, yet. This means you can "
"only read but can not edit or perform any actions like running a check or " "only read but can not edit or perform any actions like running a check or "
@ -1051,43 +1062,43 @@ msgstr ""
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, " "bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
"noch Prüfungen durchführen oder verzeichnen können." "noch Prüfungen durchführen oder verzeichnen können."
#: intervention/views.py:221 #: intervention/views.py:223
msgid "{} edited" msgid "{} edited"
msgstr "{} bearbeitet" msgstr "{} bearbeitet"
#: intervention/views.py:250 #: intervention/views.py:252
msgid "{} removed" msgid "{} removed"
msgstr "{} entfernt" msgstr "{} entfernt"
#: intervention/views.py:271 #: intervention/views.py:273
msgid "Revocation removed" msgid "Revocation removed"
msgstr "Widerspruch entfernt" msgstr "Widerspruch entfernt"
#: intervention/views.py:297 #: intervention/views.py:299
msgid "{} has already been shared with you" msgid "{} has already been shared with you"
msgstr "{} wurde bereits für Sie freigegeben" msgstr "{} wurde bereits für Sie freigegeben"
#: intervention/views.py:302 #: intervention/views.py:304
msgid "{} has been shared with you" msgid "{} has been shared with you"
msgstr "{} ist nun für Sie freigegeben" msgstr "{} ist nun für Sie freigegeben"
#: intervention/views.py:309 #: intervention/views.py:311
msgid "Share link invalid" msgid "Share link invalid"
msgstr "Freigabelink ungültig" msgstr "Freigabelink ungültig"
#: intervention/views.py:330 #: intervention/views.py:332
msgid "Share settings updated" msgid "Share settings updated"
msgstr "Freigabe Einstellungen aktualisiert" msgstr "Freigabe Einstellungen aktualisiert"
#: intervention/views.py:349 #: intervention/views.py:351
msgid "Check performed" msgid "Check performed"
msgstr "Prüfung durchgeführt" msgstr "Prüfung durchgeführt"
#: intervention/views.py:369 #: intervention/views.py:371
msgid "Revocation added" msgid "Revocation added"
msgstr "Widerspruch hinzugefügt" msgstr "Widerspruch hinzugefügt"
#: intervention/views.py:436 #: intervention/views.py:438
msgid "There are errors on this intervention:" msgid "There are errors on this intervention:"
msgstr "Es liegen Fehler in diesem Eingriff vor:" msgstr "Es liegen Fehler in diesem Eingriff vor:"
@ -1112,60 +1123,64 @@ msgstr ""
msgid "You need to be part of another user group." msgid "You need to be part of another user group."
msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!" msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
#: konova/forms.py:68 #: konova/forms.py:69
msgid "Not editable" msgid "Not editable"
msgstr "Nicht editierbar" msgstr "Nicht editierbar"
#: konova/forms.py:138 konova/forms.py:281 #: konova/forms.py:139 konova/forms.py:295
msgid "Confirm" msgid "Confirm"
msgstr "Bestätige" msgstr "Bestätige"
#: konova/forms.py:150 konova/forms.py:290 #: konova/forms.py:151 konova/forms.py:304
msgid "Remove" msgid "Remove"
msgstr "Löschen" msgstr "Löschen"
#: konova/forms.py:152 #: konova/forms.py:153
msgid "You are about to remove {} {}" msgid "You are about to remove {} {}"
msgstr "Sie sind dabei {} {} zu löschen" msgstr "Sie sind dabei {} {} zu löschen"
#: konova/forms.py:291 #: konova/forms.py:249 templates/form/main_data_collapse_form.html:47
msgid "Geometry"
msgstr "Geometrie"
#: konova/forms.py:305
msgid "Are you sure?" msgid "Are you sure?"
msgstr "Sind Sie sicher?" msgstr "Sind Sie sicher?"
#: konova/forms.py:321 #: konova/forms.py:335
msgid "Created on" msgid "Created on"
msgstr "Erstellt" msgstr "Erstellt"
#: konova/forms.py:323 #: konova/forms.py:337
msgid "When has this file been created? Important for photos." msgid "When has this file been created? Important for photos."
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?" msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
#: konova/forms.py:333 #: konova/forms.py:347
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
msgid "File" msgid "File"
msgstr "Datei" msgstr "Datei"
#: konova/forms.py:396 #: konova/forms.py:410
msgid "Added document" msgid "Added document"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
#: konova/forms.py:410 #: konova/forms.py:424
msgid "Confirm record" msgid "Confirm record"
msgstr "Verzeichnen bestätigen" msgstr "Verzeichnen bestätigen"
#: konova/forms.py:418 #: konova/forms.py:432
msgid "Record data" msgid "Record data"
msgstr "Daten verzeichnen" msgstr "Daten verzeichnen"
#: konova/forms.py:425 #: konova/forms.py:439
msgid "Confirm unrecord" msgid "Confirm unrecord"
msgstr "Entzeichnen bestätigen" msgstr "Entzeichnen bestätigen"
#: konova/forms.py:426 #: konova/forms.py:440
msgid "Unrecord data" msgid "Unrecord data"
msgstr "Daten entzeichnen" msgstr "Daten entzeichnen"
#: konova/forms.py:427 #: konova/forms.py:441
msgid "I, {} {}, confirm that this data must be unrecorded." msgid "I, {} {}, confirm that this data must be unrecorded."
msgstr "" msgstr ""
"Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen." "Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen."
@ -1311,12 +1326,12 @@ msgid "Contact"
msgstr "Kontakt" msgstr "Kontakt"
#: templates/form/generic_table_form.html:23 #: templates/form/generic_table_form.html:23
#: templates/form/main_data_collapse_form.html:58 #: templates/form/main_data_collapse_form.html:61
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: templates/form/generic_table_form.html:27 #: templates/form/generic_table_form.html:27
#: templates/form/main_data_collapse_form.html:62 #: templates/form/main_data_collapse_form.html:65
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@ -1324,7 +1339,7 @@ msgstr "Speichern"
msgid "Fields with * are required." msgid "Fields with * are required."
msgstr "* sind Pflichtfelder." msgstr "* sind Pflichtfelder."
#: templates/form/main_data_collapse_form.html:13 #: templates/form/main_data_collapse_form.html:14
msgid "" msgid ""
"\n" "\n"
" First enter the most basic data. Of course you can " " First enter the most basic data. Of course you can "
@ -1335,23 +1350,20 @@ msgid ""
" " " "
msgstr "" msgstr ""
"\n" "\n"
"Geben Sie zunächst die grundlegenden Daten ein. Sie können diese später immer noch ändern.\n" "Geben Sie zunächst die grundlegenden Daten ein. Sie können diese später "
"Alle weiteren Daten, wie Dokumente oder weitere Details, können nach dem Speichern des neuen Eintrags hinzugefügt " "immer noch ändern.\n"
"werden.\n" "Alle weiteren Daten, wie Dokumente oder weitere Details, können nach dem "
"Speichern des neuen Eintrags hinzugefügt werden.\n"
" " " "
#: templates/form/main_data_collapse_form.html:19 #: templates/form/main_data_collapse_form.html:20
msgid "Open the input topic with a simple click." msgid "Open the input topic with a simple click."
msgstr "Mit einem Linksklick öffnen Sie den jeweiligen Formularbereich." msgstr "Mit einem Linksklick öffnen Sie den jeweiligen Formularbereich."
#: templates/form/main_data_collapse_form.html:29 #: templates/form/main_data_collapse_form.html:30
msgid "General data" msgid "General data"
msgstr "Allgemeine Daten" msgstr "Allgemeine Daten"
#: templates/form/main_data_collapse_form.html:44
msgid "Geometry"
msgstr "Geometrie"
#: templates/generic_index.html:28 #: templates/generic_index.html:28
msgid "New entry" msgid "New entry"
msgstr "Neuer Eintrag" msgstr "Neuer Eintrag"
@ -2708,6 +2720,12 @@ msgstr ""
msgid "A fontawesome icon field" msgid "A fontawesome icon field"
msgstr "" msgstr ""
#~ msgid "Map"
#~ msgstr "Karte"
#~ msgid "Where does the intervention take place"
#~ msgstr "Wo findet der Eingriff statt"
#~ msgid "Which intervention type is this" #~ msgid "Which intervention type is this"
#~ msgstr "Welcher Eingriffstyp" #~ msgstr "Welcher Eingriffstyp"

View File

@ -1,5 +1,6 @@
{% load i18n l10n fontawesome_5 %} {% load i18n l10n fontawesome_5 %}
<form method="post" action="{{ form.action_url }}" {% for attr_key, attr_val in form.form_attrs.items %} {{attr_key}}="{{attr_val}}"{% endfor %}> <form method="post" action="{{ form.action_url }}" {% for attr_key, attr_val in form.form_attrs.items %} {{attr_key}}="{{attr_val}}"{% endfor %}>
{% csrf_token %}
<h2>{{form.form_title}}</h2> <h2>{{form.form_title}}</h2>
<div id="help" class="col"> <div id="help" class="col">
<div class="row rlp-gd-outline p-2"> <div class="row rlp-gd-outline p-2">
@ -31,7 +32,9 @@
</div> </div>
<div id="dataCard" class="collapse" aria-labelledby="dataCardHeader"> <div id="dataCard" class="collapse" aria-labelledby="dataCardHeader">
<div class="card-body"> <div class="card-body">
{% include 'form/generic_table_form_body.html' %} {% with data_form as form %}
{% include 'form/generic_table_form_body.html' %}
{% endwith %}
</div> </div>
</div> </div>
</div> </div>
@ -44,9 +47,9 @@
{% trans 'Geometry' %} {% trans 'Geometry' %}
</h5> </h5>
</div> </div>
<div id="geometryCard" class="collapse" aria-labelledby="geometryCardHeader"> <div id="geometryCard" class="collapse show" aria-labelledby="geometryCardHeader">
<div class="card-body"> <div class="card-body">
ToDo {% include 'map/geom_form.html' %}
</div> </div>
</div> </div>
</div> </div>