97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
"""
|
|
Author: Michel Peltriaux
|
|
Created on: 14.12.25
|
|
|
|
"""
|
|
from django.contrib import messages
|
|
from django.http import HttpRequest, HttpResponse
|
|
from django.shortcuts import render, get_object_or_404
|
|
|
|
from compensation.models import EcoAccount
|
|
from konova.contexts import BaseContext
|
|
from konova.forms import SimpleGeomForm
|
|
from konova.settings import ETS_GROUP, ZB_GROUP, DEFAULT_GROUP
|
|
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
|
from konova.utils.message_templates import DO_NOT_FORGET_TO_SHARE
|
|
from konova.views.detail import AbstractDetailView
|
|
|
|
|
|
class DetailEcoAccountView(AbstractDetailView):
|
|
_TEMPLATE = "compensation/detail/eco_account/view.html"
|
|
|
|
def get(self, request: HttpRequest, id: str, *args, **kwargs) -> HttpResponse:
|
|
""" Renders a detail view for a compensation
|
|
|
|
Args:
|
|
request (HttpRequest): The incoming request
|
|
id (str): The compensation's id
|
|
|
|
Returns:
|
|
|
|
"""
|
|
acc = get_object_or_404(
|
|
EcoAccount.objects.prefetch_related(
|
|
"deadlines",
|
|
).select_related(
|
|
'geometry',
|
|
'responsible',
|
|
),
|
|
id=id,
|
|
deleted=None,
|
|
)
|
|
geom_form = SimpleGeomForm(instance=acc)
|
|
parcels = acc.get_underlying_parcels()
|
|
_user = request.user
|
|
is_data_shared = acc.is_shared_with(_user)
|
|
|
|
# Order states according to surface
|
|
before_states = acc.before_states.order_by("-surface")
|
|
after_states = acc.after_states.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 = acc.get_surface_before_states()
|
|
sum_after_states = acc.get_surface_after_states()
|
|
diff_states = abs(sum_before_states - sum_after_states)
|
|
# Calculate rest of available surface for deductions
|
|
available_total = acc.deductable_rest
|
|
available_relative = acc.get_deductable_rest_relative()
|
|
|
|
# Prefetch related data to decrease the amount of db connections
|
|
deductions = acc.deductions.filter(
|
|
intervention__deleted=None,
|
|
)
|
|
actions = acc.actions.all()
|
|
|
|
request = acc.set_status_messages(request)
|
|
|
|
requesting_user_is_only_shared_user = acc.is_only_shared_with(_user)
|
|
if requesting_user_is_only_shared_user:
|
|
messages.info(
|
|
request,
|
|
DO_NOT_FORGET_TO_SHARE
|
|
)
|
|
|
|
context = {
|
|
"obj": acc,
|
|
"geom_form": geom_form,
|
|
"parcels": parcels,
|
|
"is_entry_shared": is_data_shared,
|
|
"before_states": before_states,
|
|
"after_states": after_states,
|
|
"sum_before_states": sum_before_states,
|
|
"sum_after_states": sum_after_states,
|
|
"diff_states": diff_states,
|
|
"available": available_relative,
|
|
"available_total": available_total,
|
|
"is_default_member": _user.in_group(DEFAULT_GROUP),
|
|
"is_zb_member": _user.in_group(ZB_GROUP),
|
|
"is_ets_member": _user.in_group(ETS_GROUP),
|
|
"LANIS_LINK": acc.get_LANIS_link(),
|
|
"deductions": deductions,
|
|
"actions": actions,
|
|
TAB_TITLE_IDENTIFIER: f"{acc.identifier} - {acc.title}",
|
|
"has_finished_deadlines": acc.get_finished_deadlines().exists(),
|
|
}
|
|
context = BaseContext(request, context).context
|
|
return render(request, self._TEMPLATE, context) |