WIP: 490_View_refactoring #491

Draft
mpeltriaux wants to merge 36 commits from 490_View_refactoring into master
5 changed files with 29 additions and 71 deletions
Showing only changes of commit a7b23935a1 - Show all commits

View File

@ -5,20 +5,12 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22 Created on: 19.08.22
""" """
from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin
from django.utils.decorators import method_decorator
from compensation.models import EcoAccount from compensation.models import EcoAccount
from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal
from konova.views.record import AbstractRecordView from konova.views.record import AbstractRecordView
class EcoAccountRecordView(AbstractRecordView): class EcoAccountRecordView(LoginRequiredMixin, AbstractRecordView):
model = EcoAccount _MODEL_CLS = EcoAccount
_REDIRECT_URL = "compensation:acc:detail"
@method_decorator(login_required_modal)
@method_decorator(login_required)
@method_decorator(conservation_office_group_required)
@method_decorator(shared_access_required(EcoAccount, "id"))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)

View File

@ -5,20 +5,12 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22 Created on: 19.08.22
""" """
from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin
from django.utils.decorators import method_decorator
from ema.models import Ema from ema.models import Ema
from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal
from konova.views.record import AbstractRecordView from konova.views.record import AbstractRecordView
class EmaRecordView(AbstractRecordView): class EmaRecordView(LoginRequiredMixin, AbstractRecordView):
model = Ema _MODEL_CLS = Ema
_REDIRECT_URL = "ema:detail"
@method_decorator(login_required_modal)
@method_decorator(login_required)
@method_decorator(conservation_office_group_required)
@method_decorator(shared_access_required(Ema, "id"))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)

View File

@ -5,19 +5,12 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22 Created on: 19.08.22
""" """
from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin
from django.utils.decorators import method_decorator
from intervention.models import Intervention from intervention.models import Intervention
from konova.decorators import conservation_office_group_required, shared_access_required
from konova.views.record import AbstractRecordView from konova.views.record import AbstractRecordView
class InterventionRecordView(AbstractRecordView): class InterventionRecordView(LoginRequiredMixin, AbstractRecordView):
model = Intervention _MODEL_CLS = Intervention
_REDIRECT_URL = "intervention:detail"
@method_decorator(login_required)
@method_decorator(conservation_office_group_required)
@method_decorator(shared_access_required(Intervention, "id"))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)

View File

@ -109,7 +109,7 @@ class BaseModalFormView(BaseView):
form.save() form.save()
messages.success( messages.success(
request, request,
self._MSG_SUCCESS self._get_msg_success(obj=obj)
) )
return HttpResponseRedirect(redirect_url) return HttpResponseRedirect(redirect_url)
else: else:
@ -124,6 +124,8 @@ class BaseModalFormView(BaseView):
assert obj is not None assert obj is not None
return reverse(self._REDIRECT_URL, args=(obj.id,)) return reverse(self._REDIRECT_URL, args=(obj.id,))
def _get_msg_success(self, *args, **kwargs):
return self._MSG_SUCCESS
class BaseIndexView(BaseView): class BaseIndexView(BaseView):
""" Base class for index views """ Base class for index views

View File

@ -5,46 +5,25 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22 Created on: 19.08.22
""" """
from django.shortcuts import get_object_or_404
from django.views import View
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from konova.forms.modals import RecordModalForm from konova.forms.modals import RecordModalForm
from konova.views.base import BaseModalFormView
class AbstractRecordView(View): class AbstractRecordView(BaseModalFormView):
model = None _MODEL_CLS = None
_FORM_CLS = RecordModalForm
_MSG_SUCCESS = None
def get(self, request, id: str): def _user_has_permission(self, user):
""" Renders a modal form for recording an object return user.is_ets_user()
Args: def _get_msg_success(self, *args, **kwargs):
request (HttpRequest): The incoming request obj = kwargs.get("obj")
id (str): The object's id assert obj is not None
Returns: if obj.is_recorded:
return _("{} recorded").format(obj.identifier)
""" else:
obj = get_object_or_404(self.model, id=id) return _("{} unrecorded").format(obj.identifier)
form = RecordModalForm(request.POST or None, instance=obj, request=request)
msg_succ = _("{} unrecorded") if obj.recorded else _("{} recorded")
msg_succ = msg_succ.format(obj.identifier)
return form.process_request(
request,
msg_succ,
msg_error=_("Errors found:")
)
def post(self, request, id: str):
"""
BaseModalForm provides the method process_request() which handles GET as well as POST requests. It was written
for easier handling of function based views. To support process_request() on class based views, the post()
call needs to be treated the same way as the get() call.
Args:
request (HttpRequest): The incoming request
id (str): Intervention's id
"""
return self.get(request, id)