# Identifier Generator View refactoring

* refactors identifier generator view for interventions
* simplifies same view for ema
This commit is contained in:
mpeltriaux 2025-10-15 16:40:35 +02:00
parent a44d8658d4
commit c597e1934b
4 changed files with 32 additions and 29 deletions

View File

@ -98,13 +98,10 @@ def new_view(request: HttpRequest):
class EmaIdentifierGeneratorView(LoginRequiredMixin, BaseIdentifierGeneratorView): class EmaIdentifierGeneratorView(LoginRequiredMixin, BaseIdentifierGeneratorView):
_MODEL_CLS = Ema _MODEL_CLS = Ema
_REDIRECT_URL_NAME = "ema:index"
def dispatch(self, request, *args, **kwargs): def _user_has_permission(self, user):
is_ets = request.user.is_ets_user() return 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)
@login_required @login_required

View File

@ -14,8 +14,8 @@ from intervention.views.deduction import NewInterventionDeductionView, EditInter
RemoveInterventionDeductionView RemoveInterventionDeductionView
from intervention.views.document import NewInterventionDocumentView, GetInterventionDocumentView, \ from intervention.views.document import NewInterventionDocumentView, GetInterventionDocumentView, \
RemoveInterventionDocumentView, EditInterventionDocumentView RemoveInterventionDocumentView, EditInterventionDocumentView
from intervention.views.intervention import new_view, new_id_view, detail_view, edit_view, remove_view, \ from intervention.views.intervention import new_view, detail_view, edit_view, remove_view, \
InterventionIndexView InterventionIndexView, InterventionIdentifierGeneratorView
from intervention.views.log import InterventionLogView from intervention.views.log import InterventionLogView
from intervention.views.record import InterventionRecordView from intervention.views.record import InterventionRecordView
from intervention.views.report import report_view from intervention.views.report import report_view
@ -28,7 +28,7 @@ app_name = "intervention"
urlpatterns = [ urlpatterns = [
path("", InterventionIndexView.as_view(), name="index"), path("", InterventionIndexView.as_view(), name="index"),
path('new/', new_view, name='new'), 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('<id>', detail_view, name='detail'), path('<id>', detail_view, name='detail'),
path('<id>/log', InterventionLogView.as_view(), name='log'), path('<id>/log', InterventionLogView.as_view(), name='log'),
path('<id>/edit', edit_view, name='edit'), path('<id>/edit', edit_view, name='edit'),

View File

@ -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, \ 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, \ CHECK_STATE_RESET, FORM_INVALID, IDENTIFIER_REPLACED, DO_NOT_FORGET_TO_SHARE, GEOMETRY_SIMPLIFIED, \
GEOMETRIES_IGNORED_TEMPLATE GEOMETRIES_IGNORED_TEMPLATE
from konova.views.base import BaseIndexView from konova.views.base import BaseIndexView, BaseIdentifierGeneratorView
class InterventionIndexView(LoginRequiredMixin, BaseIndexView): class InterventionIndexView(LoginRequiredMixin, BaseIndexView):
@ -100,23 +100,12 @@ def new_view(request: HttpRequest):
return render(request, template, context) return render(request, template, context)
@login_required class InterventionIdentifierGeneratorView(LoginRequiredMixin, BaseIdentifierGeneratorView):
@default_group_required _MODEL_CLS = Intervention
def new_id_view(request: HttpRequest): _REDIRECT_URL_NAME = "intervention:index"
""" JSON endpoint
Provides fetching of free identifiers for e.g. AJAX calls def _user_has_permission(self, user):
return user.is_default_user()
"""
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
}
)
@login_required @login_required

View File

@ -5,13 +5,16 @@ Created on: 15.10.25
""" """
from abc import abstractmethod from abc import abstractmethod
from django.contrib import messages
from django.http import HttpRequest, JsonResponse 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 django.views import View
from konova.contexts import BaseContext from konova.contexts import BaseContext
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.general import check_user_is_in_any_group from konova.utils.general import check_user_is_in_any_group
from konova.utils.message_templates import MISSING_GROUP_PERMISSION
class BaseIndexView(View): class BaseIndexView(View):
@ -49,12 +52,15 @@ class BaseIndexView(View):
class BaseIdentifierGeneratorView(View): class BaseIdentifierGeneratorView(View):
_MODEL_CLS = None _MODEL_CLS = None
_REDIRECT_URL_NAME: str = "home"
class Meta: class Meta:
abstract = True abstract = True
def dispatch(self, request, *args, **kwargs): 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) return super().dispatch(request, *args, **kwargs)
def get(self, request: HttpRequest): def get(self, request: HttpRequest):
@ -66,4 +72,15 @@ class BaseIdentifierGeneratorView(View):
data={ data={
"gen_data": identifier "gen_data": identifier
} }
) )
def _user_has_permission(self, user):
""" Has to be implemented in inheriting classes!
Args:
user ():
Returns:
"""
raise NotImplementedError