WIP: 490_View_refactoring #491

Draft
mpeltriaux wants to merge 35 commits from 490_View_refactoring into master
4 changed files with 32 additions and 29 deletions
Showing only changes of commit c597e1934b - Show all commits

View File

@ -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

View File

@ -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('<id>', detail_view, name='detail'),
path('<id>/log', InterventionLogView.as_view(), name='log'),
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, \
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

View File

@ -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
}
)
)
def _user_has_permission(self, user):
""" Has to be implemented in inheriting classes!
Args:
user ():
Returns:
"""
raise NotImplementedError