""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: michel.peltriaux@sgdnord.rlp.de Created on: 16.11.20 """ from django.contrib.auth import logout from django.contrib.auth.decorators import login_required from django.http import HttpRequest, FileResponse from django.shortcuts import redirect, render, get_object_or_404 from django.template.loader import render_to_string from django.utils import timezone from django.utils.translation import gettext_lazy as _ from codelist.models import KonovaCode from codelist.settings import CODELIST_COMPENSATION_ACTION_ID from compensation.models import Compensation, EcoAccount from intervention.models import Intervention from konova.contexts import BaseContext from konova.decorators import any_group_check from konova.forms import RemoveModalForm from konova.models import Deadline from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from news.models import ServerMessage from konova.settings import SSO_SERVER_BASE def logout_view(request: HttpRequest): """ Logout route for ending the session manually. Args: request (HttpRequest): The used request object Returns: A redirect """ logout(request) return redirect(SSO_SERVER_BASE) @login_required @any_group_check def home_view(request: HttpRequest): """ Renders the landing page Args: request (HttpRequest): The used request object Returns: A redirect """ template = "konova/home.html" now = timezone.now() user = request.user # Fetch the four newest active and published ServerMessages msgs = ServerMessage.objects.filter( is_active=True, publish_on__lte=now, unpublish_on__gte=now, ).order_by( "-publish_on" )[:3] # First fetch all valid objects (undeleted, only newest versions) interventions = Intervention.objects.filter( deleted=None, ) # Then fetch only user related ones user_interventions = interventions.filter( users__in=[user] ) # Repeat for other objects comps = Compensation.objects.filter( deleted=None, ) user_comps = comps.filter( intervention__users__in=[user] ) eco_accs = EcoAccount.objects.filter( deleted=None, ) user_ecco_accs = eco_accs.filter( users__in=[user] ) additional_context = { "msgs": msgs, "total_intervention_count": interventions.count(), "user_intervention_count": user_interventions.count(), "total_compensation_count": comps.count(), "user_compensation_count": user_comps.count(), "total_eco_count": eco_accs.count(), "user_eco_count": user_ecco_accs.count(), TAB_TITLE_IDENTIFIER: _("Home"), } context = BaseContext(request, additional_context).context return render(request, template, context) def get_404_view(request: HttpRequest, exception=None): """ Returns a 404 handling view Args: request (): exception (): Returns: """ context = BaseContext.context return render(request, "404.html", context, status=404) def get_500_view(request: HttpRequest): """ Returns a 404 handling view Args: request (): Returns: """ context = BaseContext.context return render(request, "500.html", context, status=500) @login_required def get_konova_code_action_children(request: HttpRequest): template = "konova/widgets/checkbox-tree-select-content.html" _id = request.GET.get("id", None) if _id == "#": # Return all! codes = KonovaCode.objects.filter( code_lists__in=[CODELIST_COMPENSATION_ACTION_ID], parent=None, ) else: codes = KonovaCode.objects.filter( code_lists__in=[CODELIST_COMPENSATION_ACTION_ID], parent__id=_id, ) context = { "codes": codes } return render(request, template, context)