diff --git a/compensation/forms/modals/deadline.py b/compensation/forms/modals/deadline.py index 12baebad..e34e6a59 100644 --- a/compensation/forms/modals/deadline.py +++ b/compensation/forms/modals/deadline.py @@ -6,10 +6,11 @@ Created on: 18.08.22 """ from django import forms +from django.shortcuts import get_object_or_404 from django.utils.translation import gettext_lazy as _ from konova.forms.modals import BaseModalForm -from konova.models import DeadlineType +from konova.models import DeadlineType, Deadline from konova.utils import validators from konova.utils.message_templates import DEADLINE_EDITED @@ -90,7 +91,8 @@ class EditDeadlineModalForm(NewDeadlineModalForm): deadline = None def __init__(self, *args, **kwargs): - self.deadline = kwargs.pop("deadline", None) + deadline_id = kwargs.pop("deadline_id", None) + self.deadline = get_object_or_404(Deadline, id=deadline_id) super().__init__(*args, **kwargs) self.form_title = _("Edit deadline") form_data = { diff --git a/compensation/views/compensation/deadline.py b/compensation/views/compensation/deadline.py index 7e2a9fb3..88786360 100644 --- a/compensation/views/compensation/deadline.py +++ b/compensation/views/compensation/deadline.py @@ -5,45 +5,21 @@ Contact: ksp-servicestelle@sgdnord.rlp.de Created on: 19.08.22 """ -from django.contrib.auth.decorators import login_required -from django.utils.decorators import method_decorator - from compensation.models import Compensation -from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.deadline import AbstractRemoveDeadlineView, AbstractEditDeadlineView, AbstractNewDeadlineView +_COMPENSATION_DETAIL_URL_NAME = "compensation:detail" class NewCompensationDeadlineView(AbstractNewDeadlineView): - model = Compensation - redirect_url = "compensation:detail" - - @method_decorator(login_required_modal) - @method_decorator(login_required) - @method_decorator(default_group_required) - @method_decorator(shared_access_required(Compensation, "id")) - def dispatch(self, request, *args, **kwargs): - return super().dispatch(request, *args, **kwargs) + _MODEL_CLS = Compensation + _REDIRECT_URL = _COMPENSATION_DETAIL_URL_NAME class EditCompensationDeadlineView(AbstractEditDeadlineView): - model = Compensation - redirect_url = "compensation:detail" - - @method_decorator(login_required_modal) - @method_decorator(login_required) - @method_decorator(default_group_required) - @method_decorator(shared_access_required(Compensation, "id")) - def dispatch(self, request, *args, **kwargs): - return super().dispatch(request, *args, **kwargs) + _MODEL_CLS = Compensation + _REDIRECT_URL = _COMPENSATION_DETAIL_URL_NAME class RemoveCompensationDeadlineView(AbstractRemoveDeadlineView): - model = Compensation - redirect_url = "compensation:detail" - - @method_decorator(login_required_modal) - @method_decorator(login_required) - @method_decorator(default_group_required) - @method_decorator(shared_access_required(Compensation, "id")) - def dispatch(self, request, *args, **kwargs): - return super().dispatch(request, *args, **kwargs) + _MODEL_CLS = Compensation + _REDIRECT_URL = _COMPENSATION_DETAIL_URL_NAME diff --git a/compensation/views/eco_account/deadline.py b/compensation/views/eco_account/deadline.py index c49dba35..ccc66717 100644 --- a/compensation/views/eco_account/deadline.py +++ b/compensation/views/eco_account/deadline.py @@ -5,45 +5,22 @@ Contact: ksp-servicestelle@sgdnord.rlp.de Created on: 19.08.22 """ -from django.contrib.auth.decorators import login_required -from django.utils.decorators import method_decorator - from compensation.models import EcoAccount -from konova.decorators import shared_access_required, default_group_required, login_required_modal from konova.views.deadline import AbstractNewDeadlineView, AbstractEditDeadlineView, AbstractRemoveDeadlineView +_ECO_ACCOUNT_DETAIL_URL_NAME = "compensation:acc:detail" class NewEcoAccountDeadlineView(AbstractNewDeadlineView): - model = EcoAccount - redirect_url = "compensation:acc:detail" - - @method_decorator(login_required_modal) - @method_decorator(login_required) - @method_decorator(default_group_required) - @method_decorator(shared_access_required(EcoAccount, "id")) - def dispatch(self, request, *args, **kwargs): - return super().dispatch(request, *args, **kwargs) + _MODEL_CLS = EcoAccount + _REDIRECT_URL = _ECO_ACCOUNT_DETAIL_URL_NAME class EditEcoAccountDeadlineView(AbstractEditDeadlineView): - model = EcoAccount - redirect_url = "compensation:acc:detail" - - @method_decorator(login_required_modal) - @method_decorator(login_required) - @method_decorator(default_group_required) - @method_decorator(shared_access_required(EcoAccount, "id")) - def dispatch(self, request, *args, **kwargs): - return super().dispatch(request, *args, **kwargs) + _MODEL_CLS = EcoAccount + _REDIRECT_URL = _ECO_ACCOUNT_DETAIL_URL_NAME class RemoveEcoAccountDeadlineView(AbstractRemoveDeadlineView): - model = EcoAccount - redirect_url = "compensation:acc:detail" + _MODEL_CLS = EcoAccount + _REDIRECT_URL = _ECO_ACCOUNT_DETAIL_URL_NAME - @method_decorator(login_required_modal) - @method_decorator(login_required) - @method_decorator(default_group_required) - @method_decorator(shared_access_required(EcoAccount, "id")) - def dispatch(self, request, *args, **kwargs): - return super().dispatch(request, *args, **kwargs) diff --git a/ema/views/deadline.py b/ema/views/deadline.py index d760bdab..475d1ffa 100644 --- a/ema/views/deadline.py +++ b/ema/views/deadline.py @@ -5,46 +5,30 @@ Contact: ksp-servicestelle@sgdnord.rlp.de Created on: 19.08.22 """ -from django.contrib.auth.decorators import login_required -from django.utils.decorators import method_decorator - from ema.models import Ema -from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal from konova.views.deadline import AbstractNewDeadlineView, AbstractRemoveDeadlineView, AbstractEditDeadlineView +_EMA_DETAIL_URL_NAME = "ema:detail" class NewEmaDeadlineView(AbstractNewDeadlineView): - model = Ema - redirect_url = "ema:detail" + _MODEL_CLS = Ema + _REDIRECT_URL = _EMA_DETAIL_URL_NAME - @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) + def _user_has_permission(self, user): + return user.is_ets_user() class EditEmaDeadlineView(AbstractEditDeadlineView): - model = Ema - redirect_url = "ema:detail" + _MODEL_CLS = Ema + _REDIRECT_URL = _EMA_DETAIL_URL_NAME - @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) + def _user_has_permission(self, user): + return user.is_ets_user() class RemoveEmaDeadlineView(AbstractRemoveDeadlineView): - model = 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) + _MODEL_CLS = Ema + _REDIRECT_URL = _EMA_DETAIL_URL_NAME + def _user_has_permission(self, user): + return user.is_ets_user() diff --git a/konova/forms/modals/remove_form.py b/konova/forms/modals/remove_form.py index f09af99a..d89d2e52 100644 --- a/konova/forms/modals/remove_form.py +++ b/konova/forms/modals/remove_form.py @@ -6,10 +6,11 @@ Created on: 15.08.22 """ from django import forms +from django.shortcuts import get_object_or_404 from django.utils.translation import gettext_lazy as _ from konova.forms.modals.base_form import BaseModalForm -from konova.models import BaseObject +from konova.models import BaseObject, Deadline class RemoveModalForm(BaseModalForm): @@ -51,8 +52,8 @@ class RemoveDeadlineModalForm(RemoveModalForm): deadline = None def __init__(self, *args, **kwargs): - deadline = kwargs.pop("deadline", None) - self.deadline = deadline + deadline_id = kwargs.pop("deadline_id", None) + self.deadline = get_object_or_404(Deadline, id=deadline_id) super().__init__(*args, **kwargs) def save(self): diff --git a/konova/views/deadline.py b/konova/views/deadline.py index 4350073d..382c5f77 100644 --- a/konova/views/deadline.py +++ b/konova/views/deadline.py @@ -5,102 +5,57 @@ Contact: ksp-servicestelle@sgdnord.rlp.de Created on: 22.08.22 """ -from django.shortcuts import get_object_or_404 -from django.urls import reverse -from django.views import View +from django.contrib.auth.mixins import LoginRequiredMixin from compensation.forms.modals.deadline import NewDeadlineModalForm, EditDeadlineModalForm from konova.forms.modals import RemoveDeadlineModalForm -from konova.models import Deadline from konova.utils.message_templates import DEADLINE_ADDED, DEADLINE_EDITED, DEADLINE_REMOVED +from konova.views.base import BaseModalFormView -class AbstractNewDeadlineView(View): - model = None - redirect_url = None +class AbstractNewDeadlineView(LoginRequiredMixin, BaseModalFormView): + _MODEL_CLS = None + _FORM_CLS = NewDeadlineModalForm + _REDIRECT_URL = None + _MSG_SUCCESS = DEADLINE_ADDED class Meta: abstract = True - def get(self, request, id: str): - """ Renders a form for adding new deadlines + def _get_redirect_url(self, *args, **kwargs): + return super()._get_redirect_url(*args, **kwargs) + "#related_data" - Args: - request (HttpRequest): The incoming request - id (str): The account's id to which the new state will be related - - Returns: - - """ - obj = get_object_or_404(self.model, id=id) - form = NewDeadlineModalForm(request.POST or None, instance=obj, request=request) - return form.process_request( - request, - msg_success=DEADLINE_ADDED, - redirect_url=reverse(self.redirect_url, args=(id,)) + "#related_data" - ) - - def post(self, request, id: str): - return self.get(request, id) + def _user_has_permission(self, user): + return user.is_default_user() -class AbstractEditDeadlineView(View): - model = None - redirect_url = None +class AbstractEditDeadlineView(LoginRequiredMixin, BaseModalFormView): + _MODEL_CLS = None + _FORM_CLS = EditDeadlineModalForm + _REDIRECT_URL = None + _MSG_SUCCESS = DEADLINE_EDITED class Meta: abstract = True - def get(self, request, id: str, deadline_id: str): - """ Renders a form for editing deadlines + def _get_redirect_url(self, *args, **kwargs): + return super()._get_redirect_url(*args, **kwargs) + "#related_data" - Args: - request (HttpRequest): The incoming request - id (str): The compensation's id - deadline_id (str): The deadline's id - - Returns: - - """ - obj = get_object_or_404(self.model, id=id) - deadline = get_object_or_404(Deadline, id=deadline_id) - form = EditDeadlineModalForm(request.POST or None, instance=obj, deadline=deadline, request=request) - return form.process_request( - request, - msg_success=DEADLINE_EDITED, - redirect_url=reverse(self.redirect_url, args=(id,)) + "#related_data" - ) - - def post(self, request, id: str, deadline_id: str): - return self.get(request, id, deadline_id) + def _user_has_permission(self, user): + return user.is_default_user() -class AbstractRemoveDeadlineView(View): - model = None - redirect_url = None +class AbstractRemoveDeadlineView(LoginRequiredMixin, BaseModalFormView): + _MODEL_CLS = None + _FORM_CLS = RemoveDeadlineModalForm + _REDIRECT_URL = None + _MSG_SUCCESS = DEADLINE_REMOVED class Meta: abstract = True - def get(self, request, id: str, deadline_id: str): - """ Renders a form for removing deadlines + def _get_redirect_url(self, *args, **kwargs): + return super()._get_redirect_url(*args, **kwargs) + "#related_data" - Args: - request (HttpRequest): The incoming request - id (str): The compensation's id - deadline_id (str): The deadline's id - - Returns: - - """ - obj = get_object_or_404(self.model, id=id) - deadline = get_object_or_404(Deadline, id=deadline_id) - form = RemoveDeadlineModalForm(request.POST or None, instance=obj, deadline=deadline, request=request) - return form.process_request( - request, - msg_success=DEADLINE_REMOVED, - redirect_url=reverse(self.redirect_url, args=(id,)) + "#related_data" - ) - - def post(self, request, id: str, deadline_id: str): - return self.get(request, id, deadline_id) + def _user_has_permission(self, user): + return user.is_default_user()