Intervention revocation

* adds Revocation model to interventions/models.py
* adds revocations to interventions detail view
* fixes duplicated ids in html includes
* refactors controls for detail view into included template files (controls.html)
* reduces max length for payment transfer notes from 1000 to 200
* adds RevocationAdmin to intervention/admin.py
* adds new form for adding a Revocation to an intervention's legal_data
  * only one revocation per intervention possible
  * removes add button in case of an existing revocation
* adds revocation routes to intervention app
* renames document field in Document model into file for more clarity
* adds/updates translations
This commit is contained in:
mipel 2021-08-04 13:32:35 +02:00
parent fd526b80b7
commit 8e1f679c2a
25 changed files with 495 additions and 197 deletions

View File

@ -47,7 +47,7 @@ class NewPaymentForm(BaseModalForm):
)
)
transfer_note = forms.CharField(
max_length=1000,
max_length=200,
required=False,
label_suffix=_(""),
label=_("Transfer note"),
@ -55,7 +55,6 @@ class NewPaymentForm(BaseModalForm):
)
def __init__(self, *args, **kwargs):
self.template = "modal/modal_form.html"
super().__init__(*args, **kwargs)
self.intervention = self.instance
self.form_title = _("Payment")

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 humanize %}
<div id="related-documents" class="card">
<div id="actions" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -0,0 +1,26 @@
{% load i18n l10n fontawesome_5 %}
<div class="d-flex justify-content-end">
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Open in LANIS' %}">
LANIS
</button>
</a>
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Public report' %}">
{% fa5_icon 'file-alt' %}
</button>
</a>
{% if has_access %}
{% if is_default_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Edit' %}">
{% fa5_icon 'edit' %}
</button>
</a>
<button class="btn btn-default btn-modal" data-form-url="{% url 'compensation:remove' comp.id %}" title="{% trans 'Delete' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
{% endif %}
</div>

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-documents" class="card">
<div id="deadlines" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-documents" class="card">
<div id="documents" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-documents" class="card">
<div id="states-after" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-documents" class="card">
<div id="states-before" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -12,30 +12,7 @@
<h3>{% trans 'Compensation' %} {{comp.identifier}}</h3>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="d-flex justify-content-end">
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Open in LANIS' %}">
LANIS
</button>
</a>
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Public report' %}">
{% fa5_icon 'file-alt' %}
</button>
</a>
{% if has_access %}
{% if is_default_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Edit' %}">
{% fa5_icon 'edit' %}
</button>
</a>
<button class="btn btn-default btn-modal" data-form-url="{% url 'compensation:remove' comp.id %}" title="{% trans 'Delete' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
{% endif %}
</div>
{% include 'compensation/detail/includes/controls.html' %}
</div>
</div>
<hr>

View File

@ -1,6 +1,6 @@
from django.contrib import admin
from intervention.models import Intervention, ResponsibilityData, LegalData
from intervention.models import Intervention, ResponsibilityData, LegalData, Revocation
class InterventionAdmin(admin.ModelAdmin):
@ -33,6 +33,16 @@ class LegalAdmin(admin.ModelAdmin):
]
class RevocationAdmin(admin.ModelAdmin):
list_display = [
"id",
"date",
"comment",
"created",
]
admin.site.register(Intervention, InterventionAdmin)
admin.site.register(ResponsibilityData, ResponsibilityAdmin)
admin.site.register(LegalData, LegalAdmin)
admin.site.register(Revocation, RevocationAdmin)

View File

@ -14,7 +14,7 @@ from django.db import transaction
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from intervention.models import Intervention
from intervention.models import Intervention, Revocation
from konova.forms import BaseForm, BaseModalForm
from konova.models import Document
from konova.settings import DEFAULT_LAT, DEFAULT_LON, DEFAULT_ZOOM, ZB_GROUP, ETS_GROUP
@ -315,3 +315,71 @@ class ShareInterventionForm(BaseModalForm):
id__in=self.cleaned_data["users"]
)
self.instance.users.set(accessing_users)
class NewRevocationForm(BaseModalForm):
date = forms.DateField(
label=_("Date"),
label_suffix=_(""),
help_text=_("Date of revocation"),
widget=forms.DateInput(
attrs={
"type": "date",
"data-provide": "datepicker",
},
format="%d.%m.%Y"
)
)
file = forms.FileField(
label=_("Document"),
label_suffix=_(""),
help_text=_("Must be smaller than 15 Mb"),
widget=forms.FileInput(
attrs={
"class": "w-75"
}
)
)
comment = forms.CharField(
required=False,
max_length=200,
label=_("Comment"),
label_suffix=_(""),
help_text=_("Additional comment, maximum {} letters").format(200),
widget=forms.Textarea(
attrs={
"cols": 30,
"rows": 5,
}
)
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("Add revocation")
self.form_caption = ""
self.form_attrs = {
"enctype": "multipart/form-data", # important for file upload
}
def save(self):
with transaction.atomic():
user_action = UserActionLogEntry.objects.create(
user=self.user,
action=UserAction.CREATED
)
document = Document.objects.create(
title="revocation_of_{}".format(self.instance.identifier),
date_of_creation=self.cleaned_data["date"],
comment=self.cleaned_data["comment"],
file=self.cleaned_data["file"],
)
revocation = Revocation.objects.create(
date=self.cleaned_data["date"],
comment=self.cleaned_data["comment"],
document=document,
created=user_action,
)
self.instance.legal.revocation = revocation
self.instance.legal.save()
return revocation

View File

@ -12,7 +12,7 @@ from django.utils import timezone
from django.utils.timezone import now
from intervention.settings import INTERVENTION_IDENTIFIER_LENGTH, INTERVENTION_IDENTIFIER_TEMPLATE
from konova.models import BaseObject, Geometry, UuidModel
from konova.models import BaseObject, Geometry, UuidModel, BaseResource
from konova.utils import generators
from konova.utils.generators import generate_random_string
from organisation.models import Organisation
@ -38,6 +38,20 @@ class ResponsibilityData(UuidModel):
)
class Revocation(BaseResource):
"""
Holds revocation data e.g. for intervention objects
"""
date = models.DateField(null=True, blank=True, help_text="Revocation from")
comment = models.TextField(null=True, blank=True)
document = models.ForeignKey("konova.Document", blank=True, null=True, on_delete=models.SET_NULL)
def delete(self):
# Make sure related objects are being removed as well
self.document.delete()
super().delete()
class LegalData(UuidModel):
"""
Holds intervention legal data such as important dates, laws or responsible handler
@ -51,6 +65,8 @@ class LegalData(UuidModel):
process_type = models.CharField(max_length=500, null=True, blank=True)
law = models.CharField(max_length=500, null=True, blank=True)
revocation = models.ForeignKey(Revocation, null=True, blank=True, help_text="Refers to 'Widerspruch am'", on_delete=models.SET_NULL)
def __str__(self):
return "{} | {} | {}".format(
self.process_type,

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-compensations" class="card">
<div id="compensations" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -0,0 +1,43 @@
{% load i18n l10n fontawesome_5 %}
<div class="d-flex justify-content-end">
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Open in LANIS' %}">
LANIS
</button>
</a>
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Public report' %}">
{% fa5_icon 'file-alt' %}
</button>
</a>
{% if has_access %}
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Share' %}" data-form-url="{% url 'intervention:share-create' intervention.id %}">
{% fa5_icon 'share-alt' %}
</button>
{% if is_zb_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Run check' %}">
{% fa5_icon 'star' %}
</button>
</a>
{% endif %}
{% if is_ets_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Record' %}">
{% fa5_icon 'bookmark' %}
</button>
</a>
{% endif %}
{% if is_default_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Edit' %}">
{% fa5_icon 'edit' %}
</button>
</a>
<button class="btn btn-default btn-modal" data-form-url="{% url 'intervention:remove' intervention.id %}" title="{% trans 'Delete' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
{% endif %}
</div>

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-documents" class="card">
<div id="documents" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-eco-account-withdraws" class="card">
<div id="eco-account-withdraws" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -1,5 +1,5 @@
{% load i18n l10n fontawesome_5 %}
<div id="related-payments" class="card">
<div id="payments" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">

View File

@ -0,0 +1,70 @@
{% load i18n l10n fontawesome_5 %}
<div id="revocation" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">
<h5>
<span class="badge badge-light">{% if intervention.legal.revocation %}1{% else %}0{% endif %}</span>
{% trans 'Revocation' %}
</h5>
</div>
<div class="col-sm-6">
<div class="d-flex justify-content-end">
{% comment %}
Only show add-button if no revocation exists, yet.
{% endcomment %}
{% if is_default_member and has_access and not intervention.legal.revocation %}
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'intervention:revocation-new' intervention.id %}" title="{% trans 'Add revocation' %}">
{% fa5_icon 'plus' %}
{% fa5_icon 'ban' %}
</button>
{% endif %}
</div>
</div>
</div>
</div>
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">
{% trans 'From' context 'Revocation' %}
</th>
<th scope="col">
{% trans 'Comment' %}
</th>
<th scope="col">
{% trans 'Document' %}
</th>
<th scope="col">
{% trans 'Action' %}
</th>
</tr>
</thead>
<tbody>
{% if intervention.legal.revocation %}
{% with intervention.legal.revocation as rev %}
<tr>
<td class="align-middle">
{{ rev.date }}
</td>
<td class="align-middle">{{ rev.comment }}</td>
<td class="align-middle">
<a href="{% url 'doc-open' rev.document.id %}">
{{ rev.document.file }}
</a>
</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'intervention:revocation-remove' rev.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove revocation' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
</td>
</tr>
{% endwith %}
{% endif %}
</tbody>
</table>
</div>
</div>

View File

@ -12,47 +12,7 @@
<h3>{% trans 'Intervention' %} {{intervention.identifier}}</h3>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="d-flex justify-content-end">
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Open in LANIS' %}">
LANIS
</button>
</a>
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Public report' %}">
{% fa5_icon 'file-alt' %}
</button>
</a>
{% if has_access %}
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Share' %}" data-form-url="{% url 'intervention:share-create' intervention.id %}">
{% fa5_icon 'share-alt' %}
</button>
{% if is_zb_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Run check' %}">
{% fa5_icon 'star' %}
</button>
</a>
{% endif %}
{% if is_ets_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Record' %}">
{% fa5_icon 'bookmark' %}
</button>
</a>
{% endif %}
{% if is_default_member %}
<a href="{% url 'home' %}" class="mr-2">
<button class="btn btn-default" title="{% trans 'Edit' %}">
{% fa5_icon 'edit' %}
</button>
</a>
<button class="btn btn-default btn-modal" data-form-url="{% url 'intervention:remove' intervention.id %}" title="{% trans 'Delete' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
{% endif %}
</div>
{% include 'intervention/detail/includes/controls.html' %}
</div>
</div>
<hr>
@ -128,6 +88,10 @@
<th scope="row">{% trans 'Binding on' %}</th>
<td class="align-middle">{{intervention.legal.binding_date|default_if_none:""}}</td>
</tr>
<tr {% if intervention.legal.revocation %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Revocation' %}</th>
<td class="align-middle">{{intervention.legal.revocation.date|naturalday|default_if_none:""}}</td>
</tr>
<tr>
<th scope="row">{% trans 'Last modified' %}</th>
<td class="align-middle">
@ -171,9 +135,16 @@
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/eco-account-withdraws.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/revocation.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/documents.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
</div>
</div>

View File

@ -8,7 +8,7 @@ Created on: 30.11.20
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
create_share_view, remove_revocation_view, new_revocation_view
app_name = "intervention"
urlpatterns = [
@ -20,4 +20,8 @@ urlpatterns = [
path('<id>/remove', remove_view, name='remove'),
path('<id>/share/<token>', share_view, name='share'),
path('<id>/share', create_share_view, name='share-create'),
# Revocation routes
path('<id>/revocation/new', new_revocation_view, name='revocation-new'),
path('revocation/<id>/remove', remove_revocation_view, name='revocation-remove'),
]

View File

@ -4,12 +4,14 @@ from django.utils.translation import gettext_lazy as _
from django.http import HttpRequest
from django.shortcuts import render, get_object_or_404
from intervention.forms import NewInterventionForm, EditInterventionForm, ShareInterventionForm
from intervention.models import Intervention
from intervention.forms import NewInterventionForm, EditInterventionForm, ShareInterventionForm, NewRevocationForm
from intervention.models import Intervention, Revocation
from intervention.tables import InterventionTable
from konova.contexts import BaseContext
from konova.decorators import *
from konova.forms import SimpleGeomForm, NewDocumentForm, RemoveModalForm
from konova.sub_settings.django_settings import DEFAULT_DATE_TIME_FORMAT, DEFAULT_DATE_FORMAT
from konova.utils.message_templates import FORM_INVALID
from konova.utils.user_checks import in_group
@ -117,6 +119,14 @@ def open_view(request: HttpRequest, id: str):
instance=intervention
)
# Inform user about revocation
if intervention.legal.revocation:
messages.error(
request,
_("This intervention has a revocation from {}").format(intervention.legal.revocation.date.strftime(DEFAULT_DATE_FORMAT)),
extra_tags="danger",
)
context = {
"intervention": intervention,
"compensations": compensations,
@ -185,6 +195,26 @@ def remove_view(request: HttpRequest, id: str):
)
@login_required
@default_group_required
def remove_revocation_view(request: HttpRequest, id: str):
""" Renders a remove view for a revocation
Args:
request (HttpRequest): The incoming request
id (str): The revocation's id as string
Returns:
"""
obj = Revocation.objects.get(id=id)
form = RemoveModalForm(request.POST or None, instance=obj, user=request.user)
return form.process_request(
request,
_("Revocation removed"),
)
@login_required
def share_view(request: HttpRequest, id: str, token: str):
""" Performs sharing of an intervention
@ -256,3 +286,40 @@ def create_share_view(request: HttpRequest, id: str):
raise NotImplementedError
@login_required
def new_revocation_view(request: HttpRequest, id: str):
""" Renders sharing form for an intervention
Args:
request (HttpRequest): The incoming request
id (str): Intervention's id
Returns:
"""
intervention = get_object_or_404(Intervention, id=id)
form = NewRevocationForm(request.POST or None, request.FILES or None, instance=intervention, user=request.user)
if request.method == "POST":
if form.is_valid():
form.save()
messages.info(
request,
_("Revocation added")
)
else:
messages.error(
request,
FORM_INVALID,
extra_tags="danger",
)
return redirect(request.META.get("HTTP_REFERER", "home"))
elif request.method == "GET":
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, form.template, context)
else:
raise NotImplementedError

View File

@ -300,7 +300,7 @@ class NewDocumentForm(BaseModalForm):
self.form_caption = _("")
self.template = "modal/modal_form.html"
self.form_attrs = {
"enctype": "multipart/form-data",
"enctype": "multipart/form-data", # important for file upload
}
def save(self):

View File

@ -98,7 +98,7 @@ class Document(BaseResource):
"""
title = models.CharField(max_length=500, null=True, blank=True)
date_of_creation = models.DateField()
document = models.FileField()
file = models.FileField()
comment = models.TextField()
def delete(self, using=None, keep_parents=False):
@ -111,7 +111,7 @@ class Document(BaseResource):
Returns:
"""
os.remove(self.document.file.name)
os.remove(self.file.file.name)
super().delete(using=using, keep_parents=keep_parents)

View File

@ -38,8 +38,8 @@ ALLOWED_HOSTS = []
LOGIN_URL = "/login/"
# Session settings
SESSION_COOKIE_AGE = 30 * 60 # 30 minutes
SESSION_SAVE_EVERY_REQUEST = True
#SESSION_COOKIE_AGE = 30 * 60 # 30 minutes
#SESSION_SAVE_EVERY_REQUEST = True
# Application definition
@ -149,7 +149,7 @@ LANGUAGE_CODE = 'de'
USE_THOUSAND_SEPARATOR = True
DEFAULT_DATE_TIME_FORMAT = '%d.%m.%Y %H:%M:%S'
DATE_FORMAT = '%d.%m.%Y'
DEFAULT_DATE_FORMAT = '%d.%m.%Y'
TIME_ZONE = 'Europe/Berlin'

Binary file not shown.

View File

@ -3,18 +3,20 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#: compensation/forms.py:35 compensation/forms.py:40 compensation/forms.py:53
#: compensation/forms.py:184 compensation/forms.py:246
#: compensation/forms.py:34 compensation/forms.py:39 compensation/forms.py:52
#: compensation/forms.py:182 compensation/forms.py:244
#: intervention/filters.py:26 intervention/filters.py:40
#: intervention/filters.py:47 intervention/filters.py:48 konova/forms.py:91
#: konova/forms.py:227 konova/forms.py:258 konova/forms.py:263
#: konova/forms.py:275 konova/forms.py:287 konova/forms.py:300 user/forms.py:38
#: intervention/filters.py:47 intervention/filters.py:48
#: intervention/forms.py:323 intervention/forms.py:335
#: intervention/forms.py:347 konova/forms.py:91 konova/forms.py:227
#: konova/forms.py:258 konova/forms.py:263 konova/forms.py:275
#: konova/forms.py:287 konova/forms.py:300 user/forms.py:38
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-04 11:52+0200\n"
"POT-Creation-Date: 2021-08-04 13:27+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"
@ -24,133 +26,137 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: compensation/forms.py:34 compensation/forms.py:235
#: compensation/forms.py:33 compensation/forms.py:233
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:33
msgid "Amount"
msgstr "Menge"
#: compensation/forms.py:36
#: compensation/forms.py:35
msgid "Amount in Euro"
msgstr "Betrag in Euro"
#: compensation/forms.py:39
#: compensation/forms.py:38
#: intervention/templates/intervention/detail/includes/payments.html:31
msgid "Due on"
msgstr "Fällig am"
#: compensation/forms.py:41
#: compensation/forms.py:40
msgid "Due on which date"
msgstr "Zahlung wird an diesem Datum erwartet"
#: compensation/forms.py:54
#: compensation/forms.py:53
msgid "Transfer note"
msgstr "Verwendungszweck"
#: compensation/forms.py:55
#: compensation/forms.py:54
msgid "Note for money transfer"
msgstr "Verwendungszweck für Überweisung"
#: compensation/forms.py:62
#: compensation/forms.py:60
msgid "Payment"
msgstr "Zahlung"
#: compensation/forms.py:63
#: compensation/forms.py:61
msgid "Add a payment for intervention '{}'"
msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen"
#: compensation/forms.py:83
#: compensation/forms.py:81
msgid "Biotope Type"
msgstr "Biotoptyp"
#: compensation/forms.py:86
#: compensation/forms.py:84
msgid "Select the biotope type"
msgstr "Biotoptyp wählen"
#: compensation/forms.py:91
#: compensation/forms.py:89
#: compensation/templates/compensation/detail/includes/states-after.html:36
#: compensation/templates/compensation/detail/includes/states-before.html:36
msgid "Surface"
msgstr "Fläche"
#: compensation/forms.py:94
#: compensation/forms.py:92
msgid "in m²"
msgstr ""
#: compensation/forms.py:99
#: compensation/forms.py:97
msgid "New state"
msgstr "Neuer Zustand"
#: compensation/forms.py:100
#: compensation/forms.py:98
msgid "Insert data for the new state"
msgstr "Geben Sie die Daten des neuen Zustandes ein"
#: compensation/forms.py:114 konova/forms.py:141
#: compensation/forms.py:112 konova/forms.py:141
msgid "Object removed"
msgstr "Objekt entfernt"
#: compensation/forms.py:156
#: compensation/forms.py:154
msgid "Deadline Type"
msgstr "Fristart"
#: compensation/forms.py:159
#: compensation/forms.py:157
msgid "Select the deadline type"
msgstr "Fristart wählen"
#: compensation/forms.py:168
#: compensation/forms.py:166
#: compensation/templates/compensation/detail/includes/deadlines.html:31
#: intervention/forms.py:322
msgid "Date"
msgstr "Datum"
#: compensation/forms.py:171
#: compensation/forms.py:169
msgid "Select date"
msgstr "Datum wählen"
#: compensation/forms.py:183 compensation/forms.py:245
#: compensation/forms.py:181 compensation/forms.py:243
#: compensation/templates/compensation/detail/includes/actions.html:34
#: compensation/templates/compensation/detail/includes/deadlines.html:34
#: compensation/templates/compensation/detail/includes/documents.html:31
#: intervention/forms.py:346
#: intervention/templates/intervention/detail/includes/documents.html:31
#: intervention/templates/intervention/detail/includes/revocation.html:35
#: konova/forms.py:286
msgid "Comment"
msgstr "Kommentar"
#: compensation/forms.py:185 compensation/forms.py:247 konova/forms.py:288
#: compensation/forms.py:183 compensation/forms.py:245
#: intervention/forms.py:348 konova/forms.py:288
msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
#: compensation/forms.py:196
#: compensation/forms.py:194
msgid "New deadline"
msgstr "Neue Frist"
#: compensation/forms.py:197
#: compensation/forms.py:195
msgid "Insert data for the new deadline"
msgstr "Geben Sie die Daten der neuen Frist ein"
#: compensation/forms.py:217
#: compensation/forms.py:215
msgid "Action Type"
msgstr "Maßnahmentyp"
#: compensation/forms.py:220
#: compensation/forms.py:218
msgid "Select the action type"
msgstr "Maßnahmentyp wählen"
#: compensation/forms.py:223
#: compensation/forms.py:221
msgid "Unit"
msgstr "Einheit"
#: compensation/forms.py:226
#: compensation/forms.py:224
msgid "Select the unit"
msgstr "Einheit wählen"
#: compensation/forms.py:238
#: compensation/forms.py:236
msgid "Insert the amount"
msgstr "Menge eingeben"
#: compensation/forms.py:258
#: compensation/forms.py:256
msgid "New action"
msgstr "Neue Maßnahme"
#: compensation/forms.py:259
#: compensation/forms.py:257
msgid "Insert data for the new action"
msgstr "Geben Sie die Daten der neuen Maßnahme ein"
@ -186,25 +192,25 @@ msgstr "Kennung"
#: compensation/tables.py:29 compensation/tables.py:169
#: compensation/templates/compensation/detail/includes/documents.html:28
#: compensation/templates/compensation/detail/view.html:47
#: compensation/templates/compensation/detail/view.html:24
#: intervention/forms.py:35 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:64 konova/forms.py:257
#: intervention/templates/intervention/detail/view.html:24 konova/forms.py:257
msgid "Title"
msgstr "Bezeichnung"
#: compensation/tables.py:34
#: compensation/templates/compensation/detail/view.html:59
#: compensation/templates/compensation/detail/view.html:36
#: intervention/tables.py:33
#: intervention/templates/intervention/detail/view.html:96 user/models.py:48
#: intervention/templates/intervention/detail/view.html:56 user/models.py:48
msgid "Checked"
msgstr "Geprüft"
#: compensation/tables.py:40
#: compensation/templates/compensation/detail/view.html:73
#: compensation/templates/compensation/detail/view.html:50
#: intervention/tables.py:39
#: intervention/templates/intervention/detail/view.html:110 user/models.py:49
#: intervention/templates/intervention/detail/view.html:70 user/models.py:49
msgid "Recorded"
msgstr "Verzeichnet"
@ -241,9 +247,9 @@ msgid "Checked on {} by {}"
msgstr "Am {} von {} geprüft worden"
#: compensation/tables.py:128
#: compensation/templates/compensation/detail/view.html:76
#: compensation/templates/compensation/detail/view.html:53
#: intervention/tables.py:135
#: intervention/templates/intervention/detail/view.html:113
#: intervention/templates/intervention/detail/view.html:73
msgid "Not recorded yet"
msgstr "Noch nicht verzeichnet"
@ -306,6 +312,7 @@ msgstr "Menge"
#: intervention/templates/intervention/detail/includes/documents.html:34
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:36
#: intervention/templates/intervention/detail/includes/payments.html:37
#: intervention/templates/intervention/detail/includes/revocation.html:41
msgid "Action"
msgstr "Aktionen"
@ -313,6 +320,27 @@ msgstr "Aktionen"
msgid "Remove action"
msgstr "Maßnahme entfernen"
#: compensation/templates/compensation/detail/includes/controls.html:5
#: intervention/templates/intervention/detail/includes/controls.html:5
msgid "Open in LANIS"
msgstr "In LANIS öffnen"
#: compensation/templates/compensation/detail/includes/controls.html:10
#: intervention/templates/intervention/detail/includes/controls.html:10
msgid "Public report"
msgstr "Öffentlicher Bericht"
#: compensation/templates/compensation/detail/includes/controls.html:17
#: intervention/templates/intervention/detail/includes/controls.html:34
msgid "Edit"
msgstr "Bearbeiten"
#: compensation/templates/compensation/detail/includes/controls.html:21
#: intervention/templates/intervention/detail/includes/controls.html:38
#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
msgid "Delete"
msgstr "Löschen"
#: compensation/templates/compensation/detail/includes/deadlines.html:8
msgid "Deadlines"
msgstr "Termine und Fristen"
@ -380,61 +408,40 @@ msgstr "Neuen Ausgangszustand hinzufügen"
msgid "Missing surfaces according to states after: "
msgstr "Fehlende Flächenmengen aus Zielzustand: "
#: compensation/templates/compensation/detail/view.html:17
#: intervention/templates/intervention/detail/view.html:17
msgid "Open in LANIS"
msgstr "In LANIS öffnen"
#: compensation/templates/compensation/detail/view.html:22
#: intervention/templates/intervention/detail/view.html:22
msgid "Public report"
msgstr "Öffentlicher Bericht"
#: compensation/templates/compensation/detail/view.html:29
#: intervention/templates/intervention/detail/view.html:46
msgid "Edit"
msgstr "Bearbeiten"
#: compensation/templates/compensation/detail/view.html:33
#: intervention/templates/intervention/detail/view.html:50
#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
msgid "Delete"
msgstr "Löschen"
#: compensation/templates/compensation/detail/view.html:51
#: compensation/templates/compensation/detail/view.html:28
msgid "compensates intervention"
msgstr "kompensiert Eingriff"
#: compensation/templates/compensation/detail/view.html:66
#: intervention/templates/intervention/detail/view.html:103
#: compensation/templates/compensation/detail/view.html:43
#: intervention/templates/intervention/detail/view.html:63
msgid "Checked on "
msgstr "Geprüft am "
#: compensation/templates/compensation/detail/view.html:66
#: compensation/templates/compensation/detail/view.html:80
#: intervention/templates/intervention/detail/view.html:103
#: intervention/templates/intervention/detail/view.html:117
#: compensation/templates/compensation/detail/view.html:43
#: compensation/templates/compensation/detail/view.html:57
#: intervention/templates/intervention/detail/view.html:63
#: intervention/templates/intervention/detail/view.html:77
msgid "by"
msgstr "von"
#: compensation/templates/compensation/detail/view.html:80
#: intervention/templates/intervention/detail/view.html:117
#: compensation/templates/compensation/detail/view.html:57
#: intervention/templates/intervention/detail/view.html:77
msgid "Recorded on "
msgstr "Verzeichnet am"
#: compensation/templates/compensation/detail/view.html:87
#: intervention/templates/intervention/detail/view.html:132
#: compensation/templates/compensation/detail/view.html:64
#: intervention/templates/intervention/detail/view.html:96
msgid "Last modified"
msgstr "Zuletzt bearbeitet"
#: compensation/templates/compensation/detail/view.html:97
#: compensation/templates/compensation/detail/view.html:74
#: intervention/forms.py:256
#: intervention/templates/intervention/detail/view.html:142
#: intervention/templates/intervention/detail/view.html:106
msgid "Shared with"
msgstr "Freigegeben für"
#: compensation/templates/compensation/detail/view.html:109
#: intervention/templates/intervention/detail/view.html:154
#: compensation/templates/compensation/detail/view.html:86
#: intervention/templates/intervention/detail/view.html:118
msgid "No geometry added, yet."
msgstr "Keine Geometrie vorhanden"
@ -503,7 +510,7 @@ msgid "Which intervention type is this"
msgstr "Welcher Eingriffstyp"
#: intervention/forms.py:46
#: intervention/templates/intervention/detail/view.html:72
#: intervention/templates/intervention/detail/view.html:32
msgid "Law"
msgstr "Gesetz"
@ -512,7 +519,7 @@ msgid "Based on which law"
msgstr "Basiert auf welchem Recht"
#: intervention/forms.py:52
#: intervention/templates/intervention/detail/view.html:92
#: intervention/templates/intervention/detail/view.html:52
msgid "Intervention handler"
msgstr "Eingriffsverursacher"
@ -573,7 +580,7 @@ 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:270
#: intervention/templates/intervention/detail/view.html:27
#: intervention/templates/intervention/detail/includes/controls.html:15
msgid "Share"
msgstr "Freigabe"
@ -581,6 +588,24 @@ msgstr "Freigabe"
msgid "Share settings for {}"
msgstr "Freigabe Einstellungen für {}"
#: intervention/forms.py:324
msgid "Date of revocation"
msgstr "Datum des Widerspruchs"
#: intervention/forms.py:334
#: intervention/templates/intervention/detail/includes/revocation.html:38
msgid "Document"
msgstr "Dokument"
#: intervention/forms.py:336 konova/forms.py:276
msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein"
#: intervention/forms.py:359
#: intervention/templates/intervention/detail/includes/revocation.html:18
msgid "Add revocation"
msgstr "Widerspruch hinzufügen"
#: intervention/tables.py:70
msgid "Interventions"
msgstr "Eingriffe"
@ -599,6 +624,14 @@ msgstr "Neue Kompensation hinzufügen"
msgid "Remove compensation"
msgstr "Kompensation entfernen"
#: intervention/templates/intervention/detail/includes/controls.html:20
msgid "Run check"
msgstr "Prüfung vornehmen"
#: intervention/templates/intervention/detail/includes/controls.html:27
msgid "Record"
msgstr "Verzeichnen"
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:8
msgid "Eco Account Withdraws"
msgstr "Ökokonto Abbuchungen"
@ -636,51 +669,61 @@ msgstr "Verwendungszweck"
msgid "Remove payment"
msgstr "Zahlung entfernen"
#: intervention/templates/intervention/detail/view.html:32
msgid "Run check"
msgstr "Prüfung vornehmen"
#: intervention/templates/intervention/detail/includes/revocation.html:8
#: intervention/templates/intervention/detail/view.html:92
msgid "Revocation"
msgstr "Widerspruch"
#: intervention/templates/intervention/detail/view.html:39
msgid "Record"
msgstr "Verzeichnen"
#: intervention/templates/intervention/detail/includes/revocation.html:32
msgctxt "Revocation"
msgid "From"
msgstr "Vom"
#: intervention/templates/intervention/detail/view.html:68
#: intervention/templates/intervention/detail/includes/revocation.html:60
msgid "Remove revocation"
msgstr "Widerspruch entfernen"
#: intervention/templates/intervention/detail/view.html:28
msgid "Process type"
msgstr "Verfahrenstyp"
#: intervention/templates/intervention/detail/view.html:76
#: intervention/templates/intervention/detail/view.html:36
msgid "Registration office"
msgstr "Zulassungsbehörde"
#: intervention/templates/intervention/detail/view.html:80
#: intervention/templates/intervention/detail/view.html:40
msgid "Registration office file number"
msgstr "Aktenzeichen Zulassungsbehörde"
#: intervention/templates/intervention/detail/view.html:84
#: intervention/templates/intervention/detail/view.html:44
msgid "Conservation office"
msgstr "Naturschutzbehörde"
#: intervention/templates/intervention/detail/view.html:88
#: intervention/templates/intervention/detail/view.html:48
msgid "Conversation office file number"
msgstr "Aktenzeichen Naturschutzbehörde"
#: intervention/templates/intervention/detail/view.html:124
#: intervention/templates/intervention/detail/view.html:84
msgid "Registration date"
msgstr "Datum Zulassung bzw. Satzungsbeschluss"
#: intervention/templates/intervention/detail/view.html:128
#: intervention/templates/intervention/detail/view.html:88
msgid "Binding on"
msgstr "Datum Bestandskraft"
#: intervention/views.py:65
#: intervention/views.py:67
msgid "Intervention {} added"
msgstr "Eingriff {} hinzugefügt"
#: intervention/views.py:68 intervention/views.py:157
#: intervention/views.py:70 intervention/views.py:167
msgid "Invalid input"
msgstr "Eingabe fehlerhaft"
#: intervention/views.py:131
#: intervention/views.py:126
msgid "This intervention has a revocation from {}"
msgstr "Es existiert ein Widerspruch vom {}"
#: intervention/views.py:141
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 "
@ -690,30 +733,38 @@ msgstr ""
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
"noch Prüfungen durchführen oder verzeichnen können."
#: intervention/views.py:154
#: intervention/views.py:164
msgid "{} edited"
msgstr "{} bearbeitet"
#: intervention/views.py:183
#: intervention/views.py:193
msgid "{} removed"
msgstr "{} entfernt"
#: intervention/views.py:210
#: intervention/views.py:214
msgid "Revocation removed"
msgstr "Widerspruch entfernt"
#: intervention/views.py:240
msgid "{} has already been shared with you"
msgstr "{} wurde bereits für Sie freigegeben"
#: intervention/views.py:215
#: intervention/views.py:245
msgid "{} has been shared with you"
msgstr "{} ist nun für Sie freigegeben"
#: intervention/views.py:222
#: intervention/views.py:252
msgid "Share link invalid"
msgstr "Freigabelink ungültig"
#: intervention/views.py:246
#: intervention/views.py:276
msgid "Share settings updated"
msgstr "Freigabe Einstellungen aktualisiert"
#: intervention/views.py:307
msgid "Revocation added"
msgstr "Widerspruch hinzugefügt"
#: konova/decorators.py:29
msgid "You need to be staff to perform this action!"
msgstr "Hierfür müssen Sie Mitarbeiter sein!"
@ -764,10 +815,6 @@ msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
msgid "File"
msgstr "Datei"
#: konova/forms.py:276
msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein"
#: konova/management/commands/setup_data.py:42
msgid "On new related data"
msgstr "Wenn neue Daten für mich angelegt werden"