# Resubmission view refactoring

* refactors resubmission view for eiv, kom, oek, ema
* removes unused attributes on BaseModalFormView
This commit is contained in:
mpeltriaux 2025-10-21 17:03:12 +02:00
parent 1fc1b533cd
commit 3a9c4e13f6
12 changed files with 69 additions and 106 deletions

View File

@ -0,0 +1,15 @@
"""
Author: Michel Peltriaux
Created on: 21.10.25
"""
from compensation.models import Compensation, EcoAccount
from konova.forms.modals import ResubmissionModalForm
class CompensationResubmissionModalForm(ResubmissionModalForm):
_MODEL_CLS = Compensation
class EcoAccountResubmissionModalForm(ResubmissionModalForm):
_MODEL_CLS = EcoAccount

View File

@ -5,22 +5,12 @@ 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.forms.modals.resubmission import CompensationResubmissionModalForm
from compensation.models import Compensation
from konova.decorators import shared_access_required, default_group_required, login_required_modal
from konova.views.resubmission import AbstractResubmissionView
class CompensationResubmissionView(AbstractResubmissionView):
model = Compensation
redirect_url_base = "compensation:detail"
form_action_url_base = "compensation:resubmission-create"
@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
_FORM_CLS = CompensationResubmissionModalForm
_REDIRECT_URL = "compensation:detail"

View File

@ -5,22 +5,12 @@ 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.forms.modals.resubmission import EcoAccountResubmissionModalForm
from compensation.models import EcoAccount
from konova.decorators import shared_access_required, default_group_required, login_required_modal
from konova.views.resubmission import AbstractResubmissionView
class EcoAccountResubmissionView(AbstractResubmissionView):
model = EcoAccount
redirect_url_base = "compensation:acc:detail"
form_action_url_base = "compensation:acc:resubmission-create"
@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
_FORM_CLS = EcoAccountResubmissionModalForm
_REDIRECT_URL = "compensation:acc:detail"

View File

@ -15,7 +15,8 @@ from compensation.forms.compensation import AbstractCompensationForm
from ema.models import Ema, EmaDocument
from intervention.models import Responsibility, Handler
from konova.forms import SimpleGeomForm
from konova.forms.modals import NewDocumentModalForm, EditDocumentModalForm, RemoveDocumentModalForm
from konova.forms.modals import NewDocumentModalForm, EditDocumentModalForm, RemoveDocumentModalForm, \
ResubmissionModalForm
from user.models import UserActionLogEntry
@ -176,4 +177,7 @@ class EditEmaDocumentModalForm(EditDocumentModalForm):
_DOCUMENT_CLS = EmaDocument
class RemoveEmaDocumentModalForm(RemoveDocumentModalForm):
_DOCUMENT_CLS = EmaDocument
_DOCUMENT_CLS = EmaDocument
class EmaResubmissionModalForm(ResubmissionModalForm):
_MODEL_CLS = Ema

View File

@ -5,22 +5,16 @@ 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.forms import EmaResubmissionModalForm
from ema.models import Ema
from konova.decorators import shared_access_required, conservation_office_group_required, login_required_modal
from konova.views.resubmission import AbstractResubmissionView
class EmaResubmissionView(AbstractResubmissionView):
model = Ema
redirect_url_base = "ema:detail"
form_action_url_base = "ema:resubmission-create"
_MODEL_CLS = Ema
_FORM_CLS = EmaResubmissionModalForm
_REDIRECT_URL = "ema:detail"
action_url = "ema:resubmission-create"
@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

@ -0,0 +1,11 @@
"""
Author: Michel Peltriaux
Created on: 21.10.25
"""
from intervention.models import Intervention
from konova.forms.modals import ResubmissionModalForm
class InterventionResubmissionModalForm(ResubmissionModalForm):
_MODEL_CLS = Intervention

View File

@ -10,7 +10,6 @@ from django.utils.translation import gettext_lazy as _
from intervention.forms.modals.check import CheckModalForm
from intervention.models import Intervention
from konova.utils.message_templates import INTERVENTION_INVALID
from konova.views.base import BaseModalFormView
@ -18,7 +17,6 @@ class InterventionCheckView(LoginRequiredMixin, BaseModalFormView):
_MODEL_CLS = Intervention
_FORM_CLS = CheckModalForm
_MSG_SUCCESS = _("Check performed")
_MSG_ERROR = INTERVENTION_INVALID
_REDIRECT_URL = "intervention:detail"
def _user_has_permission(self, user):

View File

@ -5,22 +5,12 @@ 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 intervention.forms.modals.resubmission import InterventionResubmissionModalForm
from intervention.models import Intervention
from konova.decorators import default_group_required, shared_access_required, login_required_modal
from konova.views.resubmission import AbstractResubmissionView
class InterventionResubmissionView(AbstractResubmissionView):
model = Intervention
redirect_url_base = "intervention:detail"
form_action_url_base = "intervention:resubmission-create"
@method_decorator(login_required_modal)
@method_decorator(login_required)
@method_decorator(default_group_required)
@method_decorator(shared_access_required(Intervention, "id"))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
_MODEL_CLS = Intervention
_FORM_CLS = InterventionResubmissionModalForm
_REDIRECT_URL = "intervention:detail"

View File

@ -10,7 +10,6 @@ from abc import abstractmethod
from django import forms
from django.utils.translation import gettext_lazy as _
from compensation.models import EcoAccount
from konova.models import BaseObject

View File

@ -98,4 +98,7 @@ DATA_CHECKED_PREVIOUSLY_TEMPLATE = _("Data has changed since last check on {} by
DATA_IS_UNCHECKED = _("Current data not checked yet")
# API TOKEN SETTINGS
NEW_API_TOKEN_GENERATED = _("New token generated. Administrators need to validate.")
NEW_API_TOKEN_GENERATED = _("New token generated. Administrators need to validate.")
# RESUBMISSION
NEW_RESUBMISSION_CREATED = _("Resubmission set")

View File

@ -44,6 +44,7 @@ class BaseView(View):
return super().dispatch(request, *args, **kwargs)
@abstractmethod
def _user_has_permission(self, user):
""" Has to be implemented properly by inheriting classes
@ -53,8 +54,9 @@ class BaseView(View):
Returns:
"""
return False
raise NotImplementedError("User permission not checked!")
@abstractmethod
def _user_has_shared_access(self, user, **kwargs):
""" Has to be implemented properly by inheriting classes
@ -64,7 +66,7 @@ class BaseView(View):
Returns:
"""
return False
raise NotImplementedError("Shared access not checked!")
def _get_redirect_url(self, *args, **kwargs):
return self._REDIRECT_URL
@ -76,9 +78,7 @@ class BaseModalFormView(BaseView):
_TEMPLATE = "modal/modal_form.html"
_MODEL_CLS = None
_FORM_CLS = None
_TAB_TITLE = None
_MSG_SUCCESS = None
_MSG_ERROR = None
class Meta:
abstract = True

View File

@ -5,51 +5,20 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22
"""
from django.shortcuts import get_object_or_404
from django.urls import reverse
from django.views import View
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.mixins import LoginRequiredMixin
from konova.forms.modals import ResubmissionModalForm
from konova.utils.message_templates import NEW_RESUBMISSION_CREATED
from konova.views.base import BaseModalFormView
class AbstractResubmissionView(View):
model = None
form_action_url_base = None
redirect_url_base = None
class AbstractResubmissionView(LoginRequiredMixin, BaseModalFormView):
_MODEL_CLS = None
_FORM_CLS = None
_REDIRECT_URL = None
_MSG_SUCCESS = NEW_RESUBMISSION_CREATED
class Meta:
abstract = True
def get(self, request, id: str):
""" Renders resubmission form for an object
Args:
request (HttpRequest): The incoming request
id (str): Object's id
Returns:
"""
obj = get_object_or_404(self.model, id=id)
form = ResubmissionModalForm(request.POST or None, instance=obj, request=request)
form.action_url = reverse(self.form_action_url_base, args=(id,))
return form.process_request(
request,
msg_success=_("Resubmission set"),
redirect_url=reverse(self.redirect_url_base, args=(id,))
)
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)
def _user_has_permission(self, user):
return user.is_default_user()