WIP: 490_View_refactoring #491

Draft
mpeltriaux wants to merge 36 commits from 490_View_refactoring into master
6 changed files with 64 additions and 169 deletions
Showing only changes of commit 6056a8882d - Show all commits

View File

@ -6,10 +6,11 @@ Created on: 18.08.22
""" """
from django import forms from django import forms
from django.shortcuts import get_object_or_404
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from konova.forms.modals import BaseModalForm 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 import validators
from konova.utils.message_templates import DEADLINE_EDITED from konova.utils.message_templates import DEADLINE_EDITED
@ -90,7 +91,8 @@ class EditDeadlineModalForm(NewDeadlineModalForm):
deadline = None deadline = None
def __init__(self, *args, **kwargs): 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) super().__init__(*args, **kwargs)
self.form_title = _("Edit deadline") self.form_title = _("Edit deadline")
form_data = { form_data = {

View File

@ -5,45 +5,21 @@ 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.utils.decorators import method_decorator
from compensation.models import Compensation 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 from konova.views.deadline import AbstractRemoveDeadlineView, AbstractEditDeadlineView, AbstractNewDeadlineView
_COMPENSATION_DETAIL_URL_NAME = "compensation:detail"
class NewCompensationDeadlineView(AbstractNewDeadlineView): class NewCompensationDeadlineView(AbstractNewDeadlineView):
model = Compensation _MODEL_CLS = Compensation
redirect_url = "compensation:detail" _REDIRECT_URL = _COMPENSATION_DETAIL_URL_NAME
@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)
class EditCompensationDeadlineView(AbstractEditDeadlineView): class EditCompensationDeadlineView(AbstractEditDeadlineView):
model = Compensation _MODEL_CLS = Compensation
redirect_url = "compensation:detail" _REDIRECT_URL = _COMPENSATION_DETAIL_URL_NAME
@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)
class RemoveCompensationDeadlineView(AbstractRemoveDeadlineView): class RemoveCompensationDeadlineView(AbstractRemoveDeadlineView):
model = Compensation _MODEL_CLS = Compensation
redirect_url = "compensation:detail" _REDIRECT_URL = _COMPENSATION_DETAIL_URL_NAME
@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)

View File

@ -5,45 +5,22 @@ 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.utils.decorators import method_decorator
from compensation.models import EcoAccount 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 from konova.views.deadline import AbstractNewDeadlineView, AbstractEditDeadlineView, AbstractRemoveDeadlineView
_ECO_ACCOUNT_DETAIL_URL_NAME = "compensation:acc:detail"
class NewEcoAccountDeadlineView(AbstractNewDeadlineView): class NewEcoAccountDeadlineView(AbstractNewDeadlineView):
model = EcoAccount _MODEL_CLS = EcoAccount
redirect_url = "compensation:acc:detail" _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)
class EditEcoAccountDeadlineView(AbstractEditDeadlineView): class EditEcoAccountDeadlineView(AbstractEditDeadlineView):
model = EcoAccount _MODEL_CLS = EcoAccount
redirect_url = "compensation:acc:detail" _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)
class RemoveEcoAccountDeadlineView(AbstractRemoveDeadlineView): class RemoveEcoAccountDeadlineView(AbstractRemoveDeadlineView):
model = EcoAccount _MODEL_CLS = EcoAccount
redirect_url = "compensation:acc:detail" _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)

View File

@ -5,46 +5,30 @@ 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.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.deadline import AbstractNewDeadlineView, AbstractRemoveDeadlineView, AbstractEditDeadlineView from konova.views.deadline import AbstractNewDeadlineView, AbstractRemoveDeadlineView, AbstractEditDeadlineView
_EMA_DETAIL_URL_NAME = "ema:detail"
class NewEmaDeadlineView(AbstractNewDeadlineView): class NewEmaDeadlineView(AbstractNewDeadlineView):
model = Ema _MODEL_CLS = Ema
redirect_url = "ema:detail" _REDIRECT_URL = _EMA_DETAIL_URL_NAME
@method_decorator(login_required_modal) def _user_has_permission(self, user):
@method_decorator(login_required) return user.is_ets_user()
@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)
class EditEmaDeadlineView(AbstractEditDeadlineView): class EditEmaDeadlineView(AbstractEditDeadlineView):
model = Ema _MODEL_CLS = Ema
redirect_url = "ema:detail" _REDIRECT_URL = _EMA_DETAIL_URL_NAME
@method_decorator(login_required_modal) def _user_has_permission(self, user):
@method_decorator(login_required) return user.is_ets_user()
@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)
class RemoveEmaDeadlineView(AbstractRemoveDeadlineView): class RemoveEmaDeadlineView(AbstractRemoveDeadlineView):
model = Ema _MODEL_CLS = Ema
redirect_url = "ema:detail" _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()

View File

@ -6,10 +6,11 @@ Created on: 15.08.22
""" """
from django import forms from django import forms
from django.shortcuts import get_object_or_404
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from konova.forms.modals.base_form import BaseModalForm from konova.forms.modals.base_form import BaseModalForm
from konova.models import BaseObject from konova.models import BaseObject, Deadline
class RemoveModalForm(BaseModalForm): class RemoveModalForm(BaseModalForm):
@ -51,8 +52,8 @@ class RemoveDeadlineModalForm(RemoveModalForm):
deadline = None deadline = None
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
deadline = kwargs.pop("deadline", None) deadline_id = kwargs.pop("deadline_id", None)
self.deadline = deadline self.deadline = get_object_or_404(Deadline, id=deadline_id)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def save(self): def save(self):

View File

@ -5,102 +5,57 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 22.08.22 Created on: 22.08.22
""" """
from django.shortcuts import get_object_or_404 from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse
from django.views import View
from compensation.forms.modals.deadline import NewDeadlineModalForm, EditDeadlineModalForm from compensation.forms.modals.deadline import NewDeadlineModalForm, EditDeadlineModalForm
from konova.forms.modals import RemoveDeadlineModalForm 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.utils.message_templates import DEADLINE_ADDED, DEADLINE_EDITED, DEADLINE_REMOVED
from konova.views.base import BaseModalFormView
class AbstractNewDeadlineView(View): class AbstractNewDeadlineView(LoginRequiredMixin, BaseModalFormView):
model = None _MODEL_CLS = None
redirect_url = None _FORM_CLS = NewDeadlineModalForm
_REDIRECT_URL = None
_MSG_SUCCESS = DEADLINE_ADDED
class Meta: class Meta:
abstract = True abstract = True
def get(self, request, id: str): def _get_redirect_url(self, *args, **kwargs):
""" Renders a form for adding new deadlines return super()._get_redirect_url(*args, **kwargs) + "#related_data"
Args: def _user_has_permission(self, user):
request (HttpRequest): The incoming request return user.is_default_user()
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)
class AbstractEditDeadlineView(View): class AbstractEditDeadlineView(LoginRequiredMixin, BaseModalFormView):
model = None _MODEL_CLS = None
redirect_url = None _FORM_CLS = EditDeadlineModalForm
_REDIRECT_URL = None
_MSG_SUCCESS = DEADLINE_EDITED
class Meta: class Meta:
abstract = True abstract = True
def get(self, request, id: str, deadline_id: str): def _get_redirect_url(self, *args, **kwargs):
""" Renders a form for editing deadlines return super()._get_redirect_url(*args, **kwargs) + "#related_data"
Args: def _user_has_permission(self, user):
request (HttpRequest): The incoming request return user.is_default_user()
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)
class AbstractRemoveDeadlineView(View): class AbstractRemoveDeadlineView(LoginRequiredMixin, BaseModalFormView):
model = None _MODEL_CLS = None
redirect_url = None _FORM_CLS = RemoveDeadlineModalForm
_REDIRECT_URL = None
_MSG_SUCCESS = DEADLINE_REMOVED
class Meta: class Meta:
abstract = True abstract = True
def get(self, request, id: str, deadline_id: str): def _get_redirect_url(self, *args, **kwargs):
""" Renders a form for removing deadlines return super()._get_redirect_url(*args, **kwargs) + "#related_data"
Args: def _user_has_permission(self, user):
request (HttpRequest): The incoming request return user.is_default_user()
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)