""" 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.base import BaseIndexView, BaseIdentifierGeneratorView, BaseNewSpatialLocatedObjectFormView, \ BaseEditSpatialLocatedObjectFormView from konova.views.detail import BaseDetailView from konova.views.remove import BaseRemoveModalFormView class EmaIndexView(LoginRequiredMixin, BaseIndexView): _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(BaseNewSpatialLocatedObjectFormView): _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(BaseEditSpatialLocatedObjectFormView): _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, BaseIdentifierGeneratorView): _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()