2022-08-19 08:27:42 +02:00
|
|
|
"""
|
|
|
|
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
|
|
|
|
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.generators import generate_qr_code
|
|
|
|
|
|
|
|
|
|
|
|
def report_view(request: HttpRequest, id: str):
|
|
|
|
""" Renders the public report view
|
|
|
|
|
|
|
|
Args:
|
|
|
|
request (HttpRequest): The incoming request
|
|
|
|
id (str): The id of the intervention
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
"""
|
|
|
|
# Reuse the compensation report template since EcoAccounts are structurally identical
|
|
|
|
template = "compensation/report/eco_account/report.html"
|
|
|
|
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_url = request.build_absolute_uri(reverse("compensation:acc:report", args=(id,)))
|
|
|
|
qrcode_img = generate_qr_code(qrcode_url, 10)
|
|
|
|
qrcode_lanis_url = acc.get_LANIS_link()
|
|
|
|
qrcode_img_lanis = generate_qr_code(qrcode_lanis_url, 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_img,
|
|
|
|
"url": qrcode_url,
|
|
|
|
},
|
|
|
|
"qrcode_lanis": {
|
|
|
|
"img": qrcode_img_lanis,
|
|
|
|
"url": qrcode_lanis_url,
|
|
|
|
},
|
|
|
|
"has_access": False, # disables action buttons during rendering
|
|
|
|
"before_states": before_states,
|
|
|
|
"after_states": after_states,
|
|
|
|
"geom_form": geom_form,
|
|
|
|
"parcels": parcels,
|
|
|
|
"actions": actions,
|
|
|
|
"deductions": deductions,
|
2022-12-12 13:09:17 +01:00
|
|
|
"tables_scrollable": False,
|
2022-08-19 08:27:42 +02:00
|
|
|
TAB_TITLE_IDENTIFIER: tab_title,
|
|
|
|
}
|
|
|
|
context = BaseContext(request, context).context
|
|
|
|
return render(request, template, context)
|