""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: ksp-servicestelle@sgdnord.rlp.de Created on: 19.08.22 """ from django.contrib.auth.mixins import LoginRequiredMixin from django.shortcuts import get_object_or_404 from django.utils.translation import gettext_lazy as _ from ema.forms import NewEmaForm, EditEmaForm from ema.models import Ema from ema.tables import EmaTable from konova.views.identifier import AbstractIdentifierGeneratorView from konova.views.form import AbstractNewGeometryFormView, AbstractEditGeometryFormView from konova.views.index import AbstractIndexView from konova.views.detail import BaseDetailView from konova.views.remove import BaseRemoveModalFormView class EmaIndexView(LoginRequiredMixin, AbstractIndexView): _TAB_TITLE = _("EMAs - Overview") _INDEX_TABLE_CLS = EmaTable def _get_queryset(self): qs = Ema.objects.filter( deleted=None, ).order_by( "-modified__timestamp" ) return qs class NewEmaFormView(AbstractNewGeometryFormView): _FORM_CLS = NewEmaForm _MODEL_CLS = Ema _TEMPLATE = "ema/form/view.html" _TAB_TITLE = _("New EMA") _REDIRECT_URL = "ema:detail" def _user_has_permission(self, user, **kwargs): # User has to be an ets user return user.is_ets_user() class EditEmaFormView(AbstractEditGeometryFormView): _MODEL_CLS = Ema _FORM_CLS = EditEmaForm _TEMPLATE = "ema/form/view.html" _REDIRECT_URL = "ema:detail" _TAB_TITLE = _("Edit {}") def _user_has_permission(self, user, **kwargs): # User has to be an ets user return user.is_ets_user() class EmaIdentifierGeneratorView(LoginRequiredMixin, AbstractIdentifierGeneratorView): _MODEL_CLS = Ema _REDIRECT_URL = "ema:index" def _user_has_permission(self, user, **kwargs): return user.is_ets_user() class EmaDetailView(BaseDetailView): _MODEL_CLS = Ema _TEMPLATE = "ema/detail/view.html" def _get_object(self, id: str): """ Fetch object for detail view Args: id (str): The record's id' Returns: """ ema = get_object_or_404(Ema, id=id, deleted=None) return ema def _get_detail_context(self, obj: Ema): """ Generate object specific detail context for view Args: obj (): The record Returns: """ # Order states according to surface before_states = obj.before_states.all().order_by("-surface") after_states = obj.after_states.all().order_by("-surface") # Precalculate logical errors between before- and after-states # Sum() returns None in case of no states, so we catch that and replace it with 0 for easier handling sum_before_states = obj.get_surface_before_states() sum_after_states = obj.get_surface_after_states() diff_states = abs(sum_before_states - sum_after_states) context = { "before_states": before_states, "after_states": after_states, "sum_before_states": sum_before_states, "sum_after_states": sum_after_states, "diff_states": diff_states, "has_finished_deadlines": obj.get_finished_deadlines().exists(), } return context class RemoveEmaView(LoginRequiredMixin, BaseRemoveModalFormView): _MODEL_CLS = Ema _REDIRECT_URL = "ema:index" def _user_has_permission(self, user, **kwargs): return user.is_ets_user()