""" 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.utils import timezone from django.utils.translation import gettext_lazy as _ 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 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" )[:4] # 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(), } context = BaseContext(request, additional_context).context return render(request, template, context) @login_required def remove_deadline_view(request: HttpRequest, id:str): """ Renders a modal form for removing a deadline object Args: request (HttpRequest): The incoming request id (str): The deadline id Returns: """ deadline = get_object_or_404(Deadline, id=id) form = RemoveModalForm(request.POST or None, instance=deadline, request=request) return form.process_request( request, msg_success=_("Deadline removed") ) 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)