* refactors identifier generator view for ecoaccount * simplifies base identifier generator view even further
87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
"""
|
|
Author: Michel Peltriaux
|
|
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, 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):
|
|
""" Base class for index views
|
|
|
|
"""
|
|
_TEMPLATE: str = 'generic_index.html'
|
|
_TAB_TITLE: str = "CHANGE_ME"
|
|
_INDEX_TABLE_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):
|
|
qs = self._get_queryset()
|
|
table = self._INDEX_TABLE_CLS(
|
|
request=request,
|
|
queryset=qs
|
|
)
|
|
context = {
|
|
"table": table,
|
|
TAB_TITLE_IDENTIFIER: self._TAB_TITLE,
|
|
}
|
|
context = BaseContext(request, context).context
|
|
return render(request, self._TEMPLATE, context)
|
|
|
|
@abstractmethod
|
|
def _get_queryset(self):
|
|
raise NotImplementedError
|
|
|
|
|
|
class BaseIdentifierGeneratorView(View):
|
|
_MODEL_CLS = None
|
|
_REDIRECT_URL_NAME: str = "home"
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
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):
|
|
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
|
|
}
|
|
)
|
|
|
|
def _user_has_permission(self, user):
|
|
""" Should be overwritten in inheriting classes!
|
|
|
|
Args:
|
|
user ():
|
|
|
|
Returns:
|
|
|
|
"""
|
|
return user.is_default_user()
|