konova/konova/views/document.py
mpeltriaux f122778232 # Refactoring team views
* refactors team views
* split views.py into users.py and teams.py in users app
* refactors method headers for _user_has_permission()
* adds method and class comments and documentation to base view classes
2025-11-05 10:12:49 +01:00

107 lines
3.2 KiB
Python

"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 22.08.22
"""
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpRequest
from django.shortcuts import get_object_or_404
from konova.forms.modals import EditDocumentModalForm
from konova.utils.documents import get_document
from konova.utils.message_templates import DOCUMENT_ADDED, DOCUMENT_EDITED, DOCUMENT_REMOVED_TEMPLATE
from konova.views.base import BaseModalFormView, BaseView
class AbstractNewDocumentView(LoginRequiredMixin, BaseModalFormView):
_MODEL_CLS = None
_FORM_CLS = None
_REDIRECT_URL = None
_MSG_SUCCESS = DOCUMENT_ADDED
class Meta:
abstract = True
def _get_redirect_url(self, *args, **kwargs):
return super()._get_redirect_url(*args, **kwargs) + "#related_data"
def _user_has_permission(self, user, **kwargs):
return user.is_default_user()
class AbstractGetDocumentView(LoginRequiredMixin, BaseView):
_MODEL_CLS = None
_DOCUMENT_CLS = None
class Meta:
abstract = True
def get(self, request, id: str, doc_id: str):
""" Returns the document as downloadable file
Wraps the generic document fetcher function from konova.utils.
Args:
request (HttpRequest): The incoming request
id (str): The object id
doc_id (str): The document id
Returns:
"""
get_object_or_404(self._MODEL_CLS, id=id)
doc = get_object_or_404(self._DOCUMENT_CLS, id=doc_id)
return get_document(doc)
def post(self, request, id: str, doc_id: str):
return self.get(request, id, doc_id)
def _user_has_permission(self, user, **kwargs):
return user.is_default_user()
def _user_has_shared_access(self, user, **kwargs):
obj = kwargs.get("id", None)
assert obj is not None
obj = get_object_or_404(self._MODEL_CLS, id=obj)
return obj.is_shared_with(user)
class AbstractRemoveDocumentView(LoginRequiredMixin, BaseModalFormView):
_MODEL_CLS = None
_DOCUMENT_CLS = None
_FORM_CLS = None
_MSG_SUCCESS = DOCUMENT_REMOVED_TEMPLATE
class Meta:
abstract = True
def _get_redirect_url(self, *args, **kwargs):
return super()._get_redirect_url(*args, **kwargs) + "#related_data"
def _user_has_permission(self, user, **kwargs):
return user.is_default_user()
def _get_msg_success(self, *args, **kwargs):
doc_id = kwargs.get("doc_id", None)
assert doc_id is not None
doc = get_object_or_404(self._DOCUMENT_CLS, id=doc_id)
return self._MSG_SUCCESS.format(doc.title)
class AbstractEditDocumentView(LoginRequiredMixin, BaseModalFormView):
_MODEL_CLS = None
_DOCUMENT_CLS = None
_FORM_CLS = EditDocumentModalForm
_REDIRECT_URL = None
_MSG_SUCCESS = DOCUMENT_EDITED
class Meta:
abstract = True
def _user_has_permission(self, user, **kwargs):
return user.is_default_user()
def _get_redirect_url(self, *args, **kwargs):
return super()._get_redirect_url(*args, **kwargs) + "#related_data"