diff --git a/compensation/forms/modalForms.py b/compensation/forms/modalForms.py index a6e7df26..5368077c 100644 --- a/compensation/forms/modalForms.py +++ b/compensation/forms/modalForms.py @@ -18,7 +18,7 @@ from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION CODELIST_COMPENSATION_ACTION_DETAIL_ID from compensation.models import CompensationDocument, EcoAccountDocument from konova.contexts import BaseContext -from konova.forms import BaseModalForm, NewDocumentForm, RemoveModalForm +from konova.forms import BaseModalForm, NewDocumentModalForm, RemoveModalForm from konova.models import DeadlineType from konova.utils.message_templates import FORM_INVALID, ADDED_COMPENSATION_STATE, ADDED_DEADLINE, \ ADDED_COMPENSATION_ACTION, PAYMENT_EDITED @@ -443,9 +443,9 @@ class NewActionModalForm(BaseModalForm): return action -class NewCompensationDocumentForm(NewDocumentForm): +class NewCompensationDocumentModalForm(NewDocumentModalForm): document_model = CompensationDocument -class NewEcoAccountDocumentForm(NewDocumentForm): +class NewEcoAccountDocumentModalForm(NewDocumentModalForm): document_model = EcoAccountDocument \ No newline at end of file diff --git a/compensation/views/compensation.py b/compensation/views/compensation.py index c4b5c2f5..95f4ac0b 100644 --- a/compensation/views/compensation.py +++ b/compensation/views/compensation.py @@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _ from compensation.forms.forms import NewCompensationForm, EditCompensationForm from compensation.forms.modalForms import NewStateModalForm, NewDeadlineModalForm, NewActionModalForm, \ - NewCompensationDocumentForm, RemoveCompensationActionModalForm, RemoveCompensationStateModalForm + NewCompensationDocumentModalForm, RemoveCompensationActionModalForm, RemoveCompensationStateModalForm from compensation.models import Compensation, CompensationState, CompensationAction, CompensationDocument from compensation.tables import CompensationTable from intervention.models import Intervention @@ -276,7 +276,7 @@ def new_document_view(request: HttpRequest, id: str): """ comp = get_object_or_404(Compensation, id=id) - form = NewCompensationDocumentForm(request.POST or None, request.FILES or None, instance=comp, request=request) + form = NewCompensationDocumentModalForm(request.POST or None, request.FILES or None, instance=comp, request=request) return form.process_request( request, msg_success=DOCUMENT_ADDED, diff --git a/compensation/views/eco_account.py b/compensation/views/eco_account.py index 08e01a61..d433d551 100644 --- a/compensation/views/eco_account.py +++ b/compensation/views/eco_account.py @@ -16,7 +16,7 @@ from django.shortcuts import render, get_object_or_404, redirect from compensation.forms.forms import NewEcoAccountForm, EditEcoAccountForm from compensation.forms.modalForms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm, \ - NewEcoAccountDocumentForm, RemoveCompensationActionModalForm, RemoveCompensationStateModalForm + NewEcoAccountDocumentModalForm, RemoveCompensationActionModalForm, RemoveCompensationStateModalForm from compensation.models import EcoAccount, EcoAccountDocument, CompensationState, CompensationAction from compensation.tables import EcoAccountTable from intervention.forms.modalForms import NewDeductionModalForm, ShareModalForm, RemoveEcoAccountDeductionModalForm, \ @@ -24,7 +24,7 @@ from intervention.forms.modalForms import NewDeductionModalForm, ShareModalForm, from konova.contexts import BaseContext from konova.decorators import any_group_check, default_group_required, conservation_office_group_required, \ shared_access_required -from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm, RecordModalForm, RemoveDeadlineModalForm +from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentModalForm, RecordModalForm, RemoveDeadlineModalForm from konova.models import Deadline from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER @@ -524,7 +524,7 @@ def new_document_view(request: HttpRequest, id: str): """ acc = get_object_or_404(EcoAccount, id=id) - form = NewEcoAccountDocumentForm(request.POST or None, request.FILES or None, instance=acc, request=request) + form = NewEcoAccountDocumentModalForm(request.POST or None, request.FILES or None, instance=acc, request=request) return form.process_request( request, msg_success=DOCUMENT_ADDED, diff --git a/ema/forms.py b/ema/forms.py index 5dc3bcfb..2f193605 100644 --- a/ema/forms.py +++ b/ema/forms.py @@ -15,7 +15,7 @@ from django.utils.translation import gettext_lazy as _ from compensation.forms.forms import AbstractCompensationForm, CompensationResponsibleFormMixin from ema.models import Ema, EmaDocument from intervention.models import Responsibility -from konova.forms import SimpleGeomForm, NewDocumentForm +from konova.forms import SimpleGeomForm, NewDocumentModalForm from user.models import UserActionLogEntry @@ -150,5 +150,5 @@ class EditEmaForm(NewEmaForm): return self.instance -class NewEmaDocumentForm(NewDocumentForm): +class NewEmaDocumentModalForm(NewDocumentModalForm): document_model = EmaDocument \ No newline at end of file diff --git a/ema/views.py b/ema/views.py index 900dde7c..99c80be3 100644 --- a/ema/views.py +++ b/ema/views.py @@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _ from compensation.forms.modalForms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm, \ RemoveCompensationActionModalForm, RemoveCompensationStateModalForm from compensation.models import CompensationAction, CompensationState -from ema.forms import NewEmaForm, EditEmaForm, NewEmaDocumentForm +from ema.forms import NewEmaForm, EditEmaForm, NewEmaDocumentModalForm from ema.tables import EmaTable from intervention.forms.modalForms import ShareModalForm from konova.contexts import BaseContext @@ -356,7 +356,7 @@ def document_new_view(request: HttpRequest, id: str): """ ema = get_object_or_404(Ema, id=id) - form = NewEmaDocumentForm(request.POST or None, request.FILES or None, instance=ema, request=request) + form = NewEmaDocumentModalForm(request.POST or None, request.FILES or None, instance=ema, request=request) return form.process_request( request, msg_success=DOCUMENT_ADDED, diff --git a/intervention/forms/modalForms.py b/intervention/forms/modalForms.py index 8039b3ae..a8fa98de 100644 --- a/intervention/forms/modalForms.py +++ b/intervention/forms/modalForms.py @@ -19,7 +19,7 @@ from django.utils.translation import gettext_lazy as _ from compensation.models import EcoAccount, EcoAccountDeduction from intervention.inputs import TextToClipboardInput from intervention.models import Intervention, InterventionDocument, RevocationDocument -from konova.forms import BaseModalForm, NewDocumentForm, RemoveModalForm +from konova.forms import BaseModalForm, NewDocumentModalForm, RemoveModalForm from konova.utils.general import format_german_float from konova.utils.user_checks import is_default_group_only @@ -170,32 +170,6 @@ class NewRevocationModalForm(BaseModalForm): "enctype": "multipart/form-data", # important for file upload } - def is_valid(self): - super_valid = super().is_valid() - - _file = self.cleaned_data.get("file", None) - - if isinstance(_file, FieldFile): - # FieldFile declares that no new file has been uploaded and we do not need to check on the file again - return super_valid - - mime_type_valid = self.document_model.is_mime_type_valid(_file) - if not mime_type_valid: - self.add_error( - "file", - FILE_TYPE_UNSUPPORTED - ) - - file_size_valid = self.document_model.is_file_size_valid(_file) - if not file_size_valid: - self.add_error( - "file", - FILE_SIZE_TOO_LARGE - ) - - file_valid = mime_type_valid and file_size_valid - return super_valid and file_valid - def save(self): revocation = self.instance.add_revocation(self) self.instance.mark_as_edited(self.user, self.request, edit_comment=REVOCATION_ADDED) @@ -543,5 +517,5 @@ class RemoveEcoAccountDeductionModalForm(RemoveModalForm): self.deduction.delete() -class NewInterventionDocumentForm(NewDocumentForm): +class NewInterventionDocumentModalForm(NewDocumentModalForm): document_model = InterventionDocument diff --git a/intervention/templates/intervention/detail/includes/documents.html b/intervention/templates/intervention/detail/includes/documents.html index f536f154..93309f5c 100644 --- a/intervention/templates/intervention/detail/includes/documents.html +++ b/intervention/templates/intervention/detail/includes/documents.html @@ -27,7 +27,10 @@ {% trans 'Title' %} - + + {% trans 'Created on' %} + + {% trans 'Comment' %} {% if is_default_member and has_access %} @@ -43,18 +46,26 @@ {% for doc in obj.documents.all %} - + {{ doc.title }} + +
+ {{ doc.date_of_creation }} +
+
{{ doc.comment }}
- + {% if is_default_member and has_access %} - + {% endif %} diff --git a/intervention/urls.py b/intervention/urls.py index 45985587..2a5e6d38 100644 --- a/intervention/urls.py +++ b/intervention/urls.py @@ -10,7 +10,7 @@ from django.urls import path from intervention.views import index_view, new_view, detail_view, edit_view, remove_view, new_document_view, share_view, \ create_share_view, remove_revocation_view, new_revocation_view, check_view, log_view, new_deduction_view, \ record_view, remove_document_view, get_document_view, get_revocation_view, new_id_view, report_view, \ - remove_deduction_view, remove_compensation_view, edit_deduction_view, edit_revocation_view + remove_deduction_view, remove_compensation_view, edit_deduction_view, edit_revocation_view, edit_document_view app_name = "intervention" urlpatterns = [ @@ -32,8 +32,9 @@ urlpatterns = [ # Documents path('/document/new/', new_document_view, name='new-doc'), - path('document/', get_document_view, name='get-doc'), - path('document//remove/', remove_document_view, name='remove-doc'), + path('/document/', get_document_view, name='get-doc'), + path('/document//remove/', remove_document_view, name='remove-doc'), + path('/document//edit/', edit_document_view, name='edit-doc'), # Deductions path('/deduction/new', new_deduction_view, name='new-deduction'), diff --git a/intervention/views.py b/intervention/views.py index 90447c91..2945c337 100644 --- a/intervention/views.py +++ b/intervention/views.py @@ -6,19 +6,19 @@ from django.shortcuts import render from intervention.forms.forms import NewInterventionForm, EditInterventionForm from intervention.forms.modalForms import ShareModalForm, NewRevocationModalForm, \ - CheckModalForm, NewDeductionModalForm, NewInterventionDocumentForm, RemoveEcoAccountDeductionModalForm, \ + CheckModalForm, NewDeductionModalForm, NewInterventionDocumentModalForm, RemoveEcoAccountDeductionModalForm, \ RemoveRevocationModalForm, EditEcoAccountDeductionModalForm, EditRevocationModalForm from intervention.models import Intervention, Revocation, InterventionDocument, RevocationDocument from intervention.tables import InterventionTable from konova.contexts import BaseContext from konova.decorators import * -from konova.forms import SimpleGeomForm, RemoveModalForm, RecordModalForm +from konova.forms import SimpleGeomForm, RemoveModalForm, RecordModalForm, EditDocumentModalForm from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.utils.documents import remove_document, get_document from konova.utils.generators import generate_qr_code from konova.utils.message_templates import INTERVENTION_INVALID, FORM_INVALID, IDENTIFIER_REPLACED, \ CHECKED_RECORDED_RESET, DEDUCTION_REMOVED, DEDUCTION_ADDED, REVOCATION_ADDED, REVOCATION_REMOVED, \ - COMPENSATION_REMOVED_TEMPLATE, DOCUMENT_ADDED, DEDUCTION_EDITED, REVOCATION_EDITED + COMPENSATION_REMOVED_TEMPLATE, DOCUMENT_ADDED, DEDUCTION_EDITED, REVOCATION_EDITED, DOCUMENT_EDITED from konova.utils.user_checks import in_group @@ -129,7 +129,7 @@ def new_document_view(request: HttpRequest, id: str): """ intervention = get_object_or_404(Intervention, id=id) - form = NewInterventionDocumentForm(request.POST or None, request.FILES or None, instance=intervention, request=request) + form = NewInterventionDocumentModalForm(request.POST or None, request.FILES or None, instance=intervention, request=request) return form.process_request( request, msg_success=DOCUMENT_ADDED, @@ -164,18 +164,21 @@ def get_revocation_view(request: HttpRequest, doc_id: str): @login_required @default_group_required -def get_document_view(request: HttpRequest, doc_id: str): +@shared_access_required(Intervention, "id") +def get_document_view(request: HttpRequest, id: str, doc_id: str): """ Returns the document as downloadable file Wraps the generic document fetcher function from konova.utils. Args: request (HttpRequest): The incoming request + id (str): The intervention id doc_id (str): The document id Returns: """ + intervention = get_object_or_404(Intervention, id=id) doc = get_object_or_404(InterventionDocument, id=doc_id) user = request.user instance = doc.instance @@ -191,18 +194,21 @@ def get_document_view(request: HttpRequest, doc_id: str): @login_required @default_group_required -def remove_document_view(request: HttpRequest, doc_id: str): +@shared_access_required(Intervention, "id") +def remove_document_view(request: HttpRequest, id: str, doc_id: str): """ Removes the document from the database and file system Wraps the generic functionality from konova.utils. Args: request (HttpRequest): The incoming request + id (str): The intervention id doc_id (str): The document id Returns: """ + intervention = get_object_or_404(Intervention, id=id) doc = get_object_or_404(InterventionDocument, id=doc_id) return remove_document( request, @@ -210,6 +216,32 @@ def remove_document_view(request: HttpRequest, doc_id: str): ) +@login_required +@default_group_required +@shared_access_required(Intervention, "id") +def edit_document_view(request: HttpRequest, id: str, doc_id: str): + """ Removes the document from the database and file system + + Wraps the generic functionality from konova.utils. + + Args: + request (HttpRequest): The incoming request + id (str): The intervention id + doc_id (str): The document id + + Returns: + + """ + intervention = get_object_or_404(Intervention, id=id) + doc = get_object_or_404(InterventionDocument, id=doc_id) + form = EditDocumentModalForm(request.POST or None, request.FILES or None, instance=intervention, document=doc, request=request) + return form.process_request( + request, + DOCUMENT_EDITED, + redirect_url=reverse("intervention:detail", args=(intervention.id,)) + "#related_data" + ) + + @login_required @any_group_check def detail_view(request: HttpRequest, id: str): diff --git a/konova/forms.py b/konova/forms.py index a842e411..57562f71 100644 --- a/konova/forms.py +++ b/konova/forms.py @@ -12,6 +12,8 @@ from bootstrap_modal_forms.forms import BSModalForm from bootstrap_modal_forms.utils import is_ajax from django import forms from django.contrib import messages +from django.db.models.fields.files import FieldFile + from user.models import User from django.contrib.gis.forms import OSMWidget, MultiPolygonField from django.contrib.gis.geos import MultiPolygon @@ -21,10 +23,10 @@ from django.shortcuts import render from django.utils.translation import gettext_lazy as _ from konova.contexts import BaseContext -from konova.models import BaseObject, Geometry, RecordableObjectMixin +from konova.models import BaseObject, Geometry, RecordableObjectMixin, AbstractDocument from konova.settings import DEFAULT_SRID from konova.tasks import celery_update_parcels -from konova.utils.message_templates import FORM_INVALID, FILE_TYPE_UNSUPPORTED, FILE_SIZE_TOO_LARGE +from konova.utils.message_templates import FORM_INVALID, FILE_TYPE_UNSUPPORTED, FILE_SIZE_TOO_LARGE, DOCUMENT_EDITED from user.models import UserActionLogEntry @@ -348,7 +350,7 @@ class RemoveDeadlineModalForm(RemoveModalForm): self.instance.remove_deadline(self) -class NewDocumentForm(BaseModalForm): +class NewDocumentModalForm(BaseModalForm): """ Modal form for new documents """ @@ -420,6 +422,10 @@ class NewDocumentForm(BaseModalForm): _file = self.cleaned_data.get("file", None) + if _file is None or isinstance(_file, FieldFile): + # FieldFile declares that no new file has been uploaded and we do not need to check on the file again + return super_valid + mime_type_valid = self.document_model.is_mime_type_valid(_file) if not mime_type_valid: self.add_error( @@ -458,6 +464,39 @@ class NewDocumentForm(BaseModalForm): return doc +class EditDocumentModalForm(NewDocumentModalForm): + document = None + document_model = AbstractDocument + + def __init__(self, *args, **kwargs): + self.document = kwargs.pop("document", None) + super().__init__(*args, **kwargs) + form_data = { + "title": self.document.title, + "comment": self.document.comment, + "creation_date": str(self.document.date_of_creation), + "file": self.document.file, + } + self.load_initial_data(form_data) + + + def save(self): + with transaction.atomic(): + document = self.document + file = self.cleaned_data.get("file", None) + + document.title = self.cleaned_data.get("title", None) + document.comment = self.cleaned_data.get("comment", None) + document.date_of_creation = self.cleaned_data.get("creation_date", None) + if not isinstance(file, FieldFile): + document.replace_file(file) + document.save() + + self.instance.mark_as_edited(self.user, self.request, edit_comment=DOCUMENT_EDITED) + + return document + + class RecordModalForm(BaseModalForm): """ Modal form for recording data diff --git a/konova/utils/documents.py b/konova/utils/documents.py index 63a7d328..f9b15160 100644 --- a/konova/utils/documents.py +++ b/konova/utils/documents.py @@ -50,5 +50,5 @@ def remove_document(request: HttpRequest, doc: AbstractDocument): form = RemoveModalForm(request.POST or None, instance=doc, request=request) return form.process_request( request=request, - msg_success=DOCUMENT_REMOVED_TEMPLATE.format(title) + msg_success=DOCUMENT_REMOVED_TEMPLATE.format(title), ) \ No newline at end of file diff --git a/konova/utils/message_templates.py b/konova/utils/message_templates.py index 2196dd9c..c7a2be00 100644 --- a/konova/utils/message_templates.py +++ b/konova/utils/message_templates.py @@ -65,6 +65,7 @@ REVOCATION_REMOVED = _("Revocation removed") # DOCUMENTS DOCUMENT_REMOVED_TEMPLATE = _("Document '{}' deleted") DOCUMENT_ADDED = _("Document added") +DOCUMENT_EDITED = _("Document edited") # Edited EDITED_GENERAL_DATA = _("Edited general data") diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 86cf2739..f2e51b00 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 67ae2338..488b3d4c 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ #: compensation/forms/modalForms.py:46 compensation/forms/modalForms.py:62 #: compensation/forms/modalForms.py:332 compensation/forms/modalForms.py:425 #: intervention/forms/forms.py:54 intervention/forms/forms.py:156 -#: intervention/forms/forms.py:168 intervention/forms/modalForms.py:124 -#: intervention/forms/modalForms.py:137 intervention/forms/modalForms.py:150 +#: intervention/forms/forms.py:168 intervention/forms/modalForms.py:127 +#: intervention/forms/modalForms.py:140 intervention/forms/modalForms.py:153 #: konova/filters/mixins.py:53 konova/filters/mixins.py:54 #: konova/filters/mixins.py:81 konova/filters/mixins.py:82 #: konova/filters/mixins.py:94 konova/filters/mixins.py:95 @@ -18,15 +18,15 @@ #: konova/filters/mixins.py:270 konova/filters/mixins.py:315 #: konova/filters/mixins.py:353 konova/filters/mixins.py:354 #: konova/filters/mixins.py:385 konova/filters/mixins.py:386 -#: konova/forms.py:141 konova/forms.py:242 konova/forms.py:313 -#: konova/forms.py:357 konova/forms.py:367 konova/forms.py:380 -#: konova/forms.py:392 konova/forms.py:410 user/forms.py:42 +#: konova/forms.py:143 konova/forms.py:244 konova/forms.py:315 +#: konova/forms.py:359 konova/forms.py:369 konova/forms.py:382 +#: konova/forms.py:394 konova/forms.py:412 user/forms.py:42 #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-09 12:52+0100\n" +"POT-Creation-Date: 2022-02-10 10:17+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -63,7 +63,7 @@ msgstr "Verantwortliche Stelle" #: analysis/forms.py:58 compensation/forms/forms.py:88 #: compensation/forms/forms.py:165 intervention/forms/forms.py:64 #: intervention/forms/forms.py:81 intervention/forms/forms.py:97 -#: intervention/forms/forms.py:113 intervention/forms/modalForms.py:46 +#: intervention/forms/forms.py:113 intervention/forms/modalForms.py:49 msgid "Click for selection" msgstr "Auswählen..." @@ -75,7 +75,7 @@ msgstr "Bericht generieren" msgid "Select a timespan and the desired conservation office" msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle" -#: analysis/forms.py:69 konova/forms.py:189 +#: analysis/forms.py:69 konova/forms.py:191 msgid "Continue" msgstr "Weiter" @@ -220,7 +220,7 @@ msgstr "Abbuchungen" #: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36 #: ema/templates/ema/detail/includes/states-after.html:36 #: ema/templates/ema/detail/includes/states-before.html:36 -#: intervention/forms/modalForms.py:311 +#: intervention/forms/modalForms.py:338 msgid "Surface" msgstr "Fläche" @@ -283,8 +283,8 @@ msgid "Type" msgstr "Typ" #: analysis/templates/analysis/reports/includes/old_data/amount.html:24 -#: compensation/tables.py:89 intervention/forms/modalForms.py:322 -#: intervention/forms/modalForms.py:329 intervention/tables.py:88 +#: compensation/tables.py:89 intervention/forms/modalForms.py:349 +#: intervention/forms/modalForms.py:356 intervention/tables.py:88 #: intervention/templates/intervention/detail/view.html:19 #: konova/templates/konova/includes/quickstart/interventions.html:4 #: templates/navbars/navbar.html:22 @@ -294,7 +294,7 @@ msgstr "Eingriff" #: analysis/templates/analysis/reports/includes/old_data/amount.html:34 #: compensation/tables.py:266 #: compensation/templates/compensation/detail/eco_account/view.html:19 -#: intervention/forms/modalForms.py:295 intervention/forms/modalForms.py:302 +#: intervention/forms/modalForms.py:322 intervention/forms/modalForms.py:329 #: konova/templates/konova/includes/quickstart/ecoaccounts.html:4 #: templates/navbars/navbar.html:34 msgid "Eco-account" @@ -340,7 +340,7 @@ msgstr "Automatisch generiert" #: intervention/templates/intervention/detail/includes/documents.html:28 #: intervention/templates/intervention/detail/view.html:31 #: intervention/templates/intervention/report/report.html:12 -#: konova/forms.py:356 +#: konova/forms.py:358 msgid "Title" msgstr "Bezeichnung" @@ -363,11 +363,11 @@ msgstr "Kompensation XY; Flur ABC" #: ema/templates/ema/detail/includes/actions.html:34 #: ema/templates/ema/detail/includes/deadlines.html:34 #: ema/templates/ema/detail/includes/documents.html:31 -#: intervention/forms/forms.py:180 intervention/forms/modalForms.py:149 -#: intervention/templates/intervention/detail/includes/documents.html:31 +#: intervention/forms/forms.py:180 intervention/forms/modalForms.py:152 +#: intervention/templates/intervention/detail/includes/documents.html:34 #: intervention/templates/intervention/detail/includes/payments.html:34 #: intervention/templates/intervention/detail/includes/revocation.html:38 -#: konova/forms.py:391 konova/templates/konova/includes/comment_card.html:16 +#: konova/forms.py:393 konova/templates/konova/includes/comment_card.html:16 msgid "Comment" msgstr "Kommentar" @@ -483,7 +483,7 @@ msgid "Due on which date" msgstr "Zahlung wird an diesem Datum erwartet" #: compensation/forms/modalForms.py:63 compensation/forms/modalForms.py:333 -#: intervention/forms/modalForms.py:151 konova/forms.py:393 +#: intervention/forms/modalForms.py:154 konova/forms.py:395 msgid "Additional comment, maximum {} letters" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" @@ -511,7 +511,7 @@ msgstr "Zusatzbezeichnung" msgid "Select an additional biotope type" msgstr "Zusatzbezeichnung wählen" -#: compensation/forms/modalForms.py:196 intervention/forms/modalForms.py:313 +#: compensation/forms/modalForms.py:196 intervention/forms/modalForms.py:340 msgid "in m²" msgstr "" @@ -523,7 +523,7 @@ msgstr "Neuer Zustand" msgid "Insert data for the new state" msgstr "Geben Sie die Daten des neuen Zustandes ein" -#: compensation/forms/modalForms.py:215 konova/forms.py:191 +#: compensation/forms/modalForms.py:215 konova/forms.py:193 msgid "Object removed" msgstr "Objekt entfernt" @@ -539,7 +539,7 @@ msgstr "Fristart wählen" #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31 #: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31 #: ema/templates/ema/detail/includes/deadlines.html:31 -#: intervention/forms/modalForms.py:123 +#: intervention/forms/modalForms.py:126 msgid "Date" msgstr "Datum" @@ -582,7 +582,7 @@ msgstr "Maßnahmentyp wählen" #: ema/templates/ema/detail/includes/states-before.html:40 #: intervention/templates/intervention/detail/includes/compensations.html:38 #: intervention/templates/intervention/detail/includes/deductions.html:39 -#: intervention/templates/intervention/detail/includes/documents.html:36 +#: intervention/templates/intervention/detail/includes/documents.html:39 #: intervention/templates/intervention/detail/includes/payments.html:39 #: intervention/templates/intervention/detail/includes/revocation.html:43 #: templates/log.html:10 @@ -821,14 +821,14 @@ 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:409 +#: konova/forms.py:411 msgid "Add new document" msgstr "Neues Dokument hinzufügen" #: compensation/templates/compensation/detail/compensation/includes/documents.html:57 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:55 #: ema/templates/ema/detail/includes/documents.html:55 -#: intervention/templates/intervention/detail/includes/documents.html:57 +#: intervention/templates/intervention/detail/includes/documents.html:68 msgid "Remove document" msgstr "Dokument löschen" @@ -943,14 +943,14 @@ msgstr "Zuletzt bearbeitet" #: compensation/templates/compensation/detail/compensation/view.html:99 #: compensation/templates/compensation/detail/eco_account/view.html:82 -#: ema/templates/ema/detail/view.html:76 intervention/forms/modalForms.py:53 +#: ema/templates/ema/detail/view.html:76 intervention/forms/modalForms.py:56 #: intervention/templates/intervention/detail/view.html:116 msgid "Shared with" msgstr "Freigegeben für" #: compensation/templates/compensation/detail/eco_account/includes/controls.html:15 #: ema/templates/ema/detail/includes/controls.html:15 -#: intervention/forms/modalForms.py:67 +#: intervention/forms/modalForms.py:70 #: intervention/templates/intervention/detail/includes/controls.html:15 msgid "Share" msgstr "Freigabe" @@ -992,6 +992,11 @@ msgid "Recorded on" msgstr "Verzeichnet am" #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:65 +#: intervention/templates/intervention/detail/includes/deductions.html:60 +msgid "Edit Deduction" +msgstr "Abbuchung bearbeiten" + +#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:68 #: intervention/templates/intervention/detail/includes/deductions.html:63 msgid "Remove Deduction" msgstr "Abbuchung entfernen" @@ -1080,22 +1085,22 @@ msgstr "Daten zu den verantwortlichen Stellen" msgid "Compensations - Overview" msgstr "Kompensationen - Übersicht" -#: compensation/views/compensation.py:149 konova/utils/message_templates.py:27 +#: compensation/views/compensation.py:149 konova/utils/message_templates.py:31 msgid "Compensation {} edited" msgstr "Kompensation {} bearbeitet" #: compensation/views/compensation.py:159 compensation/views/eco_account.py:163 -#: ema/views.py:230 intervention/views.py:305 +#: ema/views.py:230 intervention/views.py:337 msgid "Edit {}" msgstr "Bearbeite {}" #: compensation/views/compensation.py:238 compensation/views/eco_account.py:347 -#: ema/views.py:191 intervention/views.py:483 +#: ema/views.py:191 intervention/views.py:541 msgid "Log" msgstr "Log" #: compensation/views/compensation.py:487 compensation/views/eco_account.py:620 -#: ema/views.py:477 intervention/views.py:629 +#: ema/views.py:477 intervention/views.py:687 msgid "Report {}" msgstr "Bericht {}" @@ -1116,32 +1121,32 @@ msgid "Eco-account removed" msgstr "Ökokonto entfernt" #: compensation/views/eco_account.py:368 ema/views.py:272 -#: intervention/views.py:582 +#: intervention/views.py:640 msgid "{} unrecorded" msgstr "{} entzeichnet" #: compensation/views/eco_account.py:368 ema/views.py:272 -#: intervention/views.py:582 +#: intervention/views.py:640 msgid "{} recorded" msgstr "{} verzeichnet" #: compensation/views/eco_account.py:693 ema/views.py:543 -#: intervention/views.py:380 +#: intervention/views.py:438 msgid "{} has already been shared with you" msgstr "{} wurde bereits für Sie freigegeben" #: compensation/views/eco_account.py:698 ema/views.py:548 -#: intervention/views.py:385 +#: intervention/views.py:443 msgid "{} has been shared with you" msgstr "{} ist nun für Sie freigegeben" #: compensation/views/eco_account.py:705 ema/views.py:555 -#: intervention/views.py:392 +#: intervention/views.py:450 msgid "Share link invalid" msgstr "Freigabelink ungültig" #: compensation/views/eco_account.py:728 ema/views.py:578 -#: intervention/views.py:415 +#: intervention/views.py:473 msgid "Share settings updated" msgstr "Freigabe Einstellungen aktualisiert" @@ -1254,19 +1259,19 @@ msgstr "Neuer Eingriff" msgid "Edit intervention" msgstr "Eingriff bearbeiten" -#: intervention/forms/modalForms.py:26 +#: intervention/forms/modalForms.py:29 msgid "Share link" msgstr "Freigabelink" -#: intervention/forms/modalForms.py:28 +#: intervention/forms/modalForms.py:31 msgid "Send this link to users who you want to have writing access on the data" msgstr "Andere Nutzer erhalten über diesen Link Zugriff auf die Daten" -#: intervention/forms/modalForms.py:38 +#: intervention/forms/modalForms.py:41 msgid "Add user to share with" msgstr "Nutzer direkt hinzufügen" -#: intervention/forms/modalForms.py:40 +#: intervention/forms/modalForms.py:43 msgid "" "Multiple selection possible - You can only select users which do not already " "have access. Enter the full username." @@ -1274,46 +1279,46 @@ msgstr "" "Mehrfachauswahl möglich - Sie können nur Nutzer wählen, für die der Eintrag " "noch nicht freigegeben wurde. Geben Sie den ganzen Nutzernamen an." -#: intervention/forms/modalForms.py:56 +#: intervention/forms/modalForms.py:59 msgid "Remove check to remove access for this user" msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen" -#: intervention/forms/modalForms.py:68 +#: intervention/forms/modalForms.py:71 msgid "Share settings for {}" msgstr "Freigabe Einstellungen für {}" -#: intervention/forms/modalForms.py:125 +#: intervention/forms/modalForms.py:128 msgid "Date of revocation" msgstr "Datum des Widerspruchs" -#: intervention/forms/modalForms.py:136 +#: intervention/forms/modalForms.py:139 #: intervention/templates/intervention/detail/includes/revocation.html:35 msgid "Document" msgstr "Dokument" -#: intervention/forms/modalForms.py:139 +#: intervention/forms/modalForms.py:142 msgid "Must be smaller than 15 Mb" msgstr "Muss kleiner als 15 Mb sein" -#: intervention/forms/modalForms.py:163 +#: intervention/forms/modalForms.py:167 #: intervention/templates/intervention/detail/includes/revocation.html:18 msgid "Add revocation" msgstr "Widerspruch hinzufügen" -#: intervention/forms/modalForms.py:197 +#: intervention/forms/modalForms.py:224 msgid "Checked intervention data" msgstr "Eingriffsdaten geprüft" -#: intervention/forms/modalForms.py:203 +#: intervention/forms/modalForms.py:230 msgid "Checked compensations data and payments" msgstr "Kompensationen und Zahlungen geprüft" -#: intervention/forms/modalForms.py:212 +#: intervention/forms/modalForms.py:239 #: intervention/templates/intervention/detail/includes/controls.html:19 msgid "Run check" msgstr "Prüfung vornehmen" -#: intervention/forms/modalForms.py:213 konova/forms.py:475 +#: intervention/forms/modalForms.py:240 konova/forms.py:514 msgid "" "I, {} {}, confirm that all necessary control steps have been performed by " "myself." @@ -1321,23 +1326,23 @@ msgstr "" "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "wurden:" -#: intervention/forms/modalForms.py:297 +#: intervention/forms/modalForms.py:324 msgid "Only recorded accounts can be selected for deductions" msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden." -#: intervention/forms/modalForms.py:324 +#: intervention/forms/modalForms.py:351 msgid "Only shared interventions can be selected" msgstr "Nur freigegebene Eingriffe können gewählt werden" -#: intervention/forms/modalForms.py:337 +#: intervention/forms/modalForms.py:364 msgid "New Deduction" msgstr "Neue Abbuchung" -#: intervention/forms/modalForms.py:338 +#: intervention/forms/modalForms.py:365 msgid "Enter the information for a new deduction from a chosen eco-account" msgstr "Geben Sie die Informationen für eine neue Abbuchung ein." -#: intervention/forms/modalForms.py:381 +#: intervention/forms/modalForms.py:408 msgid "" "Eco-account {} is not recorded yet. You can only deduct from recorded " "accounts." @@ -1345,7 +1350,7 @@ msgstr "" "Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von " "verzeichneten Ökokonten erfolgen." -#: intervention/forms/modalForms.py:391 +#: intervention/forms/modalForms.py:418 msgid "" "The account {} has not enough surface for a deduction of {} m². There are " "only {} m² left" @@ -1373,9 +1378,14 @@ msgstr "Ökokonto gelöscht! Abbuchung ungültig!" msgid "Eco-account not recorded! Deduction invalid!" msgstr "Ökokonto nicht verzeichnet! Abbuchung ungültig!" -#: intervention/templates/intervention/detail/includes/deductions.html:60 -msgid "Edit Deduction" -msgstr "Abbuchung bearbeiten" +#: intervention/templates/intervention/detail/includes/documents.html:31 +#: konova/forms.py:368 +msgid "Created on" +msgstr "Erstellt" + +#: intervention/templates/intervention/detail/includes/documents.html:65 +msgid "Edit document" +msgstr "Dokument bearbeitet" #: intervention/templates/intervention/detail/includes/payments.html:8 #: intervention/templates/intervention/report/report.html:73 @@ -1414,6 +1424,10 @@ msgid "Revocation" msgstr "Widerspruch" #: intervention/templates/intervention/detail/includes/revocation.html:69 +msgid "Edit revocation" +msgstr "Widerspruch bearbeiten" + +#: intervention/templates/intervention/detail/includes/revocation.html:72 msgid "Remove revocation" msgstr "Widerspruch entfernen" @@ -1456,19 +1470,19 @@ msgstr "Eingriffe - Übersicht" msgid "Intervention {} added" msgstr "Eingriff {} hinzugefügt" -#: intervention/views.py:293 +#: intervention/views.py:325 msgid "Intervention {} edited" msgstr "Eingriff {} bearbeitet" -#: intervention/views.py:329 +#: intervention/views.py:361 msgid "{} removed" msgstr "{} entfernt" -#: intervention/views.py:436 +#: intervention/views.py:494 msgid "Check performed" msgstr "Prüfung durchgeführt" -#: intervention/views.py:587 +#: intervention/views.py:645 msgid "There are errors on this intervention:" msgstr "Es liegen Fehler in diesem Eingriff vor:" @@ -1552,81 +1566,69 @@ msgstr "Nach Zulassungsbehörde suchen" msgid "Search for conservation office" msgstr "Nch Eintragungsstelle suchen" -#: konova/forms.py:37 templates/form/collapsable/form.html:62 +#: konova/forms.py:39 templates/form/collapsable/form.html:62 msgid "Save" msgstr "Speichern" -#: konova/forms.py:69 +#: konova/forms.py:71 msgid "Not editable" msgstr "Nicht editierbar" -#: konova/forms.py:140 konova/forms.py:312 +#: konova/forms.py:142 konova/forms.py:314 msgid "Confirm" msgstr "Bestätige" -#: konova/forms.py:152 konova/forms.py:321 +#: konova/forms.py:154 konova/forms.py:323 msgid "Remove" msgstr "Löschen" -#: konova/forms.py:154 +#: konova/forms.py:156 msgid "You are about to remove {} {}" msgstr "Sie sind dabei {} {} zu löschen" -#: konova/forms.py:241 konova/utils/quality.py:44 konova/utils/quality.py:46 +#: konova/forms.py:243 konova/utils/quality.py:44 konova/utils/quality.py:46 #: templates/form/collapsable/form.html:45 msgid "Geometry" msgstr "Geometrie" -#: konova/forms.py:322 +#: konova/forms.py:324 msgid "Are you sure?" msgstr "Sind Sie sicher?" -#: konova/forms.py:366 -msgid "Created on" -msgstr "Erstellt" - -#: konova/forms.py:368 +#: konova/forms.py:370 msgid "When has this file been created? Important for photos." msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?" -#: konova/forms.py:379 +#: konova/forms.py:381 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231 msgid "File" msgstr "Datei" -#: konova/forms.py:381 +#: konova/forms.py:383 msgid "Allowed formats: pdf, jpg, png. Max size 15 MB." msgstr "Formate: pdf, jpg, png. Maximal 15 MB." -#: konova/forms.py:427 -msgid "Unsupported file type" -msgstr "Dateiformat nicht unterstützt" - -#: konova/forms.py:434 -msgid "File too large" -msgstr "Datei zu groß" - -#: konova/forms.py:443 +#: konova/forms.py:449 msgid "Added document" msgstr "Dokument hinzugefügt" -#: konova/forms.py:466 +#: konova/forms.py:505 msgid "Confirm record" msgstr "Verzeichnen bestätigen" -#: konova/forms.py:474 +#: konova/forms.py:513 msgid "Record data" msgstr "Daten verzeichnen" -#: konova/forms.py:481 +#: konova/forms.py:520 msgid "Confirm unrecord" msgstr "Entzeichnen bestätigen" -#: konova/forms.py:482 +#: konova/forms.py:521 msgid "Unrecord data" msgstr "Daten entzeichnen" -#: konova/forms.py:483 +#: konova/forms.py:522 msgid "I, {} {}, confirm that this data must be unrecorded." msgstr "" "Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen." @@ -1800,6 +1802,14 @@ msgid "Status of Checked and Recorded reseted" msgstr "'Geprüft'/'Verzeichnet' wurde zurückgesetzt" #: konova/utils/message_templates.py:22 +msgid "Unsupported file type" +msgstr "Dateiformat nicht unterstützt" + +#: konova/utils/message_templates.py:23 +msgid "File too large" +msgstr "Datei zu groß" + +#: konova/utils/message_templates.py:26 msgid "" "Action canceled. Eco account is recorded or deductions exist. Only " "conservation office member can perform this action." @@ -1807,115 +1817,119 @@ msgstr "" "Aktion abgebrochen. Ökokonto ist bereits verzeichnet oder Abbuchungen liegen " "vor. Nur Eintragungsstellennutzer können diese Aktion jetzt durchführen." -#: konova/utils/message_templates.py:25 +#: konova/utils/message_templates.py:29 msgid "Compensation {} added" msgstr "Kompensation {} hinzugefügt" -#: konova/utils/message_templates.py:26 +#: konova/utils/message_templates.py:30 msgid "Compensation {} removed" msgstr "Kompensation {} entfernt" -#: konova/utils/message_templates.py:28 +#: konova/utils/message_templates.py:32 msgid "Added compensation action" msgstr "Maßnahme hinzugefügt" -#: konova/utils/message_templates.py:29 +#: konova/utils/message_templates.py:33 msgid "Added compensation state" msgstr "Zustand hinzugefügt" -#: konova/utils/message_templates.py:32 +#: konova/utils/message_templates.py:36 msgid "State removed" msgstr "Zustand gelöscht" -#: konova/utils/message_templates.py:33 +#: konova/utils/message_templates.py:37 msgid "State edited" msgstr "Zustand bearbeitet" -#: konova/utils/message_templates.py:34 +#: konova/utils/message_templates.py:38 msgid "State added" msgstr "Zustand hinzugefügt" -#: konova/utils/message_templates.py:37 +#: konova/utils/message_templates.py:41 msgid "Action added" msgstr "Maßnahme hinzugefügt" -#: konova/utils/message_templates.py:38 +#: konova/utils/message_templates.py:42 msgid "Action edited" msgstr "Maßnahme bearbeitet" -#: konova/utils/message_templates.py:39 +#: konova/utils/message_templates.py:43 msgid "Action removed" msgstr "Maßnahme entfernt" -#: konova/utils/message_templates.py:42 +#: konova/utils/message_templates.py:46 msgid "Deduction added" msgstr "Abbuchung hinzugefügt" -#: konova/utils/message_templates.py:43 +#: konova/utils/message_templates.py:47 msgid "Deduction edited" msgstr "Abbuchung bearbeitet" -#: konova/utils/message_templates.py:44 +#: konova/utils/message_templates.py:48 msgid "Deduction removed" msgstr "Abbuchung entfernt" -#: konova/utils/message_templates.py:47 +#: konova/utils/message_templates.py:51 msgid "Deadline added" msgstr "Frist/Termin hinzugefügt" -#: konova/utils/message_templates.py:48 +#: konova/utils/message_templates.py:52 msgid "Deadline edited" msgstr "Frist/Termin bearbeitet" -#: konova/utils/message_templates.py:49 +#: konova/utils/message_templates.py:53 msgid "Deadline removed" msgstr "Frist/Termin gelöscht" -#: konova/utils/message_templates.py:52 +#: konova/utils/message_templates.py:56 msgid "Payment added" msgstr "Zahlung hinzugefügt" -#: konova/utils/message_templates.py:53 +#: konova/utils/message_templates.py:57 msgid "Payment edited" msgstr "Zahlung bearbeitet" -#: konova/utils/message_templates.py:54 +#: konova/utils/message_templates.py:58 msgid "Payment removed" msgstr "Zahlung gelöscht" -#: konova/utils/message_templates.py:57 +#: konova/utils/message_templates.py:61 msgid "Revocation added" msgstr "Widerspruch hinzugefügt" -#: konova/utils/message_templates.py:58 +#: konova/utils/message_templates.py:62 msgid "Revocation edited" msgstr "Widerspruch bearbeitet" -#: konova/utils/message_templates.py:59 +#: konova/utils/message_templates.py:63 msgid "Revocation removed" msgstr "Widerspruch entfernt" -#: konova/utils/message_templates.py:62 +#: konova/utils/message_templates.py:66 msgid "Document '{}' deleted" msgstr "Dokument '{}' gelöscht" -#: konova/utils/message_templates.py:63 +#: konova/utils/message_templates.py:67 msgid "Document added" msgstr "Dokument hinzugefügt" -#: konova/utils/message_templates.py:66 +#: konova/utils/message_templates.py:68 +msgid "Document edited" +msgstr "Dokument bearbeitet" + +#: konova/utils/message_templates.py:71 msgid "Edited general data" msgstr "Allgemeine Daten bearbeitet" -#: konova/utils/message_templates.py:67 +#: konova/utils/message_templates.py:72 msgid "Added deadline" msgstr "Frist/Termin hinzugefügt" -#: konova/utils/message_templates.py:70 +#: konova/utils/message_templates.py:75 msgid "Geometry conflict detected with {}" msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}" -#: konova/utils/message_templates.py:73 +#: konova/utils/message_templates.py:78 msgid "This intervention has {} revocations" msgstr "Dem Eingriff liegen {} Widersprüche vor"