From f49bb74c38275a7ce687778455c9840afdeb1145 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Thu, 25 Aug 2022 11:34:09 +0200 Subject: [PATCH] Login required on modals * adds new login_required_modal decorator * can be used before regular login_required decorator to return a proper session-timed-out message --- compensation/views/compensation/action.py | 5 +- .../views/compensation/compensation.py | 3 +- compensation/views/compensation/deadline.py | 5 +- compensation/views/compensation/document.py | 5 +- compensation/views/compensation/log.py | 3 +- .../views/compensation/resubmission.py | 3 +- compensation/views/compensation/state.py | 5 +- compensation/views/eco_account/action.py | 5 +- compensation/views/eco_account/deadline.py | 5 +- compensation/views/eco_account/deduction.py | 5 +- compensation/views/eco_account/document.py | 7 +- compensation/views/eco_account/eco_account.py | 6 +- compensation/views/eco_account/log.py | 3 +- compensation/views/eco_account/record.py | 3 +- .../views/eco_account/resubmission.py | 3 +- compensation/views/eco_account/share.py | 3 +- compensation/views/eco_account/state.py | 5 +- ema/views/action.py | 5 +- ema/views/deadline.py | 5 +- ema/views/document.py | 5 +- ema/views/ema.py | 3 +- ema/views/log.py | 3 +- ema/views/record.py | 3 +- ema/views/resubmission.py | 3 +- ema/views/share.py | 3 +- ema/views/state.py | 5 +- intervention/views/compensation.py | 3 +- intervention/views/intervention.py | 3 +- intervention/views/resubmission.py | 3 +- intervention/views/revocation.py | 3 +- intervention/views/share.py | 3 +- konova/decorators.py | 30 +- locale/de/LC_MESSAGES/django.mo | Bin 45149 -> 45396 bytes locale/de/LC_MESSAGES/django.po | 1149 +++++++++-------- templates/modal/modal_session_timed_out.html | 3 + user/views.py | 8 +- 36 files changed, 726 insertions(+), 588 deletions(-) create mode 100644 templates/modal/modal_session_timed_out.html diff --git a/compensation/views/compensation/action.py b/compensation/views/compensation/action.py index 1f5b933..aa87c71 100644 --- a/compensation/views/compensation/action.py +++ b/compensation/views/compensation/action.py @@ -14,7 +14,7 @@ from django.utils.decorators import method_decorator from compensation.forms.modals.compensation_action import RemoveCompensationActionModalForm, \ EditCompensationActionModalForm, NewCompensationActionModalForm from compensation.models import Compensation, CompensationAction -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.utils.message_templates import COMPENSATION_ACTION_REMOVED, COMPENSATION_ACTION_EDITED, \ COMPENSATION_ACTION_ADDED from konova.views.action import AbstractNewCompensationActionView, AbstractEditCompensationActionView, \ @@ -25,6 +25,7 @@ class NewCompensationActionView(AbstractNewCompensationActionView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -36,6 +37,7 @@ class EditCompensationActionView(AbstractEditCompensationActionView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -47,6 +49,7 @@ class RemoveCompensationActionView(AbstractRemoveCompensationActionView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) diff --git a/compensation/views/compensation/compensation.py b/compensation/views/compensation/compensation.py index dd46110..5764689 100644 --- a/compensation/views/compensation/compensation.py +++ b/compensation/views/compensation/compensation.py @@ -19,7 +19,7 @@ from compensation.models import Compensation from compensation.tables.compensation import CompensationTable from intervention.models import Intervention from konova.contexts import BaseContext -from konova.decorators import shared_access_required, default_group_required, any_group_check +from konova.decorators import shared_access_required, default_group_required, any_group_check, login_required_modal from konova.forms import SimpleGeomForm from konova.forms.modals import RemoveModalForm from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP @@ -249,6 +249,7 @@ def detail_view(request: HttpRequest, id: str): return render(request, template, context) +@login_required_modal @login_required @default_group_required @shared_access_required(Compensation, "id") diff --git a/compensation/views/compensation/deadline.py b/compensation/views/compensation/deadline.py index 7463b7e..7e2a9fb 100644 --- a/compensation/views/compensation/deadline.py +++ b/compensation/views/compensation/deadline.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import Compensation -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.deadline import AbstractRemoveDeadlineView, AbstractEditDeadlineView, AbstractNewDeadlineView @@ -17,6 +17,7 @@ class NewCompensationDeadlineView(AbstractNewDeadlineView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -28,6 +29,7 @@ class EditCompensationDeadlineView(AbstractEditDeadlineView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -39,6 +41,7 @@ class RemoveCompensationDeadlineView(AbstractRemoveDeadlineView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) diff --git a/compensation/views/compensation/document.py b/compensation/views/compensation/document.py index cb31739..cb7de2a 100644 --- a/compensation/views/compensation/document.py +++ b/compensation/views/compensation/document.py @@ -10,7 +10,7 @@ from django.utils.decorators import method_decorator from compensation.forms.modals.document import NewCompensationDocumentModalForm from compensation.models import Compensation, CompensationDocument -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.forms.modals import EditDocumentModalForm from konova.views.document import AbstractNewDocumentView, AbstractGetDocumentView, AbstractRemoveDocumentView, \ AbstractEditDocumentView @@ -21,6 +21,7 @@ class NewCompensationDocumentView(AbstractNewDocumentView): form = NewCompensationDocumentModalForm redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -43,6 +44,7 @@ class RemoveCompensationDocumentView(AbstractRemoveDocumentView): model = Compensation document_model = CompensationDocument + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -56,6 +58,7 @@ class EditCompensationDocumentView(AbstractEditDocumentView): form = EditDocumentModalForm redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) diff --git a/compensation/views/compensation/log.py b/compensation/views/compensation/log.py index 2240684..40b15a1 100644 --- a/compensation/views/compensation/log.py +++ b/compensation/views/compensation/log.py @@ -9,13 +9,14 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import Compensation -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.log import AbstractLogView class CompensationLogView(AbstractLogView): model = Compensation + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) diff --git a/compensation/views/compensation/resubmission.py b/compensation/views/compensation/resubmission.py index dfcbad2..31b073e 100644 --- a/compensation/views/compensation/resubmission.py +++ b/compensation/views/compensation/resubmission.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import Compensation -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.resubmission import AbstractResubmissionView @@ -18,6 +18,7 @@ class CompensationResubmissionView(AbstractResubmissionView): redirect_url_base = "compensation:detail" form_action_url_base = "compensation:resubmission-create" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) diff --git a/compensation/views/compensation/state.py b/compensation/views/compensation/state.py index 136e860..8fffbbd 100644 --- a/compensation/views/compensation/state.py +++ b/compensation/views/compensation/state.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import Compensation -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.state import AbstractNewCompensationStateView, AbstractEditCompensationStateView, \ AbstractRemoveCompensationStateView @@ -18,6 +18,7 @@ class NewCompensationStateView(AbstractNewCompensationStateView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -29,6 +30,7 @@ class EditCompensationStateView(AbstractEditCompensationStateView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) @@ -40,6 +42,7 @@ class RemoveCompensationStateView(AbstractRemoveCompensationStateView): model = Compensation redirect_url = "compensation:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Compensation, "id")) diff --git a/compensation/views/eco_account/action.py b/compensation/views/eco_account/action.py index e459def..6aca382 100644 --- a/compensation/views/eco_account/action.py +++ b/compensation/views/eco_account/action.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.action import AbstractNewCompensationActionView, AbstractEditCompensationActionView, \ AbstractRemoveCompensationActionView @@ -18,6 +18,7 @@ class NewEcoAccountActionView(AbstractNewCompensationActionView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -29,6 +30,7 @@ class EditEcoAccountActionView(AbstractEditCompensationActionView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -40,6 +42,7 @@ class RemoveEcoAccountActionView(AbstractRemoveCompensationActionView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/compensation/views/eco_account/deadline.py b/compensation/views/eco_account/deadline.py index 15b4aa8..c49dba3 100644 --- a/compensation/views/eco_account/deadline.py +++ b/compensation/views/eco_account/deadline.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.deadline import AbstractNewDeadlineView, AbstractEditDeadlineView, AbstractRemoveDeadlineView @@ -17,6 +17,7 @@ class NewEcoAccountDeadlineView(AbstractNewDeadlineView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -28,6 +29,7 @@ class EditEcoAccountDeadlineView(AbstractEditDeadlineView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -39,6 +41,7 @@ class RemoveEcoAccountDeadlineView(AbstractRemoveDeadlineView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/compensation/views/eco_account/deduction.py b/compensation/views/eco_account/deduction.py index c7598bb..1de6c60 100644 --- a/compensation/views/eco_account/deduction.py +++ b/compensation/views/eco_account/deduction.py @@ -10,7 +10,7 @@ from django.http import Http404 from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import default_group_required +from konova.decorators import default_group_required, login_required_modal from konova.views.deduction import AbstractNewDeductionView, AbstractEditDeductionView, AbstractRemoveDeductionView @@ -18,6 +18,7 @@ class NewEcoAccountDeductionView(AbstractNewDeductionView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) def dispatch(self, request, *args, **kwargs): @@ -35,6 +36,7 @@ class EditEcoAccountDeductionView(AbstractEditDeductionView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) def dispatch(self, request, *args, **kwargs): @@ -48,6 +50,7 @@ class RemoveEcoAccountDeductionView(AbstractRemoveDeductionView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) def dispatch(self, request, *args, **kwargs): diff --git a/compensation/views/eco_account/document.py b/compensation/views/eco_account/document.py index 40b40a0..73fdcd4 100644 --- a/compensation/views/eco_account/document.py +++ b/compensation/views/eco_account/document.py @@ -13,10 +13,8 @@ from django.utils.decorators import method_decorator from compensation.forms.modals.document import NewEcoAccountDocumentModalForm from compensation.models import EcoAccount, EcoAccountDocument -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.forms.modals import EditDocumentModalForm -from konova.utils.documents import remove_document, get_document -from konova.utils.message_templates import DOCUMENT_EDITED, DOCUMENT_ADDED from konova.views.document import AbstractNewDocumentView, AbstractGetDocumentView, AbstractRemoveDocumentView, \ AbstractEditDocumentView @@ -26,6 +24,7 @@ class NewEcoAccountDocumentView(AbstractNewDocumentView): form = NewEcoAccountDocumentModalForm redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -48,6 +47,7 @@ class RemoveEcoAccountDocumentView(AbstractRemoveDocumentView): model = EcoAccount document_model = EcoAccountDocument + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -61,6 +61,7 @@ class EditEcoAccountDocumentView(AbstractEditDocumentView): form = EditDocumentModalForm redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/compensation/views/eco_account/eco_account.py b/compensation/views/eco_account/eco_account.py index df99b95..f75fcc1 100644 --- a/compensation/views/eco_account/eco_account.py +++ b/compensation/views/eco_account/eco_account.py @@ -17,12 +17,13 @@ from compensation.forms.eco_account import EditEcoAccountForm, NewEcoAccountForm from compensation.models import EcoAccount from compensation.tables.eco_account import EcoAccountTable from konova.contexts import BaseContext -from konova.decorators import shared_access_required, default_group_required, any_group_check +from konova.decorators import shared_access_required, default_group_required, any_group_check, login_required_modal from konova.forms import SimpleGeomForm from konova.forms.modals import RemoveModalForm from konova.settings import ETS_GROUP, DEFAULT_GROUP, ZB_GROUP from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER -from konova.utils.message_templates import CANCEL_ACC_RECORDED_OR_DEDUCTED, RECORDED_BLOCKS_EDIT, FORM_INVALID +from konova.utils.message_templates import CANCEL_ACC_RECORDED_OR_DEDUCTED, RECORDED_BLOCKS_EDIT, FORM_INVALID, \ + IDENTIFIER_REPLACED from konova.utils.user_checks import in_group @@ -234,6 +235,7 @@ def detail_view(request: HttpRequest, id: str): return render(request, template, context) +@login_required_modal @login_required @default_group_required @shared_access_required(EcoAccount, "id") diff --git a/compensation/views/eco_account/log.py b/compensation/views/eco_account/log.py index b9ca5bc..e18d945 100644 --- a/compensation/views/eco_account/log.py +++ b/compensation/views/eco_account/log.py @@ -9,13 +9,14 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.log import AbstractLogView class EcoAccountLogView(AbstractLogView): model = EcoAccount + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/compensation/views/eco_account/record.py b/compensation/views/eco_account/record.py index 18ccf23..0d1f207 100644 --- a/compensation/views/eco_account/record.py +++ b/compensation/views/eco_account/record.py @@ -9,13 +9,14 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.views.record import AbstractRecordView class EcoAccountRecordView(AbstractRecordView): model = EcoAccount + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/compensation/views/eco_account/resubmission.py b/compensation/views/eco_account/resubmission.py index afe8c71..19b8dca 100644 --- a/compensation/views/eco_account/resubmission.py +++ b/compensation/views/eco_account/resubmission.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.resubmission import AbstractResubmissionView @@ -18,6 +18,7 @@ class EcoAccountResubmissionView(AbstractResubmissionView): redirect_url_base = "compensation:acc:detail" form_action_url_base = "compensation:acc:resubmission-create" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/compensation/views/eco_account/share.py b/compensation/views/eco_account/share.py index c2f2e53..19c8903 100644 --- a/compensation/views/eco_account/share.py +++ b/compensation/views/eco_account/share.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.share import AbstractShareByTokenView, AbstractShareFormView @@ -25,6 +25,7 @@ class EcoAccountShareByTokenView(AbstractShareByTokenView): class EcoAccountShareFormView(AbstractShareFormView): model = EcoAccount + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/compensation/views/eco_account/state.py b/compensation/views/eco_account/state.py index 0591a17..1a28491 100644 --- a/compensation/views/eco_account/state.py +++ b/compensation/views/eco_account/state.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from compensation.models import EcoAccount -from konova.decorators import shared_access_required, default_group_required +from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.state import AbstractNewCompensationStateView, AbstractEditCompensationStateView, \ AbstractRemoveCompensationStateView @@ -18,6 +18,7 @@ class NewEcoAccountStateView(AbstractNewCompensationStateView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -29,6 +30,7 @@ class EditEcoAccountStateView(AbstractEditCompensationStateView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) @@ -40,6 +42,7 @@ class RemoveEcoAccountStateView(AbstractRemoveCompensationStateView): model = EcoAccount redirect_url = "compensation:acc:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(EcoAccount, "id")) diff --git a/ema/views/action.py b/ema/views/action.py index bae950c..068c224 100644 --- a/ema/views/action.py +++ b/ema/views/action.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from ema.models import Ema -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.views.action import AbstractNewCompensationActionView, AbstractEditCompensationActionView, \ AbstractRemoveCompensationActionView @@ -18,6 +18,7 @@ class NewEmaActionView(AbstractNewCompensationActionView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -29,6 +30,7 @@ class EditEmaActionView(AbstractEditCompensationActionView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -40,6 +42,7 @@ class RemoveEmaActionView(AbstractRemoveCompensationActionView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/ema/views/deadline.py b/ema/views/deadline.py index 76c2bde..d760bda 100644 --- a/ema/views/deadline.py +++ b/ema/views/deadline.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from ema.models import Ema -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.views.deadline import AbstractNewDeadlineView, AbstractRemoveDeadlineView, AbstractEditDeadlineView @@ -17,6 +17,7 @@ class NewEmaDeadlineView(AbstractNewDeadlineView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -28,6 +29,7 @@ class EditEmaDeadlineView(AbstractEditDeadlineView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -39,6 +41,7 @@ class RemoveEmaDeadlineView(AbstractRemoveDeadlineView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/ema/views/document.py b/ema/views/document.py index d394c0f..45c5814 100644 --- a/ema/views/document.py +++ b/ema/views/document.py @@ -10,7 +10,7 @@ from django.utils.decorators import method_decorator from ema.forms import NewEmaDocumentModalForm from ema.models import Ema, EmaDocument -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.forms.modals import EditDocumentModalForm from konova.views.document import AbstractEditDocumentView, AbstractRemoveDocumentView, AbstractGetDocumentView, \ AbstractNewDocumentView @@ -21,6 +21,7 @@ class NewEmaDocumentView(AbstractNewDocumentView): form = NewEmaDocumentModalForm redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -43,6 +44,7 @@ class RemoveEmaDocumentView(AbstractRemoveDocumentView): model = Ema document_model = EmaDocument + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -56,6 +58,7 @@ class EditEmaDocumentView(AbstractEditDocumentView): form = EditDocumentModalForm redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/ema/views/ema.py b/ema/views/ema.py index f2b4d3b..b298959 100644 --- a/ema/views/ema.py +++ b/ema/views/ema.py @@ -17,7 +17,7 @@ from ema.forms import NewEmaForm, EditEmaForm from ema.models import Ema from ema.tables import EmaTable from konova.contexts import BaseContext -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.forms import SimpleGeomForm from konova.forms.modals import RemoveModalForm from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP @@ -214,6 +214,7 @@ def edit_view(request: HttpRequest, id: str): return render(request, template, context) +@login_required_modal @login_required @conservation_office_group_required @shared_access_required(Ema, "id") diff --git a/ema/views/log.py b/ema/views/log.py index 80b4a9f..82162ba 100644 --- a/ema/views/log.py +++ b/ema/views/log.py @@ -9,13 +9,14 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from ema.models import Ema -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.views.log import AbstractLogView class EmaLogView(AbstractLogView): model = Ema + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/ema/views/record.py b/ema/views/record.py index 7dfc946..8356099 100644 --- a/ema/views/record.py +++ b/ema/views/record.py @@ -9,13 +9,14 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from ema.models import Ema -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.views.record import AbstractRecordView class EmaRecordView(AbstractRecordView): model = Ema + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/ema/views/resubmission.py b/ema/views/resubmission.py index 384c3cd..c07c79e 100644 --- a/ema/views/resubmission.py +++ b/ema/views/resubmission.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from ema.models import Ema -from konova.decorators import shared_access_required, conservation_office_group_required +from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.views.resubmission import AbstractResubmissionView @@ -18,6 +18,7 @@ class EmaResubmissionView(AbstractResubmissionView): redirect_url_base = "ema:detail" form_action_url_base = "ema:resubmission-create" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/ema/views/share.py b/ema/views/share.py index 536fe31..00b75e7 100644 --- a/ema/views/share.py +++ b/ema/views/share.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from ema.models import Ema -from konova.decorators import conservation_office_group_required, shared_access_required +from konova.decorators import conservation_office_group_required, shared_access_required, login_required_modal from konova.views.share import AbstractShareByTokenView, AbstractShareFormView @@ -25,6 +25,7 @@ class EmaShareByTokenView(AbstractShareByTokenView): class EmaShareFormView(AbstractShareFormView): model = Ema + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/ema/views/state.py b/ema/views/state.py index 717ae7f..e8e489d 100644 --- a/ema/views/state.py +++ b/ema/views/state.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from ema.models import Ema -from konova.decorators import conservation_office_group_required, shared_access_required +from konova.decorators import conservation_office_group_required, shared_access_required, login_required_modal from konova.views.state import AbstractNewCompensationStateView, AbstractEditCompensationStateView, \ AbstractRemoveCompensationStateView @@ -18,6 +18,7 @@ class NewEmaStateView(AbstractNewCompensationStateView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -29,6 +30,7 @@ class EditEmaStateView(AbstractEditCompensationStateView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) @@ -40,6 +42,7 @@ class RemoveEmaStateView(AbstractRemoveCompensationStateView): model = Ema redirect_url = "ema:detail" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(conservation_office_group_required) @method_decorator(shared_access_required(Ema, "id")) diff --git a/intervention/views/compensation.py b/intervention/views/compensation.py index 94e8dfd..704a04e 100644 --- a/intervention/views/compensation.py +++ b/intervention/views/compensation.py @@ -12,11 +12,12 @@ from django.shortcuts import get_object_or_404 from django.urls import reverse from intervention.models import Intervention -from konova.decorators import shared_access_required +from konova.decorators import shared_access_required, login_required_modal from konova.forms.modals import RemoveModalForm from konova.utils.message_templates import COMPENSATION_REMOVED_TEMPLATE +@login_required_modal @login_required @shared_access_required(Intervention, "id") def remove_compensation_view(request: HttpRequest, id: str, comp_id: str): diff --git a/intervention/views/intervention.py b/intervention/views/intervention.py index bf33bfb..524c2c7 100644 --- a/intervention/views/intervention.py +++ b/intervention/views/intervention.py @@ -16,7 +16,7 @@ from intervention.forms.intervention import EditInterventionForm, NewInterventio from intervention.models import Intervention from intervention.tables import InterventionTable from konova.contexts import BaseContext -from konova.decorators import default_group_required, shared_access_required, any_group_check +from konova.decorators import default_group_required, shared_access_required, any_group_check, login_required_modal from konova.forms import SimpleGeomForm from konova.forms.modals import RemoveModalForm from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP @@ -228,6 +228,7 @@ def edit_view(request: HttpRequest, id: str): return render(request, template, context) +@login_required_modal @login_required @default_group_required @shared_access_required(Intervention, "id") diff --git a/intervention/views/resubmission.py b/intervention/views/resubmission.py index 452a3e3..37fbd63 100644 --- a/intervention/views/resubmission.py +++ b/intervention/views/resubmission.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from intervention.models import Intervention -from konova.decorators import default_group_required, shared_access_required +from konova.decorators import default_group_required, shared_access_required, login_required_modal from konova.views.resubmission import AbstractResubmissionView @@ -18,6 +18,7 @@ class InterventionResubmissionView(AbstractResubmissionView): redirect_url_base = "intervention:detail" form_action_url_base = "intervention:resubmission-create" + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Intervention, "id")) diff --git a/intervention/views/revocation.py b/intervention/views/revocation.py index 6c6c70b..db1dd1d 100644 --- a/intervention/views/revocation.py +++ b/intervention/views/revocation.py @@ -14,7 +14,7 @@ from django.urls import reverse from intervention.forms.modals.revocation import NewRevocationModalForm, EditRevocationModalForm, \ RemoveRevocationModalForm from intervention.models import Intervention, RevocationDocument, Revocation -from konova.decorators import default_group_required, shared_access_required +from konova.decorators import default_group_required, shared_access_required, login_required_modal from konova.utils.documents import get_document from konova.utils.message_templates import REVOCATION_ADDED, DATA_UNSHARED, REVOCATION_EDITED, REVOCATION_REMOVED @@ -91,6 +91,7 @@ def edit_revocation_view(request: HttpRequest, id: str, revocation_id: str): ) +@login_required_modal @login_required @default_group_required @shared_access_required(Intervention, "id") diff --git a/intervention/views/share.py b/intervention/views/share.py index f78d65b..c72e218 100644 --- a/intervention/views/share.py +++ b/intervention/views/share.py @@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from intervention.models import Intervention -from konova.decorators import default_group_required, shared_access_required +from konova.decorators import default_group_required, shared_access_required, login_required_modal from konova.views.share import AbstractShareByTokenView, AbstractShareFormView @@ -25,6 +25,7 @@ class InterventionShareByTokenView(AbstractShareByTokenView): class InterventionShareFormView(AbstractShareFormView): model = Intervention + @method_decorator(login_required_modal) @method_decorator(login_required) @method_decorator(default_group_required) @method_decorator(shared_access_required(Intervention, "id")) diff --git a/konova/decorators.py b/konova/decorators.py index 583afbe..cbf45dc 100644 --- a/konova/decorators.py +++ b/konova/decorators.py @@ -8,12 +8,12 @@ Created on: 16.11.20 from functools import wraps +from bootstrap_modal_forms.utils import is_ajax from django.contrib import messages -from django.shortcuts import redirect, get_object_or_404 +from django.shortcuts import redirect, get_object_or_404, render from django.urls import reverse from django.utils.translation import gettext_lazy as _ -from konova.settings import DEFAULT_GROUP, ETS_GROUP, ZB_GROUP from konova.utils.message_templates import MISSING_GROUP_PERMISSION, DATA_UNSHARED @@ -146,4 +146,28 @@ def shared_access_required(obj_class, id_key): return redirect("home") return function(request, *args, **kwargs) return wrap - return decorator \ No newline at end of file + return decorator + + +def login_required_modal(function): + """ Checks on modal requests whether the user is authenticated or not + + If not, the user will not be redirected but informed about the need to relogin. + + """ + @wraps(function) + def wrap(request, *args, **kwargs): + is_modal_request = is_ajax(request.META) + is_user_not_logged_in = not request.user.is_authenticated + + if is_modal_request and is_user_not_logged_in: + template = "modal/modal_generic.html" + body_template = "modal/modal_session_timed_out.html" + + context = { + "modal_body_template": body_template, + "modal_title": _("Session timed out"), + } + return render(request, template, context) + return function(request, *args, **kwargs) + return wrap diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 03853f485e18ce219bb50fbd9b452d147282bbb3..fadbaa83a217916800a369beee95f18180e62dba 100644 GIT binary patch delta 12535 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 delta 12218 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 c2885, YEAR. # -#: compensation/filters.py:123 compensation/forms/modalForms.py:37 -#: compensation/forms/modalForms.py:48 compensation/forms/modalForms.py:64 -#: compensation/forms/modalForms.py:362 compensation/forms/modalForms.py:470 -#: intervention/forms/forms.py:54 intervention/forms/forms.py:174 -#: intervention/forms/forms.py:186 intervention/forms/modalForms.py:150 -#: intervention/forms/modalForms.py:163 intervention/forms/modalForms.py:176 -#: 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 -#: konova/filters/mixins.py:107 konova/filters/mixins.py:108 -#: konova/filters/mixins.py:120 konova/filters/mixins.py:121 -#: konova/filters/mixins.py:134 konova/filters/mixins.py:135 -#: konova/filters/mixins.py:277 konova/filters/mixins.py:323 -#: konova/filters/mixins.py:361 konova/filters/mixins.py:362 -#: konova/filters/mixins.py:393 konova/filters/mixins.py:394 -#: konova/forms.py:183 konova/forms.py:285 konova/forms.py:399 -#: konova/forms.py:443 konova/forms.py:453 konova/forms.py:466 -#: konova/forms.py:478 konova/forms.py:496 konova/forms.py:696 -#: konova/forms.py:711 user/forms.py:42 +#: compensation/filters/eco_account.py:21 +#: compensation/forms/modals/compensation_action.py:82 +#: compensation/forms/modals/deadline.py:50 +#: compensation/forms/modals/payment.py:23 +#: compensation/forms/modals/payment.py:34 +#: compensation/forms/modals/payment.py:50 +#: intervention/forms/intervention.py:55 intervention/forms/intervention.py:175 +#: intervention/forms/intervention.py:187 +#: intervention/forms/modals/revocation.py:20 +#: intervention/forms/modals/revocation.py:33 +#: intervention/forms/modals/revocation.py:46 +#: konova/filters/mixins/file_number.py:17 +#: konova/filters/mixins/file_number.py:18 +#: konova/filters/mixins/geo_reference.py:25 +#: konova/filters/mixins/geo_reference.py:26 +#: konova/filters/mixins/geo_reference.py:38 +#: konova/filters/mixins/geo_reference.py:39 +#: konova/filters/mixins/geo_reference.py:51 +#: konova/filters/mixins/geo_reference.py:52 +#: konova/filters/mixins/geo_reference.py:64 +#: konova/filters/mixins/geo_reference.py:65 +#: konova/filters/mixins/geo_reference.py:78 +#: konova/filters/mixins/geo_reference.py:79 konova/filters/mixins/office.py:24 +#: konova/filters/mixins/office.py:25 konova/filters/mixins/office.py:56 +#: konova/filters/mixins/office.py:57 konova/filters/mixins/record.py:23 +#: konova/filters/mixins/share.py:23 konova/forms/geometry_form.py:30 +#: konova/forms/modals/document_form.py:25 +#: konova/forms/modals/document_form.py:35 +#: konova/forms/modals/document_form.py:48 +#: konova/forms/modals/document_form.py:60 +#: konova/forms/modals/document_form.py:78 +#: konova/forms/modals/remove_form.py:23 +#: konova/forms/modals/resubmission_form.py:21 +#: konova/forms/modals/resubmission_form.py:36 konova/forms/remove_form.py:19 +#: user/forms/user.py:39 #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-08-15 09:39+0200\n" +"POT-Creation-Date: 2022-08-25 10:57+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -53,28 +69,29 @@ msgstr "Bis" msgid "Entries created until..." msgstr "Einträge erstellt bis..." -#: analysis/forms.py:49 compensation/forms/forms.py:77 +#: analysis/forms.py:49 compensation/forms/mixins.py:21 #: compensation/templates/compensation/detail/eco_account/view.html:59 #: compensation/templates/compensation/report/eco_account/report.html:16 #: compensation/utils/quality.py:111 ema/templates/ema/detail/view.html:49 #: ema/templates/ema/report/report.html:16 ema/utils/quality.py:26 -#: intervention/forms/forms.py:102 +#: intervention/forms/intervention.py:103 #: intervention/templates/intervention/detail/view.html:56 #: intervention/templates/intervention/report/report.html:37 -#: intervention/utils/quality.py:49 konova/filters/mixins.py:403 +#: intervention/utils/quality.py:49 konova/filters/mixins/office.py:34 msgid "Conservation office" msgstr "Eintragungsstelle" -#: analysis/forms.py:51 compensation/forms/forms.py:79 +#: analysis/forms.py:51 compensation/forms/mixins.py:23 msgid "Select the responsible office" msgstr "Verantwortliche Stelle" -#: analysis/forms.py:60 compensation/forms/forms.py:88 -#: compensation/forms/forms.py:118 compensation/forms/forms.py:199 -#: intervention/forms/forms.py:64 intervention/forms/forms.py:81 -#: intervention/forms/forms.py:97 intervention/forms/forms.py:113 -#: intervention/forms/forms.py:154 intervention/forms/modalForms.py:49 -#: intervention/forms/modalForms.py:63 user/forms.py:196 user/forms.py:260 +#: analysis/forms.py:60 compensation/forms/compensation.py:93 +#: compensation/forms/mixins.py:32 compensation/forms/mixins.py:62 +#: intervention/forms/intervention.py:65 intervention/forms/intervention.py:82 +#: intervention/forms/intervention.py:98 intervention/forms/intervention.py:114 +#: intervention/forms/intervention.py:155 intervention/forms/modals/share.py:41 +#: intervention/forms/modals/share.py:55 user/forms/modals/team.py:48 +#: user/forms/modals/team.py:112 msgid "Click for selection" msgstr "Auswählen..." @@ -86,7 +103,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:71 konova/forms.py:231 +#: analysis/forms.py:71 konova/forms/modals/base_form.py:30 msgid "Continue" msgstr "Weiter" @@ -106,7 +123,7 @@ msgstr "" #: analysis/templates/analysis/reports/includes/eco_account/amount.html:3 #: analysis/templates/analysis/reports/includes/intervention/amount.html:3 #: analysis/templates/analysis/reports/includes/old_data/amount.html:3 -#: compensation/forms/modalForms.py:454 +#: compensation/forms/modals/compensation_action.py:66 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:34 #: intervention/templates/intervention/detail/includes/deductions.html:31 msgid "Amount" @@ -167,7 +184,7 @@ msgstr "Einzelflächen" #: analysis/templates/analysis/reports/includes/intervention/amount.html:18 #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:9 #: analysis/templates/analysis/reports/includes/intervention/laws.html:20 -#: compensation/tables.py:38 +#: compensation/tables/compensation.py:38 #: compensation/templates/compensation/detail/compensation/view.html:74 #: intervention/tables.py:38 #: intervention/templates/intervention/detail/view.html:68 @@ -183,7 +200,7 @@ msgstr "Geprüft" #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:10 #: analysis/templates/analysis/reports/includes/intervention/laws.html:23 #: analysis/templates/analysis/reports/includes/old_data/amount.html:19 -#: compensation/tables.py:44 compensation/tables.py:219 +#: compensation/tables/compensation.py:44 compensation/tables/eco_account.py:48 #: compensation/templates/compensation/detail/compensation/view.html:93 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:31 #: compensation/templates/compensation/detail/eco_account/view.html:45 @@ -207,7 +224,7 @@ msgid "Other registration office" msgstr "Andere Zulassungsbehörden" #: analysis/templates/analysis/reports/includes/compensation/card_compensation.html:11 -#: compensation/tables.py:65 +#: compensation/tables/compensation.py:65 #: intervention/templates/intervention/detail/includes/compensations.html:8 #: intervention/templates/intervention/report/report.html:45 msgid "Compensations" @@ -234,14 +251,14 @@ msgstr "" #: analysis/templates/analysis/reports/includes/eco_account/deductions.html:14 #: analysis/templates/analysis/reports/includes/eco_account/deductions.html:16 -#: compensation/forms/modalForms.py:187 +#: compensation/forms/modals/state.py:58 #: 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/modalForms.py:364 +#: intervention/forms/modals/deduction.py:47 #: templates/email/other/deduction_changed.html:31 #: templates/email/other/deduction_changed_team.html:31 msgid "Surface" @@ -269,7 +286,7 @@ msgid "Compensation" msgstr "Kompensation" #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:21 -#: compensation/forms/modalForms.py:77 +#: compensation/forms/modals/payment.py:63 msgid "Payment" msgstr "Zahlung" @@ -292,7 +309,7 @@ msgstr "" " " #: analysis/templates/analysis/reports/includes/intervention/laws.html:14 -#: intervention/forms/forms.py:69 +#: intervention/forms/intervention.py:70 #: intervention/templates/intervention/detail/view.html:39 #: intervention/templates/intervention/report/report.html:20 msgid "Law" @@ -306,8 +323,9 @@ msgid "Type" msgstr "Typ" #: analysis/templates/analysis/reports/includes/old_data/amount.html:24 -#: compensation/tables.py:87 intervention/forms/modalForms.py:375 -#: intervention/forms/modalForms.py:382 intervention/tables.py:87 +#: compensation/tables/compensation.py:87 +#: intervention/forms/modals/deduction.py:58 +#: intervention/forms/modals/deduction.py:65 intervention/tables.py:87 #: intervention/templates/intervention/detail/view.html:19 #: konova/templates/konova/includes/quickstart/interventions.html:4 #: templates/email/other/deduction_changed.html:26 @@ -317,9 +335,10 @@ msgid "Intervention" msgstr "Eingriff" #: analysis/templates/analysis/reports/includes/old_data/amount.html:34 -#: compensation/tables.py:263 +#: compensation/tables/eco_account.py:92 #: compensation/templates/compensation/detail/eco_account/view.html:20 -#: intervention/forms/modalForms.py:348 intervention/forms/modalForms.py:355 +#: intervention/forms/modals/deduction.py:31 +#: intervention/forms/modals/deduction.py:38 #: konova/templates/konova/includes/quickstart/ecoaccounts.html:4 #: templates/navbars/navbar.html:34 msgid "Eco-account" @@ -333,24 +352,24 @@ msgstr "Altfälle" msgid "Binding date before" msgstr "Bestandskraft- bzw. Rechtskraftdatum vor" -#: compensation/filters.py:122 +#: compensation/filters/eco_account.py:20 msgid "Show only unrecorded" msgstr "Nur unverzeichnete anzeigen" -#: compensation/forms/forms.py:32 compensation/tables.py:23 -#: compensation/tables.py:194 ema/tables.py:29 intervention/forms/forms.py:28 -#: intervention/tables.py:23 +#: compensation/forms/compensation.py:30 compensation/tables/compensation.py:23 +#: compensation/tables/eco_account.py:23 ema/tables.py:29 +#: intervention/forms/intervention.py:29 intervention/tables.py:23 #: intervention/templates/intervention/detail/includes/compensations.html:30 msgid "Identifier" msgstr "Kennung" -#: compensation/forms/forms.py:35 intervention/forms/forms.py:31 -#: user/forms.py:126 +#: compensation/forms/compensation.py:33 intervention/forms/intervention.py:32 +#: user/forms/user.py:77 msgid "Generated automatically" msgstr "Automatisch generiert" -#: compensation/forms/forms.py:44 compensation/tables.py:28 -#: compensation/tables.py:199 +#: compensation/forms/compensation.py:42 compensation/tables/compensation.py:28 +#: compensation/tables/eco_account.py:28 #: compensation/templates/compensation/detail/compensation/includes/documents.html:28 #: compensation/templates/compensation/detail/compensation/view.html:32 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:28 @@ -359,26 +378,28 @@ msgstr "Automatisch generiert" #: compensation/templates/compensation/report/eco_account/report.html:12 #: ema/tables.py:34 ema/templates/ema/detail/includes/documents.html:28 #: ema/templates/ema/detail/view.html:31 -#: ema/templates/ema/report/report.html:12 intervention/forms/forms.py:40 -#: intervention/tables.py:28 +#: ema/templates/ema/report/report.html:12 +#: intervention/forms/intervention.py:41 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 #: intervention/templates/intervention/report/report.html:12 -#: konova/forms.py:442 +#: konova/forms/modals/document_form.py:24 msgid "Title" msgstr "Bezeichnung" -#: compensation/forms/forms.py:46 intervention/forms/forms.py:42 +#: compensation/forms/compensation.py:44 intervention/forms/intervention.py:43 msgid "An explanatory name" msgstr "Aussagekräftiger Titel" -#: compensation/forms/forms.py:50 ema/forms.py:52 ema/forms.py:112 +#: compensation/forms/compensation.py:48 ema/forms.py:51 ema/forms.py:111 msgid "Compensation XY; Location ABC" msgstr "Kompensation XY; Flur ABC" -#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:63 -#: compensation/forms/modalForms.py:361 compensation/forms/modalForms.py:469 +#: compensation/forms/compensation.py:55 +#: compensation/forms/modals/compensation_action.py:81 +#: compensation/forms/modals/deadline.py:49 +#: compensation/forms/modals/payment.py:49 #: compensation/templates/compensation/detail/compensation/includes/actions.html:35 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:39 #: compensation/templates/compensation/detail/compensation/includes/documents.html:34 @@ -388,76 +409,130 @@ msgstr "Kompensation XY; Flur ABC" #: ema/templates/ema/detail/includes/actions.html:34 #: ema/templates/ema/detail/includes/deadlines.html:39 #: ema/templates/ema/detail/includes/documents.html:34 -#: intervention/forms/forms.py:198 intervention/forms/modalForms.py:175 +#: intervention/forms/intervention.py:199 +#: intervention/forms/modals/revocation.py:45 #: 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:477 konova/forms.py:710 +#: konova/forms/modals/document_form.py:59 +#: konova/forms/modals/resubmission_form.py:35 #: konova/templates/konova/includes/comment_card.html:16 msgid "Comment" msgstr "Kommentar" -#: compensation/forms/forms.py:59 compensation/forms/modalForms.py:471 -#: intervention/forms/forms.py:200 konova/forms.py:712 +#: compensation/forms/compensation.py:57 +#: compensation/forms/modals/compensation_action.py:83 +#: intervention/forms/intervention.py:201 +#: konova/forms/modals/resubmission_form.py:37 msgid "Additional comment" msgstr "Zusätzlicher Kommentar" -#: compensation/forms/forms.py:93 +#: compensation/forms/compensation.py:84 +#: compensation/templates/compensation/detail/compensation/view.html:36 +#: compensation/templates/compensation/report/compensation/report.html:16 +msgid "compensates intervention" +msgstr "kompensiert Eingriff" + +#: compensation/forms/compensation.py:86 +msgid "Select the intervention for which this compensation compensates" +msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist" + +#: compensation/forms/compensation.py:113 +#: compensation/views/compensation/compensation.py:113 +msgid "New compensation" +msgstr "Neue Kompensation" + +#: compensation/forms/compensation.py:186 +msgid "Edit compensation" +msgstr "Bearbeite Kompensation" + +#: compensation/forms/eco_account.py:29 compensation/utils/quality.py:95 +msgid "Available Surface" +msgstr "Verfügbare Fläche" + +#: compensation/forms/eco_account.py:32 +msgid "The amount that can be used for deductions" +msgstr "Die für Abbuchungen zur Verfügung stehende Menge" + +#: compensation/forms/eco_account.py:41 +#: compensation/templates/compensation/detail/eco_account/view.html:67 +#: compensation/utils/quality.py:83 +msgid "Agreement date" +msgstr "Vereinbarungsdatum" + +#: compensation/forms/eco_account.py:43 +msgid "When did the parties agree on this?" +msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?" + +#: compensation/forms/eco_account.py:69 +#: compensation/views/eco_account/eco_account.py:94 +msgid "New Eco-Account" +msgstr "Neues Ökokonto" + +#: compensation/forms/eco_account.py:78 +msgid "Eco-Account XY; Location ABC" +msgstr "Ökokonto XY; Flur ABC" + +#: compensation/forms/eco_account.py:140 +msgid "Edit Eco-Account" +msgstr "Ökokonto bearbeiten" + +#: compensation/forms/mixins.py:37 #: compensation/templates/compensation/detail/eco_account/view.html:63 #: compensation/templates/compensation/report/eco_account/report.html:20 #: compensation/utils/quality.py:113 ema/templates/ema/detail/view.html:53 #: ema/templates/ema/report/report.html:20 ema/utils/quality.py:28 -#: intervention/forms/forms.py:130 +#: intervention/forms/intervention.py:131 #: intervention/templates/intervention/detail/view.html:60 #: intervention/templates/intervention/report/report.html:41 #: intervention/utils/quality.py:42 msgid "Conservation office file number" msgstr "Aktenzeichen Eintragungsstelle" -#: compensation/forms/forms.py:99 intervention/forms/forms.py:136 +#: compensation/forms/mixins.py:43 intervention/forms/intervention.py:137 msgid "ETS-123/ABC.456" msgstr "" -#: compensation/forms/forms.py:106 +#: compensation/forms/mixins.py:50 msgid "Eco-Account handler type" msgstr "Art des Maßnahmenträgers" -#: compensation/forms/forms.py:108 +#: compensation/forms/mixins.py:52 msgid "What type of handler is responsible for the ecoaccount?" msgstr "Zu welcher Kategorie dieser Maßnahmenträger gehört" -#: compensation/forms/forms.py:123 +#: compensation/forms/mixins.py:67 msgid "Eco-Account handler detail" msgstr "Detailangabe zum Maßnahmenträger" -#: compensation/forms/forms.py:127 intervention/forms/forms.py:163 +#: compensation/forms/mixins.py:71 intervention/forms/intervention.py:164 msgid "Detail input on the handler" msgstr "Name der Behörde, Stadt, Firma, ..." -#: compensation/forms/forms.py:130 intervention/forms/forms.py:166 +#: compensation/forms/mixins.py:74 intervention/forms/intervention.py:167 msgid "Company Mustermann" msgstr "Firma Mustermann" -#: compensation/forms/forms.py:143 +#: compensation/forms/mixins.py:87 #: compensation/templates/compensation/report/compensation/report.html:34 msgid "Is CEF" msgstr "Ist CEF-Maßnahme" -#: compensation/forms/forms.py:144 +#: compensation/forms/mixins.py:88 msgid "Optionally: Whether this compensation is a CEF compensation?" msgstr "Optional: Handelt es sich um eine CEF-Maßnahme?" -#: compensation/forms/forms.py:156 +#: compensation/forms/mixins.py:100 #: compensation/templates/compensation/report/compensation/report.html:44 msgid "Is coherence keeping" msgstr "Ist Kohärenzsicherungsmaßnahme" -#: compensation/forms/forms.py:157 +#: compensation/forms/mixins.py:101 msgid "" "Optionally: Whether this compensation is a coherence keeping compensation?" msgstr "Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?" -#: compensation/forms/forms.py:169 +#: compensation/forms/mixins.py:113 #: compensation/templates/compensation/detail/compensation/view.html:44 #: compensation/templates/compensation/detail/eco_account/view.html:75 #: compensation/templates/compensation/report/compensation/report.html:24 @@ -467,124 +542,165 @@ msgstr "Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?" msgid "Is PIK" msgstr "Ist PIK Maßnahme" -#: compensation/forms/forms.py:170 +#: compensation/forms/mixins.py:114 msgid "" "Optionally: Whether this compensation is a compensation integrated in " "production?" msgstr "Optional: Handelt es sich um eine produktionsintegrierte Kompensation?" -#: compensation/forms/forms.py:190 -#: compensation/templates/compensation/detail/compensation/view.html:36 -#: compensation/templates/compensation/report/compensation/report.html:16 -msgid "compensates intervention" -msgstr "kompensiert Eingriff" +#: compensation/forms/modals/compensation_action.py:29 +msgid "Action Type" +msgstr "Maßnahmentyp" -#: compensation/forms/forms.py:192 -msgid "Select the intervention for which this compensation compensates" -msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist" +#: compensation/forms/modals/compensation_action.py:32 +msgid "" +"An action can consist of multiple different action types. All the selected " +"action types are expected to be performed according to the amount and unit " +"below on this form." +msgstr "" +"Eine Maßnahme kann aus mehreren verschiedenen Maßnahmentypen bestehen. Alle " +"hier gewählten Einträge sollen mit der weiter unten angegebenen Einheit und " +"Menge umgesetzt werden. " -#: compensation/forms/forms.py:219 compensation/views/compensation.py:111 -msgid "New compensation" -msgstr "Neue Kompensation" +#: compensation/forms/modals/compensation_action.py:37 +#: compensation/forms/modals/compensation_action.py:49 +msgid "Action Type detail" +msgstr "Zusatzmerkmal" -#: compensation/forms/forms.py:292 -msgid "Edit compensation" -msgstr "Bearbeite Kompensation" +#: compensation/forms/modals/compensation_action.py:40 +msgid "Select the action type detail" +msgstr "Zusatzmerkmal wählen" -#: compensation/forms/forms.py:356 compensation/utils/quality.py:95 -msgid "Available Surface" -msgstr "Verfügbare Fläche" +#: compensation/forms/modals/compensation_action.py:54 +msgid "Unit" +msgstr "Einheit" -#: compensation/forms/forms.py:359 -msgid "The amount that can be used for deductions" -msgstr "Die für Abbuchungen zur Verfügung stehende Menge" +#: compensation/forms/modals/compensation_action.py:57 +msgid "Select the unit" +msgstr "Einheit wählen" -#: compensation/forms/forms.py:368 -#: compensation/templates/compensation/detail/eco_account/view.html:67 -#: compensation/utils/quality.py:83 -msgid "Agreement date" -msgstr "Vereinbarungsdatum" +#: compensation/forms/modals/compensation_action.py:69 +msgid "Insert the amount" +msgstr "Menge eingeben" -#: compensation/forms/forms.py:370 -msgid "When did the parties agree on this?" -msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?" +#: compensation/forms/modals/compensation_action.py:94 +msgid "New action" +msgstr "Neue Maßnahme" -#: compensation/forms/forms.py:396 compensation/views/eco_account.py:108 -msgid "New Eco-Account" -msgstr "Neues Ökokonto" +#: compensation/forms/modals/compensation_action.py:95 +msgid "Insert data for the new action" +msgstr "Geben Sie die Daten der neuen Maßnahme ein" -#: compensation/forms/forms.py:405 -msgid "Eco-Account XY; Location ABC" -msgstr "Ökokonto XY; Flur ABC" +#: compensation/forms/modals/compensation_action.py:119 +#: compensation/templates/compensation/detail/compensation/includes/actions.html:68 +#: compensation/templates/compensation/detail/eco_account/includes/actions.html:67 +#: ema/templates/ema/detail/includes/actions.html:65 +msgid "Edit action" +msgstr "Maßnahme bearbeiten" -#: compensation/forms/forms.py:467 -msgid "Edit Eco-Account" -msgstr "Ökokonto bearbeiten" +#: compensation/forms/modals/deadline.py:21 +msgid "Deadline Type" +msgstr "Fristart" -#: compensation/forms/modalForms.py:38 +#: compensation/forms/modals/deadline.py:24 +msgid "Select the deadline type" +msgstr "Fristart wählen" + +#: compensation/forms/modals/deadline.py:33 +#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:36 +#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:36 +#: ema/templates/ema/detail/includes/deadlines.html:36 +#: intervention/forms/modals/revocation.py:19 +#: konova/forms/modals/resubmission_form.py:22 +msgid "Date" +msgstr "Datum" + +#: compensation/forms/modals/deadline.py:36 +msgid "Select date" +msgstr "Datum wählen" + +#: compensation/forms/modals/deadline.py:51 +#: compensation/forms/modals/payment.py:51 +#: intervention/forms/modals/revocation.py:47 +#: konova/forms/modals/document_form.py:61 +msgid "Additional comment, maximum {} letters" +msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" + +#: compensation/forms/modals/deadline.py:63 +msgid "New deadline" +msgstr "Neue Frist" + +#: compensation/forms/modals/deadline.py:64 +msgid "Insert data for the new deadline" +msgstr "Geben Sie die Daten der neuen Frist ein" + +#: compensation/forms/modals/deadline.py:77 +#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:64 +#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:62 +#: ema/templates/ema/detail/includes/deadlines.html:62 +msgid "Edit deadline" +msgstr "Frist/Termin bearbeiten" + +#: compensation/forms/modals/payment.py:24 msgid "in Euro" msgstr "in Euro" -#: compensation/forms/modalForms.py:47 +#: compensation/forms/modals/payment.py:33 #: intervention/templates/intervention/detail/includes/payments.html:31 msgid "Due on" msgstr "Fällig am" -#: compensation/forms/modalForms.py:50 +#: compensation/forms/modals/payment.py:36 msgid "Due on which date" msgstr "Zahlung wird an diesem Datum erwartet" -#: compensation/forms/modalForms.py:65 compensation/forms/modalForms.py:363 -#: intervention/forms/modalForms.py:177 konova/forms.py:479 -msgid "Additional comment, maximum {} letters" -msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" - -#: compensation/forms/modalForms.py:78 +#: compensation/forms/modals/payment.py:64 msgid "Add a payment for intervention '{}'" msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen" -#: compensation/forms/modalForms.py:98 +#: compensation/forms/modals/payment.py:84 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/modalForms.py:117 +#: compensation/forms/modals/payment.py:103 #: intervention/templates/intervention/detail/includes/payments.html:59 msgid "Edit payment" msgstr "Zahlung bearbeiten" -#: compensation/forms/modalForms.py:161 +#: compensation/forms/modals/state.py:32 msgid "Biotope Type" msgstr "Biotoptyp" -#: compensation/forms/modalForms.py:164 +#: compensation/forms/modals/state.py:35 msgid "Select the biotope type" msgstr "Biotoptyp wählen" -#: compensation/forms/modalForms.py:168 compensation/forms/modalForms.py:180 +#: compensation/forms/modals/state.py:39 compensation/forms/modals/state.py:51 msgid "Biotope additional type" msgstr "Zusatzbezeichnung" -#: compensation/forms/modalForms.py:171 +#: compensation/forms/modals/state.py:42 msgid "Select an additional biotope type" msgstr "Zusatzbezeichnung wählen" -#: compensation/forms/modalForms.py:190 intervention/forms/modalForms.py:366 +#: compensation/forms/modals/state.py:61 +#: intervention/forms/modals/deduction.py:49 msgid "in m²" msgstr "" -#: compensation/forms/modalForms.py:201 +#: compensation/forms/modals/state.py:72 msgid "New state" msgstr "Neuer Zustand" -#: compensation/forms/modalForms.py:202 +#: compensation/forms/modals/state.py:73 msgid "Insert data for the new state" msgstr "Geben Sie die Daten des neuen Zustandes ein" -#: compensation/forms/modalForms.py:219 konova/forms.py:233 +#: compensation/forms/modals/state.py:90 konova/forms/modals/base_form.py:32 msgid "Object removed" msgstr "Objekt entfernt" -#: compensation/forms/modalForms.py:274 +#: compensation/forms/modals/state.py:145 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:62 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:62 #: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62 @@ -594,90 +710,6 @@ msgstr "Objekt entfernt" msgid "Edit state" msgstr "Zustand bearbeiten" -#: compensation/forms/modalForms.py:333 -msgid "Deadline Type" -msgstr "Fristart" - -#: compensation/forms/modalForms.py:336 -msgid "Select the deadline type" -msgstr "Fristart wählen" - -#: compensation/forms/modalForms.py:345 -#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:36 -#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:36 -#: ema/templates/ema/detail/includes/deadlines.html:36 -#: intervention/forms/modalForms.py:149 konova/forms.py:697 -msgid "Date" -msgstr "Datum" - -#: compensation/forms/modalForms.py:348 -msgid "Select date" -msgstr "Datum wählen" - -#: compensation/forms/modalForms.py:375 -msgid "New deadline" -msgstr "Neue Frist" - -#: compensation/forms/modalForms.py:376 -msgid "Insert data for the new deadline" -msgstr "Geben Sie die Daten der neuen Frist ein" - -#: compensation/forms/modalForms.py:389 -#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:64 -#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:62 -#: ema/templates/ema/detail/includes/deadlines.html:62 -msgid "Edit deadline" -msgstr "Frist/Termin bearbeiten" - -#: compensation/forms/modalForms.py:417 -msgid "Action Type" -msgstr "Maßnahmentyp" - -#: compensation/forms/modalForms.py:420 -msgid "" -"An action can consist of multiple different action types. All the selected " -"action types are expected to be performed according to the amount and unit " -"below on this form." -msgstr "" -"Eine Maßnahme kann aus mehreren verschiedenen Maßnahmentypen bestehen. Alle " -"hier gewählten Einträge sollen mit der weiter unten angegebenen Einheit und " -"Menge umgesetzt werden. " - -#: compensation/forms/modalForms.py:425 compensation/forms/modalForms.py:437 -msgid "Action Type detail" -msgstr "Zusatzmerkmal" - -#: compensation/forms/modalForms.py:428 -msgid "Select the action type detail" -msgstr "Zusatzmerkmal wählen" - -#: compensation/forms/modalForms.py:442 -msgid "Unit" -msgstr "Einheit" - -#: compensation/forms/modalForms.py:445 -msgid "Select the unit" -msgstr "Einheit wählen" - -#: compensation/forms/modalForms.py:457 -msgid "Insert the amount" -msgstr "Menge eingeben" - -#: compensation/forms/modalForms.py:482 -msgid "New action" -msgstr "Neue Maßnahme" - -#: compensation/forms/modalForms.py:483 -msgid "Insert data for the new action" -msgstr "Geben Sie die Daten der neuen Maßnahme ein" - -#: compensation/forms/modalForms.py:507 -#: compensation/templates/compensation/detail/compensation/includes/actions.html:68 -#: compensation/templates/compensation/detail/eco_account/includes/actions.html:67 -#: ema/templates/ema/detail/includes/actions.html:65 -msgid "Edit action" -msgstr "Maßnahme bearbeiten" - #: compensation/models/action.py:20 msgid "cm" msgstr "" @@ -717,27 +749,28 @@ 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:33 compensation/tables.py:204 ema/tables.py:39 -#: intervention/tables.py:33 konova/filters/mixins.py:98 +#: compensation/tables/compensation.py:33 compensation/tables/eco_account.py:33 +#: ema/tables.py:39 intervention/tables.py:33 +#: konova/filters/mixins/geo_reference.py:42 msgid "Parcel gmrkng" msgstr "Gemarkung" -#: compensation/tables.py:50 compensation/tables.py:225 ema/tables.py:50 -#: intervention/tables.py:50 +#: compensation/tables/compensation.py:50 compensation/tables/eco_account.py:54 +#: ema/tables.py:50 intervention/tables.py:50 msgid "Editable" msgstr "Freigegeben" -#: compensation/tables.py:56 compensation/tables.py:231 ema/tables.py:56 -#: intervention/tables.py:56 +#: compensation/tables/compensation.py:56 compensation/tables/eco_account.py:60 +#: ema/tables.py:56 intervention/tables.py:56 msgid "Last edit" msgstr "Zuletzt bearbeitet" -#: compensation/tables.py:87 compensation/tables.py:263 ema/tables.py:89 -#: intervention/tables.py:87 +#: compensation/tables/compensation.py:87 compensation/tables/eco_account.py:92 +#: ema/tables.py:89 intervention/tables.py:87 msgid "Open {}" msgstr "Öffne {}" -#: compensation/tables.py:163 +#: compensation/tables/compensation.py:163 #: compensation/templates/compensation/detail/compensation/view.html:96 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:58 #: compensation/templates/compensation/detail/eco_account/view.html:48 @@ -747,32 +780,35 @@ msgstr "Öffne {}" msgid "Not recorded yet" msgstr "Noch nicht verzeichnet" -#: compensation/tables.py:166 compensation/tables.py:321 ema/tables.py:133 +#: compensation/tables/compensation.py:166 +#: compensation/tables/eco_account.py:150 ema/tables.py:133 #: intervention/tables.py:164 msgid "Recorded on {} by {}" msgstr "Am {} von {} verzeichnet worden" -#: compensation/tables.py:186 compensation/tables.py:343 ema/tables.py:154 +#: compensation/tables/compensation.py:186 +#: compensation/tables/eco_account.py:172 ema/tables.py:154 #: intervention/tables.py:185 msgid "Full access granted" msgstr "Für Sie freigegeben - Datensatz kann bearbeitet werden" -#: compensation/tables.py:186 compensation/tables.py:343 ema/tables.py:154 +#: compensation/tables/compensation.py:186 +#: compensation/tables/eco_account.py:172 ema/tables.py:154 #: intervention/tables.py:185 msgid "Access not granted" msgstr "Nicht freigegeben - Datensatz nur lesbar" -#: compensation/tables.py:209 +#: compensation/tables/eco_account.py:38 #: compensation/templates/compensation/detail/eco_account/view.html:36 #: konova/templates/konova/widgets/progressbar.html:3 msgid "Available" msgstr "Verfügbar" -#: compensation/tables.py:240 +#: compensation/tables/eco_account.py:69 msgid "Eco Accounts" msgstr "Ökokonten" -#: compensation/tables.py:318 +#: compensation/tables/eco_account.py:147 msgid "Not recorded yet. Can not be used for deductions, yet." msgstr "" "Noch nicht verzeichnet. Kann noch nicht für Abbuchungen genutzt werden." @@ -858,7 +894,8 @@ msgstr "Öffentlicher Bericht" #: compensation/templates/compensation/detail/eco_account/includes/controls.html:15 #: ema/templates/ema/detail/includes/controls.html:15 #: intervention/templates/intervention/detail/includes/controls.html:15 -#: konova/forms.py:724 templates/email/resubmission/resubmission.html:4 +#: konova/forms/modals/resubmission_form.py:49 +#: templates/email/resubmission/resubmission.html:4 msgid "Resubmission" msgstr "Wiedervorlage" @@ -919,7 +956,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:495 +#: konova/forms/modals/document_form.py:77 msgid "Add new document" msgstr "Neues Dokument hinzufügen" @@ -927,7 +964,7 @@ msgstr "Neues Dokument hinzufügen" #: compensation/templates/compensation/detail/eco_account/includes/documents.html:31 #: ema/templates/ema/detail/includes/documents.html:31 #: intervention/templates/intervention/detail/includes/documents.html:31 -#: konova/forms.py:452 +#: konova/forms/modals/document_form.py:34 msgid "Created on" msgstr "Erstellt" @@ -935,7 +972,7 @@ msgstr "Erstellt" #: compensation/templates/compensation/detail/eco_account/includes/documents.html:61 #: ema/templates/ema/detail/includes/documents.html:61 #: intervention/templates/intervention/detail/includes/documents.html:65 -#: konova/forms.py:557 +#: konova/forms/modals/document_form.py:139 msgid "Edit document" msgstr "Dokument bearbeiten" @@ -1107,7 +1144,7 @@ msgstr "weitere Nutzer" #: compensation/templates/compensation/detail/eco_account/includes/controls.html:18 #: ema/templates/ema/detail/includes/controls.html:18 -#: intervention/forms/modalForms.py:71 +#: intervention/forms/modals/share.py:63 #: intervention/templates/intervention/detail/includes/controls.html:18 msgid "Share" msgstr "Freigabe" @@ -1149,7 +1186,7 @@ msgid "Recorded on" msgstr "Verzeichnet am" #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:65 -#: intervention/forms/modalForms.py:490 +#: intervention/forms/modals/deduction.py:173 #: intervention/templates/intervention/detail/includes/deductions.html:60 msgid "Edit Deduction" msgstr "Abbuchung bearbeiten" @@ -1227,85 +1264,48 @@ msgstr "" msgid "Responsible data" msgstr "Daten zu den verantwortlichen Stellen" -#: compensation/views/compensation.py:54 +#: compensation/views/compensation/compensation.py:56 msgid "Compensations - Overview" msgstr "Kompensationen - Übersicht" -#: compensation/views/compensation.py:173 konova/utils/message_templates.py:36 +#: compensation/views/compensation/compensation.py:175 +#: konova/utils/message_templates.py:37 msgid "Compensation {} edited" msgstr "Kompensation {} bearbeitet" -#: compensation/views/compensation.py:183 compensation/views/eco_account.py:173 -#: ema/views.py:241 intervention/views.py:338 +#: compensation/views/compensation/compensation.py:185 +#: compensation/views/eco_account/eco_account.py:159 ema/views/ema.py:211 +#: intervention/views/intervention.py:225 msgid "Edit {}" msgstr "Bearbeite {}" -#: compensation/views/compensation.py:270 compensation/views/eco_account.py:360 -#: ema/views.py:195 intervention/views.py:565 -msgid "Log" -msgstr "Log" - -#: compensation/views/compensation.py:614 compensation/views/eco_account.py:728 -#: ema/views.py:559 intervention/views.py:711 +#: compensation/views/compensation/report.py:34 +#: compensation/views/eco_account/report.py:34 ema/views/report.py:34 +#: intervention/views/report.py:33 msgid "Report {}" msgstr "Bericht {}" -#: compensation/views/compensation.py:680 compensation/views/eco_account.py:862 -#: ema/views.py:734 intervention/views.py:496 -msgid "Resubmission set" -msgstr "Wiedervorlage gesetzt" - -#: compensation/views/eco_account.py:65 +#: compensation/views/eco_account/eco_account.py:51 msgid "Eco-account - Overview" msgstr "Ökokonten - Übersicht" -#: compensation/views/eco_account.py:98 +#: compensation/views/eco_account/eco_account.py:84 msgid "Eco-Account {} added" msgstr "Ökokonto {} hinzugefügt" -#: compensation/views/eco_account.py:163 +#: compensation/views/eco_account/eco_account.py:149 msgid "Eco-Account {} edited" msgstr "Ökokonto {} bearbeitet" -#: compensation/views/eco_account.py:277 +#: compensation/views/eco_account/eco_account.py:263 msgid "Eco-account removed" msgstr "Ökokonto entfernt" -#: compensation/views/eco_account.py:381 ema/views.py:283 -#: intervention/views.py:664 -msgid "{} unrecorded" -msgstr "{} entzeichnet" - -#: compensation/views/eco_account.py:381 ema/views.py:283 -#: intervention/views.py:664 -msgid "{} recorded" -msgstr "{} verzeichnet" - -#: compensation/views/eco_account.py:805 ema/views.py:629 -#: intervention/views.py:439 -msgid "{} has already been shared with you" -msgstr "{} wurde bereits für Sie freigegeben" - -#: compensation/views/eco_account.py:810 ema/views.py:634 -#: intervention/views.py:444 -msgid "{} has been shared with you" -msgstr "{} ist nun für Sie freigegeben" - -#: compensation/views/eco_account.py:817 ema/views.py:641 -#: intervention/views.py:451 -msgid "Share link invalid" -msgstr "Freigabelink ungültig" - -#: compensation/views/eco_account.py:840 ema/views.py:664 -#: intervention/views.py:474 -msgid "Share settings updated" -msgstr "Freigabe Einstellungen aktualisiert" - -#: ema/forms.py:43 ema/views.py:98 +#: ema/forms.py:42 ema/views/ema.py:94 msgid "New EMA" msgstr "Neue EMA hinzufügen" -#: ema/forms.py:106 +#: ema/forms.py:105 msgid "Edit EMA" msgstr "Bearbeite EMA" @@ -1329,161 +1329,102 @@ msgstr "" msgid "Payment funded compensation" msgstr "Ersatzzahlungsmaßnahme" -#: ema/views.py:55 +#: ema/views/ema.py:51 msgid "EMAs - Overview" msgstr "EMAs - Übersicht" -#: ema/views.py:88 +#: ema/views/ema.py:84 msgid "EMA {} added" msgstr "EMA {} hinzugefügt" -#: ema/views.py:231 +#: ema/views/ema.py:201 msgid "EMA {} edited" msgstr "EMA {} bearbeitet" -#: ema/views.py:264 +#: ema/views/ema.py:234 msgid "EMA removed" msgstr "EMA entfernt" -#: intervention/forms/forms.py:46 +#: intervention/forms/intervention.py:47 msgid "Construction XY; Location ABC" msgstr "Bauvorhaben XY; Flur ABC" -#: intervention/forms/forms.py:52 +#: intervention/forms/intervention.py:53 #: intervention/templates/intervention/detail/view.html:35 #: intervention/templates/intervention/report/report.html:16 #: intervention/utils/quality.py:82 msgid "Process type" msgstr "Verfahrenstyp" -#: intervention/forms/forms.py:71 +#: intervention/forms/intervention.py:72 msgid "Multiple selection possible" msgstr "Mehrfachauswahl möglich" -#: intervention/forms/forms.py:86 +#: intervention/forms/intervention.py:87 #: intervention/templates/intervention/detail/view.html:48 #: intervention/templates/intervention/report/report.html:29 -#: intervention/utils/quality.py:46 konova/filters/mixins.py:371 +#: intervention/utils/quality.py:46 konova/filters/mixins/office.py:66 msgid "Registration office" msgstr "Zulassungsbehörde" -#: intervention/forms/forms.py:118 +#: intervention/forms/intervention.py:119 #: intervention/templates/intervention/detail/view.html:52 #: intervention/templates/intervention/report/report.html:33 #: intervention/utils/quality.py:39 msgid "Registration office file number" msgstr "Aktenzeichen Zulassungsbehörde" -#: intervention/forms/forms.py:124 +#: intervention/forms/intervention.py:125 msgid "ZB-123/ABC.456" msgstr "" -#: intervention/forms/forms.py:142 +#: intervention/forms/intervention.py:143 msgid "Intervention handler type" msgstr "Art des Eingriffsverursachers" -#: intervention/forms/forms.py:144 +#: intervention/forms/intervention.py:145 msgid "What type of handler is responsible for the intervention?" msgstr "Zu welcher Kategorie dieser Eingriffsverursacher gehört" -#: intervention/forms/forms.py:159 +#: intervention/forms/intervention.py:160 msgid "Intervention handler detail" msgstr "Detailangabe zum Eingriffsverursacher" -#: intervention/forms/forms.py:173 +#: intervention/forms/intervention.py:174 #: intervention/templates/intervention/detail/view.html:101 #: intervention/templates/intervention/report/report.html:79 #: intervention/utils/quality.py:73 msgid "Registration date" msgstr "Datum Zulassung bzw. Satzungsbeschluss" -#: intervention/forms/forms.py:185 +#: intervention/forms/intervention.py:186 #: intervention/templates/intervention/detail/view.html:105 #: intervention/templates/intervention/report/report.html:83 msgid "Binding on" msgstr "Datum Bestandskraft bzw. Rechtskraft" -#: intervention/forms/forms.py:211 intervention/views.py:95 +#: intervention/forms/intervention.py:212 intervention/views/intervention.py:98 msgid "New intervention" msgstr "Neuer Eingriff" -#: intervention/forms/forms.py:298 +#: intervention/forms/intervention.py:299 msgid "Edit intervention" msgstr "Eingriff bearbeiten" -#: intervention/forms/modalForms.py:29 -msgid "Share link" -msgstr "Freigabelink" - -#: intervention/forms/modalForms.py:31 -msgid "Send this link to users who you want to have writing access on the data" -msgstr "Einzelne Nutzer erhalten über diesen Link Zugriff auf die Daten" - -#: intervention/forms/modalForms.py:41 -msgid "Add team to share with" -msgstr "Team hinzufügen" - -#: intervention/forms/modalForms.py:43 -msgid "" -"Multiple selection possible - You can only select teams which do not already " -"have access." -msgstr "" -"Mehrfachauswahl möglich - Sie können nur Teams wählen, für die der Eintrag " -"noch nicht freigegeben wurde." - -#: intervention/forms/modalForms.py:55 -msgid "Add user to share with" -msgstr "Nutzer einzeln hinzufügen" - -#: intervention/forms/modalForms.py:57 -msgid "" -"Multiple selection possible - You can only select users which do not already " -"have access. Enter the full username." -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:72 -msgid "Share settings for {}" -msgstr "Freigabe Einstellungen für {}" - -#: intervention/forms/modalForms.py:151 -msgid "Date of revocation" -msgstr "Datum des Widerspruchs" - -#: intervention/forms/modalForms.py:162 -#: intervention/templates/intervention/detail/includes/revocation.html:35 -msgid "Document" -msgstr "Dokument" - -#: intervention/forms/modalForms.py:165 -msgid "Must be smaller than 15 Mb" -msgstr "Muss kleiner als 15 Mb sein" - -#: intervention/forms/modalForms.py:190 -#: intervention/templates/intervention/detail/includes/revocation.html:18 -msgid "Add revocation" -msgstr "Widerspruch hinzufügen" - -#: intervention/forms/modalForms.py:208 -#: intervention/templates/intervention/detail/includes/revocation.html:69 -msgid "Edit revocation" -msgstr "Widerspruch bearbeiten" - -#: intervention/forms/modalForms.py:248 +#: intervention/forms/modals/check.py:20 msgid "Checked intervention data" msgstr "Eingriffsdaten geprüft" -#: intervention/forms/modalForms.py:254 +#: intervention/forms/modals/check.py:26 msgid "Checked compensations data and payments" msgstr "Kompensationen und Zahlungen geprüft" -#: intervention/forms/modalForms.py:263 +#: intervention/forms/modals/check.py:35 #: intervention/templates/intervention/detail/includes/controls.html:22 msgid "Run check" msgstr "Prüfung vornehmen" -#: intervention/forms/modalForms.py:264 konova/forms.py:598 +#: intervention/forms/modals/check.py:36 konova/forms/modals/record_form.py:30 msgid "" "I, {} {}, confirm that all necessary control steps have been performed by " "myself." @@ -1491,23 +1432,23 @@ msgstr "" "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "wurden:" -#: intervention/forms/modalForms.py:350 +#: intervention/forms/modals/deduction.py:33 msgid "Only recorded accounts can be selected for deductions" msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden." -#: intervention/forms/modalForms.py:377 +#: intervention/forms/modals/deduction.py:60 msgid "Only shared interventions can be selected" msgstr "Nur freigegebene Eingriffe können gewählt werden" -#: intervention/forms/modalForms.py:390 +#: intervention/forms/modals/deduction.py:73 msgid "New Deduction" msgstr "Neue Abbuchung" -#: intervention/forms/modalForms.py:391 +#: intervention/forms/modals/deduction.py:74 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:436 +#: intervention/forms/modals/deduction.py:119 msgid "" "Eco-account {} is not recorded yet. You can only deduct from recorded " "accounts." @@ -1515,7 +1456,7 @@ msgstr "" "Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von " "verzeichneten Ökokonten erfolgen." -#: intervention/forms/modalForms.py:443 +#: intervention/forms/modals/deduction.py:126 msgid "" "Intervention {} is currently recorded. To change any data on it, the entry " "must be unrecorded." @@ -1523,7 +1464,7 @@ msgstr "" "Eingriff {} ist verzeichnet. Der Eintrag muss erst entzeichnet werden um " "fortfahren zu können." -#: intervention/forms/modalForms.py:453 +#: intervention/forms/modals/deduction.py:136 msgid "" "The account {} has not enough surface for a deduction of {} m². There are " "only {} m² left" @@ -1531,6 +1472,65 @@ msgstr "" "Das Ökokonto {} hat für eine Abbuchung von {} m² nicht ausreichend " "Restfläche. Es stehen noch {} m² zur Verfügung." +#: intervention/forms/modals/revocation.py:21 +msgid "Date of revocation" +msgstr "Datum des Widerspruchs" + +#: intervention/forms/modals/revocation.py:32 +#: intervention/templates/intervention/detail/includes/revocation.html:35 +msgid "Document" +msgstr "Dokument" + +#: intervention/forms/modals/revocation.py:35 +msgid "Must be smaller than 15 Mb" +msgstr "Muss kleiner als 15 Mb sein" + +#: intervention/forms/modals/revocation.py:60 +#: intervention/templates/intervention/detail/includes/revocation.html:18 +msgid "Add revocation" +msgstr "Widerspruch hinzufügen" + +#: intervention/forms/modals/revocation.py:78 +#: intervention/templates/intervention/detail/includes/revocation.html:69 +msgid "Edit revocation" +msgstr "Widerspruch bearbeiten" + +#: intervention/forms/modals/share.py:21 +msgid "Share link" +msgstr "Freigabelink" + +#: intervention/forms/modals/share.py:23 +msgid "Send this link to users who you want to have writing access on the data" +msgstr "Einzelne Nutzer erhalten über diesen Link Zugriff auf die Daten" + +#: intervention/forms/modals/share.py:33 +msgid "Add team to share with" +msgstr "Team hinzufügen" + +#: intervention/forms/modals/share.py:35 +msgid "" +"Multiple selection possible - You can only select teams which do not already " +"have access." +msgstr "" +"Mehrfachauswahl möglich - Sie können nur Teams wählen, für die der Eintrag " +"noch nicht freigegeben wurde." + +#: intervention/forms/modals/share.py:47 +msgid "Add user to share with" +msgstr "Nutzer einzeln hinzufügen" + +#: intervention/forms/modals/share.py:49 +msgid "" +"Multiple selection possible - You can only select users which do not already " +"have access. Enter the full username." +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/modals/share.py:64 +msgid "Share settings for {}" +msgstr "Freigabe Einstellungen für {}" + #: intervention/templates/intervention/detail/includes/compensations.html:14 msgid "Add new compensation" msgstr "Neue Kompensation hinzufügen" @@ -1623,39 +1623,35 @@ msgstr "" "Kein Ausgleich jeglicher Art gefunden (Kompensation, Ersatzzahlung, " "Abbuchung)" -#: intervention/views.py:52 +#: intervention/views/check.py:36 +msgid "Check performed" +msgstr "Prüfung durchgeführt" + +#: intervention/views/intervention.py:55 msgid "Interventions - Overview" msgstr "Eingriffe - Übersicht" -#: intervention/views.py:85 +#: intervention/views/intervention.py:88 msgid "Intervention {} added" msgstr "Eingriff {} hinzugefügt" -#: intervention/views.py:326 +#: intervention/views/intervention.py:213 msgid "Intervention {} edited" msgstr "Eingriff {} bearbeitet" -#: intervention/views.py:362 +#: intervention/views/intervention.py:249 msgid "{} removed" msgstr "{} entfernt" -#: intervention/views.py:518 -msgid "Check performed" -msgstr "Prüfung durchgeführt" - -#: intervention/views.py:669 -msgid "There are errors on this intervention:" -msgstr "Es liegen Fehler in diesem Eingriff vor:" - -#: konova/decorators.py:30 +#: konova/decorators.py:33 msgid "You need to be staff to perform this action!" msgstr "Hierfür müssen Sie Mitarbeiter sein!" -#: konova/decorators.py:45 +#: konova/decorators.py:48 msgid "You need to be administrator to perform this action!" msgstr "Hierfür müssen Sie Administrator sein!" -#: konova/decorators.py:63 +#: konova/decorators.py:66 msgid "" "+++ Attention: You are not part of any group. You won't be able to create, " "edit or do anything. Please contact an administrator. +++" @@ -1664,154 +1660,158 @@ msgstr "" "somit nichts eingeben, bearbeiten oder sonstige Aktionen ausführen. " "Kontaktieren Sie bitte einen Administrator. +++" -#: konova/filters/mixins.py:57 +#: konova/decorators.py:169 +msgid "Session timed out" +msgstr "Sitzung abgelaufen" + +#: konova/filters/mixins/file_number.py:21 msgid "File number" msgstr "Aktenzeichen" -#: konova/filters/mixins.py:58 +#: konova/filters/mixins/file_number.py:22 msgid "Search for file number" msgstr "Nach Aktenzeichen suchen" -#: konova/filters/mixins.py:85 +#: konova/filters/mixins/geo_reference.py:29 #: konova/templates/konova/includes/parcels/parcel_table_frame.html:18 msgid "District" msgstr "Kreis" -#: konova/filters/mixins.py:86 +#: konova/filters/mixins/geo_reference.py:30 msgid "Search for district" msgstr "Nach Kreis suchen" -#: konova/filters/mixins.py:99 +#: konova/filters/mixins/geo_reference.py:43 msgid "Search for parcel gmrkng" msgstr "Nach Gemarkung suchen" -#: konova/filters/mixins.py:111 +#: konova/filters/mixins/geo_reference.py:55 #: konova/templates/konova/includes/parcels/parcel_table_frame.html:39 msgid "Parcel" msgstr "Flur" -#: konova/filters/mixins.py:112 +#: konova/filters/mixins/geo_reference.py:56 msgid "Search for parcel" msgstr "Nach Flur suchen" -#: konova/filters/mixins.py:124 +#: konova/filters/mixins/geo_reference.py:68 #: konova/templates/konova/includes/parcels/parcel_table_frame.html:40 msgid "Parcel counter" msgstr "Flurstückzähler" -#: konova/filters/mixins.py:125 +#: konova/filters/mixins/geo_reference.py:69 msgid "Search for parcel counter" msgstr "Nach Flurstückzähler suchen" -#: konova/filters/mixins.py:138 +#: konova/filters/mixins/geo_reference.py:82 #: konova/templates/konova/includes/parcels/parcel_table_frame.html:41 msgid "Parcel number" msgstr "Flurstücknenner" -#: konova/filters/mixins.py:139 +#: konova/filters/mixins/geo_reference.py:83 msgid "Search for parcel number" msgstr "Nach Flurstücknenner suchen" -#: konova/filters/mixins.py:276 -msgid "Show unshared" -msgstr "Nicht freigegebene anzeigen" - -#: konova/filters/mixins.py:322 -msgid "Show recorded" -msgstr "Verzeichnete anzeigen" +#: konova/filters/mixins/office.py:35 +msgid "Search for conservation office" +msgstr "Nch Eintragungsstelle suchen" -#: konova/filters/mixins.py:372 +#: konova/filters/mixins/office.py:67 msgid "Search for registration office" msgstr "Nach Zulassungsbehörde suchen" -#: konova/filters/mixins.py:404 -msgid "Search for conservation office" -msgstr "Nch Eintragungsstelle suchen" +#: konova/filters/mixins/record.py:22 +msgid "Show recorded" +msgstr "Verzeichnete anzeigen" + +#: konova/filters/mixins/share.py:22 +msgid "Show unshared" +msgstr "Nicht freigegebene anzeigen" -#: konova/forms.py:44 templates/form/collapsable/form.html:62 +#: konova/forms/base_form.py:23 templates/form/collapsable/form.html:62 msgid "Save" msgstr "Speichern" -#: konova/forms.py:78 +#: konova/forms/base_form.py:57 msgid "Not editable" msgstr "Nicht editierbar" -#: konova/forms.py:182 konova/forms.py:398 -msgid "Confirm" -msgstr "Bestätige" - -#: konova/forms.py:194 konova/forms.py:407 -msgid "Remove" -msgstr "Löschen" - -#: konova/forms.py:196 -msgid "You are about to remove {} {}" -msgstr "Sie sind dabei {} {} zu löschen" - -#: konova/forms.py:284 konova/utils/quality.py:44 konova/utils/quality.py:46 -#: templates/form/collapsable/form.html:45 +#: konova/forms/geometry_form.py:29 konova/utils/quality.py:44 +#: konova/utils/quality.py:46 templates/form/collapsable/form.html:45 msgid "Geometry" msgstr "Geometrie" -#: konova/forms.py:335 +#: konova/forms/geometry_form.py:80 msgid "Only surfaces allowed. Points or lines must be buffered." msgstr "" "Nur Flächen erlaubt. Punkte oder Linien müssen zu Flächen gepuffert werden." -#: konova/forms.py:408 -msgid "Are you sure?" -msgstr "Sind Sie sicher?" - -#: konova/forms.py:454 +#: konova/forms/modals/document_form.py:36 msgid "When has this file been created? Important for photos." msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?" -#: konova/forms.py:465 +#: konova/forms/modals/document_form.py:47 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231 msgid "File" msgstr "Datei" -#: konova/forms.py:467 +#: konova/forms/modals/document_form.py:49 msgid "Allowed formats: pdf, jpg, png. Max size 15 MB." msgstr "Formate: pdf, jpg, png. Maximal 15 MB." -#: konova/forms.py:532 +#: konova/forms/modals/document_form.py:114 msgid "Added document" msgstr "Dokument hinzugefügt" -#: konova/forms.py:589 +#: konova/forms/modals/record_form.py:21 msgid "Confirm record" msgstr "Verzeichnen bestätigen" -#: konova/forms.py:597 +#: konova/forms/modals/record_form.py:29 msgid "Record data" msgstr "Daten verzeichnen" -#: konova/forms.py:604 +#: konova/forms/modals/record_form.py:36 msgid "Confirm unrecord" msgstr "Entzeichnen bestätigen" -#: konova/forms.py:605 +#: konova/forms/modals/record_form.py:37 msgid "Unrecord data" msgstr "Daten entzeichnen" -#: konova/forms.py:606 +#: konova/forms/modals/record_form.py:38 msgid "I, {} {}, confirm that this data must be unrecorded." msgstr "" "Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen." -#: konova/forms.py:698 +#: konova/forms/modals/remove_form.py:22 konova/forms/remove_form.py:18 +msgid "Confirm" +msgstr "Bestätige" + +#: konova/forms/modals/remove_form.py:31 konova/forms/remove_form.py:30 +msgid "Remove" +msgstr "Löschen" + +#: konova/forms/modals/remove_form.py:32 +msgid "Are you sure?" +msgstr "Sind Sie sicher?" + +#: konova/forms/modals/resubmission_form.py:23 msgid "When do you want to be reminded?" msgstr "Wann wollen Sie erinnert werden?" -#: konova/forms.py:725 +#: konova/forms/modals/resubmission_form.py:50 msgid "Set your resubmission for this entry." msgstr "Setzen Sie eine Wiedervorlage für diesen Eintrag." -#: konova/forms.py:746 +#: konova/forms/modals/resubmission_form.py:71 msgid "The date should be in the future" msgstr "Das Datum sollte in der Zukunft liegen" +#: konova/forms/remove_form.py:32 +msgid "You are about to remove {} {}" +msgstr "Sie sind dabei {} {} zu löschen" + #: konova/management/commands/setup_data.py:26 msgid "On shared access gained" msgstr "Wenn mir eine Freigabe zu Daten erteilt wird" @@ -2043,15 +2043,19 @@ msgstr "" "bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, " "noch Prüfungen durchführen oder verzeichnen können." -#: konova/utils/message_templates.py:27 +#: konova/utils/message_templates.py:25 +msgid "Share settings updated" +msgstr "Freigabe Einstellungen aktualisiert" + +#: konova/utils/message_templates.py:28 msgid "Unsupported file type" msgstr "Dateiformat nicht unterstützt" -#: konova/utils/message_templates.py:28 +#: konova/utils/message_templates.py:29 msgid "File too large" msgstr "Datei zu groß" -#: konova/utils/message_templates.py:31 +#: konova/utils/message_templates.py:32 msgid "" "Action canceled. Eco account is recorded or deductions exist. Only " "conservation office member can perform this action." @@ -2059,132 +2063,136 @@ 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:34 +#: konova/utils/message_templates.py:35 msgid "Compensation {} added" msgstr "Kompensation {} hinzugefügt" -#: konova/utils/message_templates.py:35 +#: konova/utils/message_templates.py:36 msgid "Compensation {} removed" msgstr "Kompensation {} entfernt" -#: konova/utils/message_templates.py:37 +#: konova/utils/message_templates.py:38 msgid "Added compensation action" msgstr "Maßnahme hinzugefügt" -#: konova/utils/message_templates.py:38 +#: konova/utils/message_templates.py:39 msgid "Added compensation state" msgstr "Zustand hinzugefügt" -#: konova/utils/message_templates.py:41 +#: konova/utils/message_templates.py:42 msgid "State removed" msgstr "Zustand gelöscht" -#: konova/utils/message_templates.py:42 +#: konova/utils/message_templates.py:43 msgid "State edited" msgstr "Zustand bearbeitet" -#: konova/utils/message_templates.py:43 +#: konova/utils/message_templates.py:44 msgid "State added" msgstr "Zustand hinzugefügt" -#: konova/utils/message_templates.py:46 +#: konova/utils/message_templates.py:47 msgid "Action added" msgstr "Maßnahme hinzugefügt" -#: konova/utils/message_templates.py:47 +#: konova/utils/message_templates.py:48 msgid "Action edited" msgstr "Maßnahme bearbeitet" -#: konova/utils/message_templates.py:48 +#: konova/utils/message_templates.py:49 msgid "Action removed" msgstr "Maßnahme entfernt" -#: konova/utils/message_templates.py:51 +#: konova/utils/message_templates.py:52 msgid "Deduction added" msgstr "Abbuchung hinzugefügt" -#: konova/utils/message_templates.py:52 +#: konova/utils/message_templates.py:53 msgid "Deduction edited" msgstr "Abbuchung bearbeitet" -#: konova/utils/message_templates.py:53 +#: konova/utils/message_templates.py:54 msgid "Deduction removed" msgstr "Abbuchung entfernt" -#: konova/utils/message_templates.py:56 +#: konova/utils/message_templates.py:55 +msgid "Unknown deduction" +msgstr "Unbekannte Abbuchung" + +#: konova/utils/message_templates.py:58 msgid "Deadline added" msgstr "Frist/Termin hinzugefügt" -#: konova/utils/message_templates.py:57 +#: konova/utils/message_templates.py:59 msgid "Deadline edited" msgstr "Frist/Termin bearbeitet" -#: konova/utils/message_templates.py:58 +#: konova/utils/message_templates.py:60 msgid "Deadline removed" msgstr "Frist/Termin gelöscht" -#: konova/utils/message_templates.py:61 +#: konova/utils/message_templates.py:63 msgid "Payment added" msgstr "Zahlung hinzugefügt" -#: konova/utils/message_templates.py:62 +#: konova/utils/message_templates.py:64 msgid "Payment edited" msgstr "Zahlung bearbeitet" -#: konova/utils/message_templates.py:63 +#: konova/utils/message_templates.py:65 msgid "Payment removed" msgstr "Zahlung gelöscht" -#: konova/utils/message_templates.py:66 +#: konova/utils/message_templates.py:68 msgid "Revocation added" msgstr "Widerspruch hinzugefügt" -#: konova/utils/message_templates.py:67 +#: konova/utils/message_templates.py:69 msgid "Revocation edited" msgstr "Widerspruch bearbeitet" -#: konova/utils/message_templates.py:68 +#: konova/utils/message_templates.py:70 msgid "Revocation removed" msgstr "Widerspruch entfernt" -#: konova/utils/message_templates.py:71 +#: konova/utils/message_templates.py:73 msgid "Document '{}' deleted" msgstr "Dokument '{}' gelöscht" -#: konova/utils/message_templates.py:72 +#: konova/utils/message_templates.py:74 msgid "Document added" msgstr "Dokument hinzugefügt" -#: konova/utils/message_templates.py:73 +#: konova/utils/message_templates.py:75 msgid "Document edited" msgstr "Dokument bearbeitet" -#: konova/utils/message_templates.py:76 +#: konova/utils/message_templates.py:78 msgid "Edited general data" msgstr "Allgemeine Daten bearbeitet" -#: konova/utils/message_templates.py:77 +#: konova/utils/message_templates.py:79 msgid "Added deadline" msgstr "Frist/Termin hinzugefügt" -#: konova/utils/message_templates.py:80 +#: konova/utils/message_templates.py:82 msgid "Geometry conflict detected with {}" msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}" -#: konova/utils/message_templates.py:83 +#: konova/utils/message_templates.py:85 msgid "This intervention has {} revocations" msgstr "Dem Eingriff liegen {} Widersprüche vor" -#: konova/utils/message_templates.py:86 +#: konova/utils/message_templates.py:88 msgid "Checked on {} by {}" msgstr "Am {} von {} geprüft worden" -#: konova/utils/message_templates.py:87 +#: konova/utils/message_templates.py:89 msgid "Data has changed since last check on {} by {}" msgstr "" "Daten wurden nach der letzten Prüfung geändert. Letzte Prüfung am {} durch {}" -#: konova/utils/message_templates.py:88 +#: konova/utils/message_templates.py:90 msgid "Current data not checked yet" msgstr "Momentane Daten noch nicht geprüft" @@ -2204,10 +2212,42 @@ msgstr "{} wurde erfolgreich vom Nutzer {} geprüft! {}" msgid "missing" msgstr "fehlt" -#: konova/views.py:99 templates/navbars/navbar.html:16 +#: konova/views/home.py:78 templates/navbars/navbar.html:16 msgid "Home" msgstr "Home" +#: konova/views/log.py:38 +msgid "Log" +msgstr "Log" + +#: konova/views/record.py:30 +msgid "{} unrecorded" +msgstr "{} entzeichnet" + +#: konova/views/record.py:30 +msgid "{} recorded" +msgstr "{} verzeichnet" + +#: konova/views/record.py:35 +msgid "Errors found:" +msgstr "Fehler gefunden:" + +#: konova/views/resubmission.py:39 +msgid "Resubmission set" +msgstr "Wiedervorlage gesetzt" + +#: konova/views/share.py:46 +msgid "{} has already been shared with you" +msgstr "{} wurde bereits für Sie freigegeben" + +#: konova/views/share.py:51 +msgid "{} has been shared with you" +msgstr "{} ist nun für Sie freigegeben" + +#: konova/views/share.py:58 +msgid "Share link invalid" +msgstr "Freigabelink ungültig" + #: news/models.py:12 msgid "Default" msgstr "Standard" @@ -2621,6 +2661,10 @@ msgstr "Nutzer" msgid "No geometry added, yet." msgstr "Keine Geometrie vorhanden" +#: templates/modal/modal_session_timed_out.html:3 +msgid "Your session has timed out. Please reload the page to login." +msgstr "Ihre Sitzung ist aufgrund von Inaktivität abgelaufen. Laden Sie die Seite erneut, um sich wieder einzuloggen." + #: templates/navbars/navbar.html:4 msgid "Kompensationsverzeichnis Service Portal" msgstr "" @@ -2674,59 +2718,21 @@ msgstr "" "Falls die Geometrie nicht leer ist, werden die Flurstücke aktuell berechnet. " "Bitte laden Sie diese Seite in ein paar Augenblicken erneut..." -#: user/forms.py:27 -msgid "Notifications" -msgstr "Benachrichtigungen" - -#: user/forms.py:29 -msgid "Select the situations when you want to receive a notification" -msgstr "Wann wollen Sie per E-Mail benachrichtigt werden?" - -#: user/forms.py:41 -msgid "Edit notifications" -msgstr "Benachrichtigungen bearbeiten" - -#: user/forms.py:76 user/templates/user/index.html:9 -msgid "Username" -msgstr "Nutzername" - -#: user/forms.py:87 -msgid "Person name" -msgstr "Name" - -#: user/forms.py:98 user/templates/user/index.html:17 -msgid "E-Mail" -msgstr "" - -#: user/forms.py:112 -msgid "User contact data" -msgstr "Kontaktdaten" - -#: user/forms.py:122 -msgid "Token" -msgstr "" - -#: user/forms.py:137 -msgid "Create new token" -msgstr "Neuen Token generieren" - -#: user/forms.py:138 -msgid "A new token needs to be validated by an administrator!" -msgstr "Neue Tokens müssen durch Administratoren freigeschaltet werden!" - -#: user/forms.py:168 user/forms.py:172 user/forms.py:354 user/forms.py:359 +#: user/forms/modals/team.py:20 user/forms/modals/team.py:24 +#: user/forms/team.py:17 user/forms/team.py:22 msgid "Team name" msgstr "Team Name" -#: user/forms.py:179 user/forms.py:367 user/templates/user/team/index.html:30 +#: user/forms/modals/team.py:31 user/forms/team.py:30 +#: user/templates/user/team/index.html:30 msgid "Description" msgstr "Beschreibung" -#: user/forms.py:188 +#: user/forms/modals/team.py:40 msgid "Manage team members" msgstr "Mitglieder verwalten" -#: user/forms.py:190 +#: user/forms/modals/team.py:42 msgid "" "Multiple selection possible - You can only select users which are not " "already a team member. Enter the full username or e-mail." @@ -2734,11 +2740,11 @@ msgstr "" "Mehrfachauswahl möglich - Sie können nur Nutzer wählen, die noch nicht " "Mitglieder dieses Teams sind. Geben Sie den ganzen Nutzernamen an." -#: user/forms.py:204 +#: user/forms/modals/team.py:56 msgid "Create new team" msgstr "Neues Team anlegen" -#: user/forms.py:205 +#: user/forms/modals/team.py:57 msgid "" "You will become the administrator for this group by default. You do not need " "to add yourself to the list of members." @@ -2746,31 +2752,31 @@ msgstr "" "Sie werden standardmäßig der Administrator dieses Teams. Sie müssen sich " "selbst nicht zur Liste der Mitglieder hinzufügen." -#: user/forms.py:218 user/forms.py:296 +#: user/forms/modals/team.py:70 user/forms/modals/team.py:148 msgid "Name already taken. Try another." msgstr "Name bereits vergeben. Probieren Sie einen anderen." -#: user/forms.py:248 +#: user/forms/modals/team.py:100 msgid "Admins" msgstr "Administratoren" -#: user/forms.py:250 +#: user/forms/modals/team.py:102 msgid "Administrators manage team details and members" msgstr "Administratoren verwalten die Teamdaten und Mitglieder" -#: user/forms.py:273 +#: user/forms/modals/team.py:125 msgid "Selected admins need to be members of this team." msgstr "Gewählte Administratoren müssen Teammitglieder sein." -#: user/forms.py:280 +#: user/forms/modals/team.py:132 msgid "There must be at least one admin on this team." msgstr "Es muss mindestens einen Administrator für das Team geben." -#: user/forms.py:308 user/templates/user/team/index.html:60 +#: user/forms/modals/team.py:160 user/templates/user/team/index.html:60 msgid "Edit team" msgstr "Team bearbeiten" -#: user/forms.py:335 +#: user/forms/modals/team.py:187 msgid "" "ATTENTION!\n" "\n" @@ -2786,14 +2792,54 @@ msgstr "" "\n" "Sind Sie sicher, dass Sie dieses Team löschen möchten?" -#: user/forms.py:345 user/templates/user/team/index.html:56 +#: user/forms/modals/team.py:197 user/templates/user/team/index.html:56 msgid "Leave team" msgstr "Team verlassen" -#: user/forms.py:378 +#: user/forms/modals/user.py:20 user/templates/user/index.html:9 +msgid "Username" +msgstr "Nutzername" + +#: user/forms/modals/user.py:31 +msgid "Person name" +msgstr "Name" + +#: user/forms/modals/user.py:42 user/templates/user/index.html:17 +msgid "E-Mail" +msgstr "" + +#: user/forms/modals/user.py:56 +msgid "User contact data" +msgstr "Kontaktdaten" + +#: user/forms/team.py:41 msgid "Team" msgstr "Team" +#: user/forms/user.py:24 +msgid "Notifications" +msgstr "Benachrichtigungen" + +#: user/forms/user.py:26 +msgid "Select the situations when you want to receive a notification" +msgstr "Wann wollen Sie per E-Mail benachrichtigt werden?" + +#: user/forms/user.py:38 +msgid "Edit notifications" +msgstr "Benachrichtigungen bearbeiten" + +#: user/forms/user.py:73 +msgid "Token" +msgstr "" + +#: user/forms/user.py:88 +msgid "Create new token" +msgstr "Neuen Token generieren" + +#: user/forms/user.py:89 +msgid "A new token needs to be validated by an administrator!" +msgstr "Neue Tokens müssen durch Administratoren freigeschaltet werden!" + #: user/models/user_action.py:23 msgid "Unrecorded" msgstr "Entzeichnet" @@ -2856,7 +2902,7 @@ msgid "Manage teams" msgstr "" #: user/templates/user/index.html:61 user/templates/user/team/index.html:19 -#: user/views.py:167 +#: user/views.py:169 msgid "Teams" msgstr "" @@ -2908,43 +2954,43 @@ msgstr "Token noch nicht freigeschaltet" msgid "Valid until" msgstr "Läuft ab am" -#: user/views.py:33 +#: user/views.py:35 msgid "User settings" msgstr "Einstellungen" -#: user/views.py:59 +#: user/views.py:61 msgid "Notifications edited" msgstr "Benachrichtigungen bearbeitet" -#: user/views.py:71 +#: user/views.py:73 msgid "User notifications" msgstr "Benachrichtigungen" -#: user/views.py:94 +#: user/views.py:96 msgid "New token generated. Administrators need to validate." msgstr "Neuer Token generiert. Administratoren sind informiert." -#: user/views.py:105 +#: user/views.py:107 msgid "User API token" msgstr "API Nutzer Token" -#: user/views.py:178 +#: user/views.py:180 msgid "New team added" msgstr "Neues Team hinzugefügt" -#: user/views.py:192 +#: user/views.py:194 msgid "Team edited" msgstr "Team bearbeitet" -#: user/views.py:206 +#: user/views.py:208 msgid "Team removed" msgstr "Team gelöscht" -#: user/views.py:220 +#: user/views.py:222 msgid "You are not a member of this team" msgstr "Sie sind kein Mitglied dieses Teams" -#: user/views.py:227 +#: user/views.py:229 msgid "Left Team" msgstr "Team verlassen" @@ -4447,6 +4493,9 @@ msgstr "" msgid "Unable to connect to qpid with SASL mechanism %s" msgstr "" +#~ msgid "There are errors on this intervention:" +#~ msgstr "Es liegen Fehler in diesem Eingriff vor:" + #~ msgid "Before" #~ msgstr "Vor" diff --git a/templates/modal/modal_session_timed_out.html b/templates/modal/modal_session_timed_out.html new file mode 100644 index 0000000..8a2fdad --- /dev/null +++ b/templates/modal/modal_session_timed_out.html @@ -0,0 +1,3 @@ +{% load i18n %} + +{% trans 'Your session has timed out. Please reload the page to login.' %} \ No newline at end of file diff --git a/user/views.py b/user/views.py index 7e2d21e..30ce627 100644 --- a/user/views.py +++ b/user/views.py @@ -15,7 +15,7 @@ from django.shortcuts import render, redirect, get_object_or_404 from django.utils.translation import gettext_lazy as _ from konova.contexts import BaseContext -from konova.decorators import any_group_check, default_group_required +from konova.decorators import any_group_check, default_group_required, login_required_modal @login_required @@ -110,6 +110,7 @@ def api_token_view(request: HttpRequest): return render(request, template, context) +@login_required_modal @login_required def contact_view(request: HttpRequest, id: str): """ Renders contact modal view of a users contact data @@ -135,6 +136,7 @@ def contact_view(request: HttpRequest, id: str): ) +@login_required_modal @login_required def data_team_view(request: HttpRequest, id: str): """ Renders team data @@ -172,6 +174,7 @@ def index_team_view(request: HttpRequest): return render(request, template, context) +@login_required_modal @login_required def new_team_view(request: HttpRequest): form = NewTeamModalForm(request.POST or None, request=request) @@ -182,6 +185,7 @@ def new_team_view(request: HttpRequest): ) +@login_required_modal @login_required def edit_team_view(request: HttpRequest, id: str): team = get_object_or_404(Team, id=id) @@ -196,6 +200,7 @@ def edit_team_view(request: HttpRequest, id: str): ) +@login_required_modal @login_required def remove_team_view(request: HttpRequest, id: str): team = get_object_or_404(Team, id=id) @@ -210,6 +215,7 @@ def remove_team_view(request: HttpRequest, id: str): ) +@login_required_modal @login_required def leave_team_view(request: HttpRequest, id: str): team = get_object_or_404(Team, id=id)