From c597e1934be0082e337fc2bca8dabcd7ca2f90f3 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Wed, 15 Oct 2025 16:40:35 +0200 Subject: [PATCH] # Identifier Generator View refactoring * refactors identifier generator view for interventions * simplifies same view for ema --- ema/views/ema.py | 9 +++------ intervention/urls.py | 6 +++--- intervention/views/intervention.py | 23 ++++++----------------- konova/views/base.py | 23 ++++++++++++++++++++--- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/ema/views/ema.py b/ema/views/ema.py index 4cd9d7ea..1b449b6a 100644 --- a/ema/views/ema.py +++ b/ema/views/ema.py @@ -98,13 +98,10 @@ def new_view(request: HttpRequest): class EmaIdentifierGeneratorView(LoginRequiredMixin, BaseIdentifierGeneratorView): _MODEL_CLS = Ema + _REDIRECT_URL_NAME = "ema:index" - def dispatch(self, request, *args, **kwargs): - is_ets = request.user.is_ets_user() - if not is_ets: - messages.info(request, MISSING_GROUP_PERMISSION) - return redirect(reverse("ema:index")) - return super().dispatch(request, *args, **kwargs) + def _user_has_permission(self, user): + return user.is_ets_user() @login_required diff --git a/intervention/urls.py b/intervention/urls.py index 26051f55..b88fdfa8 100644 --- a/intervention/urls.py +++ b/intervention/urls.py @@ -14,8 +14,8 @@ from intervention.views.deduction import NewInterventionDeductionView, EditInter RemoveInterventionDeductionView from intervention.views.document import NewInterventionDocumentView, GetInterventionDocumentView, \ RemoveInterventionDocumentView, EditInterventionDocumentView -from intervention.views.intervention import new_view, new_id_view, detail_view, edit_view, remove_view, \ - InterventionIndexView +from intervention.views.intervention import new_view, detail_view, edit_view, remove_view, \ + InterventionIndexView, InterventionIdentifierGeneratorView from intervention.views.log import InterventionLogView from intervention.views.record import InterventionRecordView from intervention.views.report import report_view @@ -28,7 +28,7 @@ app_name = "intervention" urlpatterns = [ path("", InterventionIndexView.as_view(), name="index"), path('new/', new_view, name='new'), - path('new/id', new_id_view, name='new-id'), + path('new/id', InterventionIdentifierGeneratorView.as_view(), name='new-id'), path('', detail_view, name='detail'), path('/log', InterventionLogView.as_view(), name='log'), path('/edit', edit_view, name='edit'), diff --git a/intervention/views/intervention.py b/intervention/views/intervention.py index 61d8d2e3..a53a5650 100644 --- a/intervention/views/intervention.py +++ b/intervention/views/intervention.py @@ -26,7 +26,7 @@ from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.utils.message_templates import DATA_CHECKED_PREVIOUSLY_TEMPLATE, RECORDED_BLOCKS_EDIT, \ CHECK_STATE_RESET, FORM_INVALID, IDENTIFIER_REPLACED, DO_NOT_FORGET_TO_SHARE, GEOMETRY_SIMPLIFIED, \ GEOMETRIES_IGNORED_TEMPLATE -from konova.views.base import BaseIndexView +from konova.views.base import BaseIndexView, BaseIdentifierGeneratorView class InterventionIndexView(LoginRequiredMixin, BaseIndexView): @@ -100,23 +100,12 @@ def new_view(request: HttpRequest): return render(request, template, context) -@login_required -@default_group_required -def new_id_view(request: HttpRequest): - """ JSON endpoint +class InterventionIdentifierGeneratorView(LoginRequiredMixin, BaseIdentifierGeneratorView): + _MODEL_CLS = Intervention + _REDIRECT_URL_NAME = "intervention:index" - Provides fetching of free identifiers for e.g. AJAX calls - - """ - tmp_intervention = Intervention() - identifier = tmp_intervention.generate_new_identifier() - while Intervention.objects.filter(identifier=identifier).exists(): - identifier = tmp_intervention.generate_new_identifier() - return JsonResponse( - data={ - "gen_data": identifier - } - ) + def _user_has_permission(self, user): + return user.is_default_user() @login_required diff --git a/konova/views/base.py b/konova/views/base.py index 6a3c78d6..b777dcca 100644 --- a/konova/views/base.py +++ b/konova/views/base.py @@ -5,13 +5,16 @@ Created on: 15.10.25 """ from abc import abstractmethod +from django.contrib import messages from django.http import HttpRequest, JsonResponse -from django.shortcuts import render +from django.shortcuts import render, redirect +from django.urls import reverse from django.views import View from konova.contexts import BaseContext from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.utils.general import check_user_is_in_any_group +from konova.utils.message_templates import MISSING_GROUP_PERMISSION class BaseIndexView(View): @@ -49,12 +52,15 @@ class BaseIndexView(View): class BaseIdentifierGeneratorView(View): _MODEL_CLS = None + _REDIRECT_URL_NAME: str = "home" class Meta: abstract = True def dispatch(self, request, *args, **kwargs): - request = check_user_is_in_any_group(request) + if not self._user_has_permission(request.user): + messages.info(request, MISSING_GROUP_PERMISSION) + return redirect(reverse(self._REDIRECT_URL_NAME)) return super().dispatch(request, *args, **kwargs) def get(self, request: HttpRequest): @@ -66,4 +72,15 @@ class BaseIdentifierGeneratorView(View): data={ "gen_data": identifier } - ) \ No newline at end of file + ) + + def _user_has_permission(self, user): + """ Has to be implemented in inheriting classes! + + Args: + user (): + + Returns: + + """ + raise NotImplementedError