#26 Annual conservation reports

* adds index form for selecting timespan and office of interest
* adds timespan support for TimespanReport
* fixes naive datetime issues
* fixes missing error message css tag
* adds/updates translations
This commit is contained in:
2021-10-20 13:23:35 +02:00
parent d5b6c7f098
commit 6b839b7f60
13 changed files with 247 additions and 91 deletions

View File

@@ -1,11 +1,16 @@
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpRequest
from django.shortcuts import render, get_object_or_404
from django.shortcuts import render, redirect
from django.utils import timezone
from analysis.forms import TimespanReportForm
from analysis.utils.report import TimespanReport
from codelist.models import KonovaCode
from konova.contexts import BaseContext
from konova.decorators import conservation_office_group_required
from konova.utils.message_templates import FORM_INVALID, PARAMS_INVALID
@login_required
@@ -20,11 +25,26 @@ def index_reports_view(request: HttpRequest):
"""
template = "analysis/reports/index.html"
context = {}
form = TimespanReportForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
redirect_url = form.save()
return redirect(redirect_url)
else:
messages.error(
request,
FORM_INVALID,
extra_tags="danger",
)
context = {
"form": form
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
@conservation_office_group_required
def detail_report_view(request: HttpRequest, id: str):
""" Renders the detailed report for a conservation office
@@ -35,12 +55,27 @@ def detail_report_view(request: HttpRequest, id: str):
Returns:
"""
cons_office = get_object_or_404(
KonovaCode,
id=id,
)
report = TimespanReport(id)
try:
cons_office = KonovaCode.objects.get(id=id)
except (ObjectDoesNotExist, ValueError) as e:
messages.error(
request,
PARAMS_INVALID,
extra_tags="danger",
)
return redirect("analysis:reports")
try:
date_from = timezone.make_aware(timezone.datetime.fromisoformat(request.GET.get("df", None)))
date_to = timezone.make_aware(timezone.datetime.fromisoformat(request.GET.get("dt", None)))
except ValueError:
messages.error(
request,
PARAMS_INVALID,
extra_tags="danger",
)
return redirect("analysis:reports")
report = TimespanReport(id, date_from, date_to)
template = "analysis/reports/detail.html"
context = {
"office": cons_office,