""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: ksp-servicestelle@sgdnord.rlp.de Created on: 19.08.22 """ from django.http import HttpRequest, HttpResponse from django.shortcuts import get_object_or_404, render from django.urls import reverse from django.utils.translation import gettext_lazy as _ from compensation.models import EcoAccount from konova.contexts import BaseContext from konova.forms import SimpleGeomForm from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.utils.qrcode import QrCode from konova.views.report import AbstractPublicReportView class EcoAccountPublicReportView(AbstractPublicReportView): _TEMPLATE = "compensation/report/eco_account/report.html" def get(self, request: HttpRequest, id: str, *args, **kwargs) -> HttpResponse: """ Renders the public report view Args: request (HttpRequest): The incoming request id (str): The id of the intervention Returns: """ acc = get_object_or_404(EcoAccount, id=id) tab_title = _("Report {}").format(acc.identifier) # If intervention is not recorded (yet or currently) we need to render another template without any data if not acc.is_ready_for_publish(): template = "report/unavailable.html" context = { TAB_TITLE_IDENTIFIER: tab_title, } context = BaseContext(request, context).context return render(request, template, context) # Prepare data for map viewer geom_form = SimpleGeomForm( instance=acc ) parcels = acc.get_underlying_parcels() qrcode = QrCode( content=request.build_absolute_uri(reverse("compensation:acc:report", args=(id,))), size=10 ) qrcode_lanis = QrCode( content=acc.get_LANIS_link(), size=7 ) # Order states by surface before_states = acc.before_states.all().order_by("-surface").select_related("biotope_type__parent") after_states = acc.after_states.all().order_by("-surface").select_related("biotope_type__parent") actions = acc.actions.all().prefetch_related("action_type__parent") # Reduce amount of db fetched data to the bare minimum we need in the template (deduction's intervention id and identifier) deductions = acc.deductions.all() \ .distinct("intervention") \ .select_related("intervention") \ .values_list("intervention__id", "intervention__identifier", "intervention__title", named=True) context = { "obj": acc, "qrcode": { "img": qrcode.get_img(), "url": qrcode.get_content(), }, "qrcode_lanis": { "img": qrcode_lanis.get_img(), "url": qrcode_lanis.get_content(), }, "is_entry_shared": False, # disables action buttons during rendering "before_states": before_states, "after_states": after_states, "geom_form": geom_form, "parcels": parcels, "actions": actions, "deductions": deductions, "tables_scrollable": False, TAB_TITLE_IDENTIFIER: tab_title, } context = BaseContext(request, context).context return render(request, self._TEMPLATE, context)