WIP: 490_View_refactoring #491

Draft
mpeltriaux wants to merge 35 commits from 490_View_refactoring into master
3 changed files with 36 additions and 21 deletions
Showing only changes of commit a44d8658d4 - Show all commits

View File

@ -10,7 +10,8 @@ from django.urls import path
from ema.views.action import NewEmaActionView, EditEmaActionView, RemoveEmaActionView from ema.views.action import NewEmaActionView, EditEmaActionView, RemoveEmaActionView
from ema.views.deadline import NewEmaDeadlineView, EditEmaDeadlineView, RemoveEmaDeadlineView from ema.views.deadline import NewEmaDeadlineView, EditEmaDeadlineView, RemoveEmaDeadlineView
from ema.views.document import NewEmaDocumentView, EditEmaDocumentView, RemoveEmaDocumentView, GetEmaDocumentView from ema.views.document import NewEmaDocumentView, EditEmaDocumentView, RemoveEmaDocumentView, GetEmaDocumentView
from ema.views.ema import new_view, new_id_view, detail_view, edit_view, remove_view, EmaIndexView from ema.views.ema import new_view, detail_view, edit_view, remove_view, EmaIndexView, \
EmaIdentifierGeneratorView
from ema.views.log import EmaLogView from ema.views.log import EmaLogView
from ema.views.record import EmaRecordView from ema.views.record import EmaRecordView
from ema.views.report import report_view from ema.views.report import report_view
@ -22,7 +23,7 @@ app_name = "ema"
urlpatterns = [ urlpatterns = [
path("", EmaIndexView.as_view(), name="index"), path("", EmaIndexView.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", EmaIdentifierGeneratorView.as_view(), name="new-id"),
path("<id>", detail_view, name="detail"), path("<id>", detail_view, name="detail"),
path('<id>/log', EmaLogView.as_view(), name='log'), path('<id>/log', EmaLogView.as_view(), name='log'),
path('<id>/edit', edit_view, name='edit'), path('<id>/edit', edit_view, name='edit'),

View File

@ -24,8 +24,8 @@ from konova.forms.modals import RemoveModalForm
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.message_templates import RECORDED_BLOCKS_EDIT, IDENTIFIER_REPLACED, FORM_INVALID, \ from konova.utils.message_templates import RECORDED_BLOCKS_EDIT, IDENTIFIER_REPLACED, FORM_INVALID, \
DO_NOT_FORGET_TO_SHARE, GEOMETRY_SIMPLIFIED, GEOMETRIES_IGNORED_TEMPLATE DO_NOT_FORGET_TO_SHARE, GEOMETRY_SIMPLIFIED, GEOMETRIES_IGNORED_TEMPLATE, MISSING_GROUP_PERMISSION
from konova.views.base import BaseIndexView from konova.views.base import BaseIndexView, BaseIdentifierGeneratorView
class EmaIndexView(LoginRequiredMixin, BaseIndexView): class EmaIndexView(LoginRequiredMixin, BaseIndexView):
@ -96,23 +96,15 @@ def new_view(request: HttpRequest):
return render(request, template, context) return render(request, template, context)
@login_required class EmaIdentifierGeneratorView(LoginRequiredMixin, BaseIdentifierGeneratorView):
@conservation_office_group_required _MODEL_CLS = Ema
def new_id_view(request: HttpRequest):
""" JSON endpoint
Provides fetching of free identifiers for e.g. AJAX calls def dispatch(self, request, *args, **kwargs):
is_ets = request.user.is_ets_user()
""" if not is_ets:
tmp = Ema() messages.info(request, MISSING_GROUP_PERMISSION)
identifier = tmp.generate_new_identifier() return redirect(reverse("ema:index"))
while Ema.objects.filter(identifier=identifier).exists(): return super().dispatch(request, *args, **kwargs)
identifier = tmp.generate_new_identifier()
return JsonResponse(
data={
"gen_data": identifier
}
)
@login_required @login_required

View File

@ -5,7 +5,7 @@ Created on: 15.10.25
""" """
from abc import abstractmethod from abc import abstractmethod
from django.http import HttpRequest from django.http import HttpRequest, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.views import View from django.views import View
@ -45,3 +45,25 @@ class BaseIndexView(View):
@abstractmethod @abstractmethod
def _get_queryset(self): def _get_queryset(self):
raise NotImplementedError raise NotImplementedError
class BaseIdentifierGeneratorView(View):
_MODEL_CLS = None
class Meta:
abstract = True
def dispatch(self, request, *args, **kwargs):
request = check_user_is_in_any_group(request)
return super().dispatch(request, *args, **kwargs)
def get(self, request: HttpRequest):
tmp_obj = self._MODEL_CLS()
identifier = tmp_obj.generate_new_identifier()
while self._MODEL_CLS.objects.filter(identifier=identifier).exists():
identifier = tmp_obj.generate_new_identifier()
return JsonResponse(
data={
"gen_data": identifier
}
)