* introduces bootstrap class form-control for proper html form input rendering
* fixes bug where missing shared users for an entry resulted in a None exception
* adds GenerateInput with template in generate-content-input.html, which provides a generate button for fetching server-side content
* adds/updates translations
This commit is contained in:
mpeltriaux 2021-09-27 13:57:56 +02:00
parent a1763dc426
commit 72a196d76f
12 changed files with 277 additions and 193 deletions

View File

@ -46,6 +46,11 @@ class NewPaymentForm(BaseModalForm):
label=_con("money", "Amount"), # contextual translation
label_suffix=_(""),
help_text=_("in Euro"),
widget=forms.NumberInput(
attrs={
"class": "form-control"
}
)
)
due = forms.DateField(
label=_("Due on"),
@ -56,6 +61,7 @@ class NewPaymentForm(BaseModalForm):
attrs={
"type": "date",
"data-provide": "datepicker",
"class": "form-control",
},
format="%d.%m.%Y"
)
@ -69,14 +75,11 @@ class NewPaymentForm(BaseModalForm):
widget=forms.Textarea(
attrs={
"rows": 5,
"class": "w-100"
"class": "form-control"
}
)
)
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.intervention = self.instance
@ -155,7 +158,12 @@ class NewStateModalForm(BaseModalForm):
label=_("Surface"),
label_suffix="",
required=True,
help_text=_("in m²")
help_text=_("in m²"),
widget=forms.NumberInput(
attrs={
"class": "form-control",
}
)
)
def __init__(self, *args, **kwargs):
@ -243,7 +251,7 @@ class NewDeadlineModalForm(BaseModalForm):
choices=DeadlineType.choices,
widget=forms.Select(
attrs={
"class": "custom-select"
"class": "form-control"
}
)
)
@ -256,6 +264,7 @@ class NewDeadlineModalForm(BaseModalForm):
attrs={
"type": "date",
"data-provide": "datepicker",
"class": "form-control",
},
format="%d.%m.%Y"
)
@ -270,6 +279,7 @@ class NewDeadlineModalForm(BaseModalForm):
attrs={
"cols": 30,
"rows": 5,
"class": "form-control",
}
)
)
@ -329,7 +339,7 @@ class NewActionModalForm(BaseModalForm):
choices=UnitChoices.choices,
widget=forms.Select(
attrs={
"class": "custom-select"
"class": "form-control"
}
)
)
@ -340,6 +350,11 @@ class NewActionModalForm(BaseModalForm):
help_text=_("Insert the amount"),
decimal_places=2,
min_value=0.00,
widget=forms.NumberInput(
attrs={
"class": "form-control",
}
)
)
comment = forms.CharField(
required=False,
@ -350,7 +365,7 @@ class NewActionModalForm(BaseModalForm):
widget=forms.Textarea(
attrs={
"rows": 5,
"class": "w-100"
"class": "form-control",
}
)
)

View File

@ -5,6 +5,7 @@ Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 01.12.20
"""
from django.contrib.auth.models import User
from django.http import HttpRequest
from django.template.loader import render_to_string
from django.urls import reverse
@ -148,6 +149,8 @@ class CompensationTable(BaseTable):
"""
html = ""
if value is None:
value = User.objects.none()
has_access = value.filter(
username=self.user.username
).exists()

View File

@ -9,13 +9,14 @@ from dal import autocomplete
from django import forms
from django.contrib.auth.models import User
from django.db import transaction
from django.urls import reverse
from django.urls import reverse, reverse_lazy
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from codelist.models import KonovaCode
from codelist.settings import CODELIST_PROCESS_TYPE_ID, CODELIST_LAW_ID, \
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID
from intervention.inputs import GenerateInput
from intervention.models import Intervention, LegalData, ResponsibilityData
from konova.forms import BaseForm, SimpleGeomForm
from user.models import UserActionLogEntry, UserAction
@ -27,6 +28,12 @@ class NewInterventionForm(BaseForm):
label_suffix="",
max_length=255,
help_text=_("Generated automatically"),
widget=GenerateInput(
attrs={
"class": "form-control",
"url": reverse_lazy("intervention:new-id"),
}
)
)
title = forms.CharField(
label=_("Title"),
@ -35,7 +42,8 @@ class NewInterventionForm(BaseForm):
max_length=255,
widget=forms.TextInput(
attrs={
"placeholder": _("Construction XY; Location ABC")
"placeholder": _("Construction XY; Location ABC"),
"class": "form-control",
}
)
)
@ -108,7 +116,8 @@ class NewInterventionForm(BaseForm):
required=False,
widget=forms.TextInput(
attrs={
"placeholder": _("ZB-123/ABC.456")
"placeholder": _("ZB-123/ABC.456"),
"class": "form-control",
}
)
)
@ -119,7 +128,8 @@ class NewInterventionForm(BaseForm):
required=False,
widget=forms.TextInput(
attrs={
"placeholder": _("ETS-123/ABC.456")
"placeholder": _("ETS-123/ABC.456"),
"class": "form-control",
}
)
)
@ -131,7 +141,8 @@ class NewInterventionForm(BaseForm):
help_text=_("Who performs the intervention"),
widget=forms.TextInput(
attrs={
"placeholder": _("Company Mustermann")
"placeholder": _("Company Mustermann"),
"class": "form-control",
}
)
)
@ -142,6 +153,7 @@ class NewInterventionForm(BaseForm):
widget=forms.DateInput(
attrs={
"type": "date",
"class": "form-control",
},
format="%d.%m.%Y"
)
@ -153,6 +165,7 @@ class NewInterventionForm(BaseForm):
widget=forms.DateInput(
attrs={
"type": "date",
"class": "form-control",
},
format="%d.%m.%Y"
)
@ -165,14 +178,11 @@ class NewInterventionForm(BaseForm):
widget=forms.Textarea(
attrs={
"rows": 5,
"class": "w-100"
"class": "form-control"
}
)
)
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("New intervention")
@ -281,12 +291,10 @@ class EditInterventionForm(NewInterventionForm):
"binding_date": bind_date,
"comment": self.instance.comment,
}
disabled_fields = [
"identifier",
]
disabled_fields = []
self.load_initial_data(
form_data,
disabled_fields,
disabled_fields
)
def save(self, user: User, geom_form: SimpleGeomForm):

View File

@ -31,7 +31,8 @@ class ShareInterventionModalForm(BaseModalForm):
required=False,
widget=TextToClipboardInput(
attrs={
"readonly": True
"readonly": True,
"class": "form-control",
}
)
)
@ -109,6 +110,7 @@ class NewRevocationModalForm(BaseModalForm):
attrs={
"type": "date",
"data-provide": "datepicker",
"class": "form-control",
},
format="%d.%m.%Y"
)
@ -120,7 +122,7 @@ class NewRevocationModalForm(BaseModalForm):
help_text=_("Must be smaller than 15 Mb"),
widget=forms.FileInput(
attrs={
"class": "w-75"
"class": "form-control-file"
}
)
)
@ -134,13 +136,11 @@ class NewRevocationModalForm(BaseModalForm):
attrs={
"cols": 30,
"rows": 5,
"class": "form-control",
}
)
)
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("Add revocation")
@ -274,6 +274,11 @@ class NewDeductionModalForm(BaseModalForm):
label=_("Surface"),
label_suffix="",
help_text=_("in m²"),
widget=forms.NumberInput(
attrs={
"class": "form-control",
}
)
)
intervention = forms.ModelChoiceField(
label=_("Intervention"),
@ -289,9 +294,6 @@ class NewDeductionModalForm(BaseModalForm):
),
)
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("New Deduction")

View File

@ -12,4 +12,21 @@ class DummyFilterInput(forms.HiddenInput):
class TextToClipboardInput(forms.TextInput):
template_name = "konova/custom_widgets/text-to-clipboard-input.html"
template_name = "konova/custom_widgets/text-to-clipboard-input.html"
class GenerateInput(forms.TextInput):
"""
Provides a form group with a button at the end, which generates new content for the input.
The url used to fetch new content can be added using the attrs like
widget=GenerateInput(
attrs={
"url": reverse_lazy("app_name:view_name")
...
}
)
"""
template_name = "konova/custom_widgets/generate-content-input.html"

View File

@ -9,12 +9,13 @@ from django.urls import path
from intervention.views import index_view, new_view, open_view, edit_view, remove_view, new_document_view, share_view, \
create_share_view, remove_revocation_view, new_revocation_view, run_check_view, log_view, new_deduction_view, \
record_view, remove_document_view, get_document_view, get_revocation_view
record_view, remove_document_view, get_document_view, get_revocation_view, new_id_view
app_name = "intervention"
urlpatterns = [
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'),

View File

@ -1,6 +1,6 @@
from django.contrib.auth.decorators import login_required
from django.utils.translation import gettext_lazy as _
from django.http import HttpRequest
from django.http import HttpRequest, JsonResponse
from django.shortcuts import render, get_object_or_404
from intervention.forms.forms import NewInterventionForm, EditInterventionForm
@ -83,11 +83,30 @@ def new_view(request: HttpRequest):
context = {
"data_form": data_form,
"geom_form": geom_form,
"url": reverse("intervention: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_intervention = Intervention()
identifier = tmp_intervention._generate_new_identifier()
while Intervention.objects.filter(identifier=identifier).exists():
identifier = tmp_intervention._generate_new_identifier()
return JsonResponse(
data={
"identifier": identifier
}
)
@login_required
def new_document_view(request: HttpRequest, id: str):
""" Renders a form for uploading new documents

View File

@ -43,7 +43,6 @@ class BaseForm(forms.Form):
instance = None # The data holding model object
form_attrs = {} # Holds additional attributes, that can be used in the template
has_required_fields = False # Automatically set. Triggers hint rendering in templates
full_width_fields = False # w-100 for all input fields
def __init__(self, *args, **kwargs):
self.instance = kwargs.pop("instance", None)
@ -56,11 +55,6 @@ class BaseForm(forms.Form):
self.has_required_fields = True
break
if self.full_width_fields:
# Automatically add bootstrap w-100 class for maximum width of form fields in modals
for key, val in self.fields.items():
self.add_widget_html_class(key, "w-100")
@abstractmethod
def save(self):
# To be implemented in subclasses!
@ -326,6 +320,11 @@ class NewDocumentForm(BaseModalForm):
label=_("Title"),
label_suffix=_(""),
max_length=500,
widget=forms.TextInput(
attrs={
"class": "form-control",
}
)
)
creation_date = forms.DateField(
label=_("Created on"),
@ -335,6 +334,7 @@ class NewDocumentForm(BaseModalForm):
attrs={
"type": "date",
"data-provide": "datepicker",
"class": "form-control",
},
format="%d.%m.%Y"
)
@ -345,7 +345,7 @@ class NewDocumentForm(BaseModalForm):
help_text=_("Must be smaller than 15 Mb"),
widget=forms.FileInput(
attrs={
"class": "w-75"
"class": "form-control-file",
}
),
)
@ -359,6 +359,7 @@ class NewDocumentForm(BaseModalForm):
attrs={
"cols": 30,
"rows": 5,
"class": "form-control",
}
)
)
@ -370,9 +371,6 @@ class NewDocumentForm(BaseModalForm):
Ema: EmaDocument,
}
# Define w-100 for all form fields
full_width_fields = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("Add new document")

View File

@ -60,13 +60,7 @@ a {
color: var(--rlp-red);
}
input[type=text], input[type=date] {
border: 1px solid gray;
border-radius: 0.2rem;
padding: 0.3rem 0.5rem;
}
input:focus, textarea:focus, select:focus{
.form-control:focus{
outline: none;
border-color: var(--rlp-red);
box-shadow: 0 0 3px var(--rlp-red);

View File

@ -0,0 +1,22 @@
{% load i18n fontawesome_5 %}
<div class="input-group w-100" title="{{ widget.value|stringformat:'s' }}">
<input id="gen-id-input" aria-describedby="gen-id-btn" type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}{% include "django/forms/widgets/attrs.html" %}>
<div class="input-group-append" onclick="fetchNewIdentifier()">
<span id="gen-id-btn" class="btn btn-default" value="{% trans 'Generate new' %}" title="{% trans 'Generate new' %}">{% fa5_icon 'dice' %}</span>
</div>
</div>
<script>
function fetchNewIdentifier() {
fetch("{{ widget.attrs.url }}")
.then(function(response){
return response.json();
})
.then(function(data){
document.getElementById("gen-id-input").value = data["identifier"];
})
.catch(function(error){
console.log(error);
});
}
</script>

Binary file not shown.

View File

@ -3,21 +3,22 @@
# 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:52
#: compensation/forms.py:67 compensation/forms.py:267 compensation/forms.py:348
#: compensation/filters.py:71 compensation/forms.py:47 compensation/forms.py:57
#: compensation/forms.py:73 compensation/forms.py:276 compensation/forms.py:363
#: intervention/filters.py:26 intervention/filters.py:40
#: intervention/filters.py:47 intervention/filters.py:48
#: intervention/forms.py:51 intervention/forms.py:146 intervention/forms.py:157
#: intervention/forms.py:465 intervention/forms.py:477
#: intervention/forms.py:490 konova/forms.py:146 konova/forms.py:250
#: konova/forms.py:300 konova/forms.py:327 konova/forms.py:332
#: konova/forms.py:344 konova/forms.py:356 konova/forms.py:379 user/forms.py:38
#: 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
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-27 11:08+0200\n"
"POT-Creation-Date: 2021-09-27 13:56+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"
@ -35,16 +36,16 @@ msgstr "Nur unverzeichnete anzeigen"
msgid "in Euro"
msgstr "in Euro"
#: compensation/forms.py:51
#: compensation/forms.py:56
#: intervention/templates/intervention/detail/includes/payments.html:31
msgid "Due on"
msgstr "Fällig am"
#: compensation/forms.py:54
#: compensation/forms.py:59
msgid "Due on which date"
msgstr "Zahlung wird an diesem Datum erwartet"
#: compensation/forms.py:66 compensation/forms.py:266 compensation/forms.py:347
#: compensation/forms.py:72 compensation/forms.py:275 compensation/forms.py:362
#: 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
@ -54,7 +55,7 @@ msgstr "Zahlung wird an diesem Datum erwartet"
#: ema/templates/ema/detail/includes/actions.html:34
#: ema/templates/ema/detail/includes/deadlines.html:34
#: ema/templates/ema/detail/includes/documents.html:31
#: intervention/forms.py:168 intervention/forms.py:489
#: intervention/forms/forms.py:175 intervention/forms/modalForms.py:132
#: intervention/templates/intervention/detail/includes/documents.html:31
#: intervention/templates/intervention/detail/includes/payments.html:34
#: intervention/templates/intervention/detail/includes/revocation.html:38
@ -62,107 +63,107 @@ msgstr "Zahlung wird an diesem Datum erwartet"
msgid "Comment"
msgstr "Kommentar"
#: compensation/forms.py:68 compensation/forms.py:268 compensation/forms.py:349
#: intervention/forms.py:491 konova/forms.py:357
#: compensation/forms.py:74 compensation/forms.py:277 compensation/forms.py:364
#: intervention/forms/modalForms.py:134 konova/forms.py:357
msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
#: compensation/forms.py:83
#: compensation/forms.py:86
msgid "Payment"
msgstr "Zahlung"
#: compensation/forms.py:84
#: compensation/forms.py:87
msgid "Add a payment for intervention '{}'"
msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen"
#: compensation/forms.py:105
#: compensation/forms.py:108
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:119
#: compensation/forms.py:122
msgid "Added payment"
msgstr "Zahlung hinzufügen"
#: compensation/forms.py:136 compensation/forms.py:148
#: compensation/forms.py:139 compensation/forms.py:151
msgid "Biotope Type"
msgstr "Biotoptyp"
#: compensation/forms.py:139
#: compensation/forms.py:142
msgid "Select the biotope type"
msgstr "Biotoptyp wählen"
#: compensation/forms.py:155
#: compensation/forms.py:158
#: 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
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36
#: ema/templates/ema/detail/includes/states-after.html:36
#: ema/templates/ema/detail/includes/states-before.html:36
#: intervention/forms.py:633
#: intervention/forms/modalForms.py:274
msgid "Surface"
msgstr "Fläche"
#: compensation/forms.py:158 intervention/forms.py:635
#: compensation/forms.py:161 intervention/forms/modalForms.py:276
msgid "in m²"
msgstr ""
#: compensation/forms.py:163
#: compensation/forms.py:171
msgid "New state"
msgstr "Neuer Zustand"
#: compensation/forms.py:164
#: compensation/forms.py:172
msgid "Insert data for the new state"
msgstr "Geben Sie die Daten des neuen Zustandes ein"
#: compensation/forms.py:172
#: compensation/forms.py:180
msgid "Added state"
msgstr "Zustand hinzugefügt"
#: compensation/forms.py:188 konova/forms.py:199
#: compensation/forms.py:196 konova/forms.py:193
msgid "Object removed"
msgstr "Objekt entfernt"
#: compensation/forms.py:239
#: compensation/forms.py:247
msgid "Deadline Type"
msgstr "Fristart"
#: compensation/forms.py:242
#: compensation/forms.py:250
msgid "Select the deadline type"
msgstr "Fristart wählen"
#: compensation/forms.py:251
#: compensation/forms.py:259
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31
#: ema/templates/ema/detail/includes/deadlines.html:31
#: intervention/forms.py:464
#: intervention/forms/modalForms.py:106
msgid "Date"
msgstr "Datum"
#: compensation/forms.py:254
#: compensation/forms.py:262
msgid "Select date"
msgstr "Datum wählen"
#: compensation/forms.py:279
#: compensation/forms.py:289
msgid "New deadline"
msgstr "Neue Frist"
#: compensation/forms.py:280
#: compensation/forms.py:290
msgid "Insert data for the new deadline"
msgstr "Geben Sie die Daten der neuen Frist ein"
#: compensation/forms.py:297
#: compensation/forms.py:307
msgid "Added deadline"
msgstr "Frist/Termin hinzugefügt"
#: compensation/forms.py:308
#: compensation/forms.py:318
msgid "Action Type"
msgstr "Maßnahmentyp"
#: compensation/forms.py:311
#: compensation/forms.py:321
msgid "Select the action type"
msgstr "Maßnahmentyp wählen"
#: compensation/forms.py:320
#: compensation/forms.py:330
#: 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
@ -188,33 +189,33 @@ msgstr "Maßnahmentyp wählen"
msgid "Action"
msgstr "Aktionen"
#: compensation/forms.py:325
#: compensation/forms.py:335
msgid "Unit"
msgstr "Einheit"
#: compensation/forms.py:328
#: compensation/forms.py:338
msgid "Select the unit"
msgstr "Einheit wählen"
#: compensation/forms.py:337
#: compensation/forms.py:347
#: 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:340
#: compensation/forms.py:350
msgid "Insert the amount"
msgstr "Menge eingeben"
#: compensation/forms.py:360
#: compensation/forms.py:375
msgid "New action"
msgstr "Neue Maßnahme"
#: compensation/forms.py:361
#: compensation/forms.py:376
msgid "Insert data for the new action"
msgstr "Geben Sie die Daten der neuen Maßnahme ein"
#: compensation/forms.py:380
#: compensation/forms.py:395
msgid "Added action"
msgstr "Maßnahme hinzugefügt"
@ -257,34 +258,34 @@ 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:24 compensation/tables.py:164 ema/tables.py:28
#: intervention/forms.py:32 intervention/tables.py:23
#: 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:29 compensation/tables.py:169
#: 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.py:38
#: 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:326
#: intervention/templates/intervention/detail/view.html:31 konova/forms.py:320
msgid "Title"
msgstr "Bezeichnung"
#: compensation/tables.py:34
#: compensation/tables.py:35
#: compensation/templates/compensation/detail/compensation/view.html:43
#: intervention/tables.py:33
#: intervention/templates/intervention/detail/view.html:68 user/models.py:48
msgid "Checked"
msgstr "Geprüft"
#: compensation/tables.py:40 compensation/tables.py:179
#: compensation/tables.py:41 compensation/tables.py:182
#: compensation/templates/compensation/detail/compensation/view.html:57
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:31
#: compensation/templates/compensation/detail/eco_account/view.html:44
@ -294,41 +295,41 @@ msgstr "Geprüft"
msgid "Recorded"
msgstr "Verzeichnet"
#: compensation/tables.py:46 compensation/tables.py:185 ema/tables.py:44
#: compensation/tables.py:47 compensation/tables.py:188 ema/tables.py:44
#: intervention/tables.py:51
msgid "Editable"
msgstr "Freigegeben"
#: compensation/tables.py:52 compensation/tables.py:191 ema/tables.py:50
#: compensation/tables.py:53 compensation/tables.py:194 ema/tables.py:50
#: intervention/tables.py:57
msgid "Last edit"
msgstr "Zuletzt bearbeitet"
#: compensation/tables.py:61
#: compensation/tables.py:62
#: intervention/templates/intervention/detail/includes/compensations.html:8
msgid "Compensations"
msgstr "Kompensationen"
#: compensation/tables.py:83 compensation/tables.py:222 ema/tables.py:82
#: compensation/tables.py:84 compensation/tables.py:225 ema/tables.py:82
#: intervention/tables.py:88
msgid "Open {}"
msgstr "Öffne {}"
#: compensation/tables.py:83
#: compensation/tables.py:84
#: compensation/templates/compensation/detail/compensation/view.html:19
#: konova/templates/konova/home.html:49 templates/navbar.html:28
msgid "Compensation"
msgstr "Kompensation"
#: compensation/tables.py:104 intervention/tables.py:107
#: compensation/tables.py:105 intervention/tables.py:107
msgid "Not checked yet"
msgstr "Noch nicht geprüft"
#: compensation/tables.py:109 intervention/tables.py:112
#: compensation/tables.py:110 intervention/tables.py:112
msgid "Checked on {} by {}"
msgstr "Am {} von {} geprüft worden"
#: compensation/tables.py:128
#: compensation/tables.py:129
#: compensation/templates/compensation/detail/compensation/view.html:60
#: compensation/templates/compensation/detail/eco_account/view.html:47
#: ema/tables.py:101 ema/templates/ema/detail/view.html:31
@ -337,39 +338,39 @@ msgstr "Am {} von {} geprüft worden"
msgid "Not recorded yet"
msgstr "Noch nicht verzeichnet"
#: compensation/tables.py:133 compensation/tables.py:260 ema/tables.py:106
#: compensation/tables.py:134 compensation/tables.py:263 ema/tables.py:106
#: intervention/models.py:384 intervention/tables.py:136
msgid "Recorded on {} by {}"
msgstr "Am {} von {} verzeichnet worden"
#: compensation/tables.py:156 compensation/tables.py:283 ema/tables.py:129
#: compensation/tables.py:159 compensation/tables.py:286 ema/tables.py:129
#: intervention/tables.py:159
msgid "Full access granted"
msgstr "Für Sie freigegeben - Datensatz kann bearbeitet werden"
#: compensation/tables.py:156 compensation/tables.py:283 ema/tables.py:129
#: compensation/tables.py:159 compensation/tables.py:286 ema/tables.py:129
#: intervention/tables.py:159
msgid "Access not granted"
msgstr "Nicht freigegeben - Datensatz nur lesbar"
#: compensation/tables.py:174
#: compensation/tables.py:177
#: compensation/templates/compensation/detail/eco_account/view.html:35
#: konova/templates/konova/custom_widgets/progressbar.html:3
msgid "Available"
msgstr "Verfügbar"
#: compensation/tables.py:200
#: compensation/tables.py:203
msgid "Eco Accounts"
msgstr "Ökokonten"
#: compensation/tables.py:222
#: compensation/tables.py:225
#: compensation/templates/compensation/detail/eco_account/view.html:19
#: intervention/forms.py:617 intervention/forms.py:624
#: intervention/forms/modalForms.py:258 intervention/forms/modalForms.py:265
#: konova/templates/konova/home.html:88 templates/navbar.html:34
msgid "Eco-account"
msgstr "Ökokonto"
#: compensation/tables.py:255
#: compensation/tables.py:258
msgid "Not recorded yet. Can not be used for deductions, yet."
msgstr ""
"Noch nicht verzeichnet. Kann noch nicht für Abbuchungen genutzt werden."
@ -477,7 +478,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:378
#: konova/forms.py:376
msgid "Add new document"
msgstr "Neues Dokument hinzufügen"
@ -582,7 +583,7 @@ msgstr "Zuletzt bearbeitet"
#: compensation/templates/compensation/detail/compensation/view.html:92
#: compensation/templates/compensation/detail/eco_account/view.html:91
#: ema/templates/ema/detail/view.html:82 intervention/forms.py:398
#: ema/templates/ema/detail/view.html:82 intervention/forms/modalForms.py:40
#: intervention/templates/intervention/detail/view.html:116
msgid "Shared with"
msgstr "Freigegeben für"
@ -643,19 +644,19 @@ msgid "Missing"
msgstr "Fehlt"
#: compensation/templates/compensation/detail/eco_account/view.html:58
#: ema/templates/ema/detail/view.html:42 intervention/forms.py:96
#: ema/templates/ema/detail/view.html:42 intervention/forms/forms.py:98
#: intervention/templates/intervention/detail/view.html:56
msgid "Conservation office"
msgstr "Eintragungsstelle"
#: compensation/templates/compensation/detail/eco_account/view.html:62
#: ema/templates/ema/detail/view.html:46 intervention/forms.py:122
#: ema/templates/ema/detail/view.html:46 intervention/forms/forms.py:125
#: intervention/templates/intervention/detail/view.html:60
msgid "Conservation office file number"
msgstr "Aktenzeichen Eintragungsstelle"
#: compensation/templates/compensation/detail/eco_account/view.html:66
#: ema/templates/ema/detail/view.html:50 intervention/forms.py:133
#: ema/templates/ema/detail/view.html:50 intervention/forms/forms.py:137
#: intervention/templates/intervention/detail/view.html:64
msgid "Intervention handler"
msgstr "Eingriffsverursacher"
@ -667,7 +668,7 @@ msgstr ""
#: compensation/views/compensation_views.py:123
#: compensation/views/eco_account_views.py:190 ema/views.py:128
#: intervention/views.py:409
#: intervention/views.py:428
msgid "Log"
msgstr "Log"
@ -677,7 +678,7 @@ msgstr "Kompensation entfernt"
#: compensation/views/compensation_views.py:163
#: compensation/views/eco_account_views.py:289 ema/views.py:250
#: intervention/views.py:105
#: intervention/views.py:124
msgid "Document added"
msgstr "Dokument hinzugefügt"
@ -713,16 +714,16 @@ msgid "Deduction removed"
msgstr "Abbuchung entfernt"
#: compensation/views/eco_account_views.py:210 ema/views.py:171
#: intervention/views.py:449
#: intervention/views.py:468
msgid "{} unrecorded"
msgstr "{} entzeichnet"
#: compensation/views/eco_account_views.py:210 ema/views.py:171
#: intervention/views.py:449
#: intervention/views.py:468
msgid "{} recorded"
msgstr "{} verzeichnet"
#: compensation/views/eco_account_views.py:346 intervention/views.py:431
#: compensation/views/eco_account_views.py:346 intervention/views.py:450
msgid "Deduction added"
msgstr "Abbuchung hinzugefügt"
@ -774,133 +775,133 @@ msgstr "Gemarkung"
msgid "Search for district"
msgstr "Nach Gemarkung suchen"
#: intervention/forms.py:35
#: intervention/forms/forms.py:30
msgid "Generated automatically"
msgstr "Automatisch generiert"
#: intervention/forms.py:40
#: intervention/forms/forms.py:41
msgid "An explanatory name"
msgstr "Aussagekräftiger Titel"
#: intervention/forms.py:44
#: intervention/forms/forms.py:45
msgid "Construction XY; Location ABC"
msgstr "Bauvorhaben XY; Flur ABC"
#: intervention/forms.py:49
#: intervention/forms/forms.py:51
#: intervention/templates/intervention/detail/view.html:35
msgid "Process type"
msgstr "Verfahrenstyp"
#: intervention/forms.py:65
#: intervention/forms/forms.py:67
#: intervention/templates/intervention/detail/view.html:39
msgid "Law"
msgstr "Gesetz"
#: intervention/forms.py:67
#: intervention/forms/forms.py:69
msgid "Multiple selection possible"
msgstr "Mehrfachauswahl möglich"
#: intervention/forms.py:81
#: intervention/forms/forms.py:83
#: intervention/templates/intervention/detail/view.html:48
msgid "Registration office"
msgstr "Zulassungsbehörde"
#: intervention/forms.py:111
#: intervention/forms/forms.py:113
#: intervention/templates/intervention/detail/view.html:52
msgid "Registration office file number"
msgstr "Aktenzeichen Zulassungsbehörde"
#: intervention/forms.py:117
#: intervention/forms/forms.py:119
msgid "ZB-123/ABC.456"
msgstr ""
#: intervention/forms.py:128
#: intervention/forms/forms.py:131
msgid "ETS-123/ABC.456"
msgstr ""
#: intervention/forms.py:137
#: intervention/forms/forms.py:141
msgid "Who performs the intervention"
msgstr "Wer führt den Eingriff durch"
#: intervention/forms.py:140
#: intervention/forms/forms.py:144
msgid "Company Mustermann"
msgstr "Firma Mustermann"
#: intervention/forms.py:145
#: intervention/forms/forms.py:150
#: intervention/templates/intervention/detail/view.html:96
msgid "Registration date"
msgstr "Datum Zulassung bzw. Satzungsbeschluss"
#: intervention/forms.py:156
#: intervention/forms/forms.py:162
#: intervention/templates/intervention/detail/view.html:100
msgid "Binding on"
msgstr "Datum Bestandskraft"
#: intervention/forms.py:170
#: intervention/forms/forms.py:177
msgid "Additional comment"
msgstr "Zusätzlicher Kommentar"
#: intervention/forms.py:184
#: intervention/forms/forms.py:188
msgid "New intervention"
msgstr "Neuer Eingriff"
#: intervention/forms.py:265
#: intervention/forms/forms.py:269
msgid "Edit intervention"
msgstr "Eingriff bearbeiten"
#: intervention/forms.py:387
#: intervention/forms/modalForms.py:28
msgid "Share link"
msgstr "Freigabelink"
#: intervention/forms.py:389
#: intervention/forms/modalForms.py:30
msgid "Send this link to users who you want to have writing access on the data"
msgstr "Andere Nutzer erhalten über diesen Link Zugriff auf die Daten"
#: intervention/forms.py:401
#: intervention/forms/modalForms.py:43
msgid "Remove check to remove access for this user"
msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen"
#: intervention/forms.py:412
#: intervention/forms/modalForms.py:54
#: intervention/templates/intervention/detail/includes/controls.html:15
msgid "Share"
msgstr "Freigabe"
#: intervention/forms.py:413
#: intervention/forms/modalForms.py:55
msgid "Share settings for {}"
msgstr "Freigabe Einstellungen für {}"
#: intervention/forms.py:466
#: intervention/forms/modalForms.py:108
msgid "Date of revocation"
msgstr "Datum des Widerspruchs"
#: intervention/forms.py:476
#: intervention/forms/modalForms.py:119
#: intervention/templates/intervention/detail/includes/revocation.html:35
msgid "Document"
msgstr "Dokument"
#: intervention/forms.py:479 konova/forms.py:345
#: intervention/forms/modalForms.py:122 konova/forms.py:345
msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein"
#: intervention/forms.py:505
#: intervention/forms/modalForms.py:146
#: intervention/templates/intervention/detail/includes/revocation.html:18
msgid "Add revocation"
msgstr "Widerspruch hinzufügen"
#: intervention/forms.py:545
#: intervention/forms/modalForms.py:186
msgid "Checked intervention data"
msgstr "Eingriffsdaten geprüft"
#: intervention/forms.py:551
#: intervention/forms/modalForms.py:192
msgid "Checked compensations data and payments"
msgstr "Kompensationen und Zahlungen geprüft"
#: intervention/forms.py:559
#: intervention/forms/modalForms.py:200
#: intervention/templates/intervention/detail/includes/controls.html:19
msgid "Run check"
msgstr "Prüfung vornehmen"
#: intervention/forms.py:560 konova/forms.py:432
#: intervention/forms/modalForms.py:201 konova/forms.py:430
msgid ""
"I, {} {}, confirm that all necessary control steps have been performed by "
"myself."
@ -908,30 +909,30 @@ msgstr ""
"Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt "
"wurden:"
#: intervention/forms.py:619
#: intervention/forms/modalForms.py:260
msgid "Only recorded accounts can be selected for deductions"
msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden."
#: intervention/forms.py:638 intervention/forms.py:645
#: 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.py:640
#: intervention/forms/modalForms.py:286
msgid "Only shared interventions can be selected"
msgstr "Nur freigegebene Eingriffe können gewählt werden"
#: intervention/forms.py:656
#: intervention/forms/modalForms.py:299
msgid "New Deduction"
msgstr "Neue Abbuchung"
#: intervention/forms.py:657
#: intervention/forms/modalForms.py:300
msgid "Enter the information for a new deduction from a chosen eco-account"
msgstr "Geben Sie die Informationen für eine neue Abbuchung ein."
#: intervention/forms.py:693
#: intervention/forms/modalForms.py:336
msgid ""
"Eco-account {} is not recorded yet. You can only deduct from recorded "
"accounts."
@ -939,7 +940,7 @@ msgstr ""
"Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von "
"verzeichneten Ökokonten erfolgen."
#: intervention/forms.py:706
#: intervention/forms/modalForms.py:349
msgid ""
"The account {} has not enough surface for a deduction of {} m². There are "
"only {} m² left"
@ -1049,22 +1050,22 @@ 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"
"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:239
#: intervention/views.py:79 intervention/views.py:258
msgid "Invalid input"
msgstr "Eingabe fehlerhaft"
#: intervention/views.py:193
#: intervention/views.py:212
msgid "This intervention has a revocation from {}"
msgstr "Es existiert ein Widerspruch vom {}"
#: intervention/views.py:209
#: intervention/views.py:228
msgid ""
"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 "
@ -1074,43 +1075,43 @@ msgstr ""
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
"noch Prüfungen durchführen oder verzeichnen können."
#: intervention/views.py:236
#: intervention/views.py:255
msgid "Intervention {} edited"
msgstr "Eingriff {} bearbeitet"
#: intervention/views.py:268
#: intervention/views.py:287
msgid "{} removed"
msgstr "{} entfernt"
#: intervention/views.py:289
#: intervention/views.py:308
msgid "Revocation removed"
msgstr "Widerspruch entfernt"
#: intervention/views.py:315
#: intervention/views.py:334
msgid "{} has already been shared with you"
msgstr "{} wurde bereits für Sie freigegeben"
#: intervention/views.py:320
#: intervention/views.py:339
msgid "{} has been shared with you"
msgstr "{} ist nun für Sie freigegeben"
#: intervention/views.py:327
#: intervention/views.py:346
msgid "Share link invalid"
msgstr "Freigabelink ungültig"
#: intervention/views.py:348
#: intervention/views.py:367
msgid "Share settings updated"
msgstr "Freigabe Einstellungen aktualisiert"
#: intervention/views.py:367
#: intervention/views.py:386
msgid "Check performed"
msgstr "Prüfung durchgeführt"
#: intervention/views.py:387
#: intervention/views.py:406
msgid "Revocation added"
msgstr "Widerspruch hinzugefügt"
#: intervention/views.py:454
#: intervention/views.py:473
msgid "There are errors on this intervention:"
msgstr "Es liegen Fehler in diesem Eingriff vor:"
@ -1135,35 +1136,35 @@ msgstr ""
msgid "You need to be part of another user group."
msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
#: konova/forms.py:75
#: konova/forms.py:69
msgid "Not editable"
msgstr "Nicht editierbar"
#: konova/forms.py:145 konova/forms.py:299
#: konova/forms.py:139 konova/forms.py:293
msgid "Confirm"
msgstr "Bestätige"
#: konova/forms.py:157 konova/forms.py:308
#: konova/forms.py:151 konova/forms.py:302
msgid "Remove"
msgstr "Löschen"
#: konova/forms.py:159
#: konova/forms.py:153
msgid "You are about to remove {} {}"
msgstr "Sie sind dabei {} {} zu löschen"
#: konova/forms.py:249 templates/form/main_data_collapse_form.html:47
#: konova/forms.py:243 templates/form/main_data_collapse_form.html:47
msgid "Geometry"
msgstr "Geometrie"
#: konova/forms.py:309
#: konova/forms.py:303
msgid "Are you sure?"
msgstr "Sind Sie sicher?"
#: konova/forms.py:331
#: konova/forms.py:330
msgid "Created on"
msgstr "Erstellt"
#: konova/forms.py:333
#: konova/forms.py:332
msgid "When has this file been created? Important for photos."
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
@ -1172,27 +1173,27 @@ msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
msgid "File"
msgstr "Datei"
#: konova/forms.py:409
#: konova/forms.py:407
msgid "Added document"
msgstr "Dokument hinzugefügt"
#: konova/forms.py:423
#: konova/forms.py:421
msgid "Confirm record"
msgstr "Verzeichnen bestätigen"
#: konova/forms.py:431
#: konova/forms.py:429
msgid "Record data"
msgstr "Daten verzeichnen"
#: konova/forms.py:438
#: konova/forms.py:436
msgid "Confirm unrecord"
msgstr "Entzeichnen bestätigen"
#: konova/forms.py:439
#: konova/forms.py:437
msgid "Unrecord data"
msgstr "Daten entzeichnen"
#: konova/forms.py:440
#: konova/forms.py:438
msgid "I, {} {}, confirm that this data must be unrecorded."
msgstr ""
"Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen."
@ -1237,6 +1238,10 @@ msgstr "Kontrolle am"
msgid "Other"
msgstr "Sonstige"
#: konova/templates/konova/custom_widgets/generate-content-input.html:6
msgid "Generate new"
msgstr "Neu generieren"
#: konova/templates/konova/custom_widgets/text-to-clipboard-input.html:6
msgid "Copy to clipboard"
msgstr "In Zwischenablage kopieren"