#26 Annual conservation report

* adds first try for excel file downloading (WIP)
This commit is contained in:
2021-10-20 15:25:08 +02:00
parent e22e390040
commit 419a48cff1
4 changed files with 69 additions and 24 deletions

View File

@@ -1,8 +1,7 @@
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, redirect
from django.http import HttpRequest, FileResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.utils import timezone
from analysis.forms import TimespanReportForm
@@ -55,18 +54,17 @@ def detail_report_view(request: HttpRequest, id: str):
Returns:
"""
# Try to resolve the requested office id
cons_office = get_object_or_404(
KonovaCode,
id=id
)
# Try to resolve the date parameters into Date objects -> redirect if this fails
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)))
df = request.GET.get("df", None)
dt = request.GET.get("dt", None)
date_from = timezone.make_aware(timezone.datetime.fromisoformat(df))
date_to = timezone.make_aware(timezone.datetime.fromisoformat(dt))
except ValueError:
messages.error(
request,
@@ -75,11 +73,24 @@ def detail_report_view(request: HttpRequest, id: str):
)
return redirect("analysis:reports")
# Check whether the html default rendering is requested or an alternative
format_param = request.GET.get("format", "html")
report = TimespanReport(id, date_from, date_to)
template = "analysis/reports/detail.html"
context = {
"office": cons_office,
"report": report,
}
context = BaseContext(request, context).context
return render(request, template, context)
if format_param == "html":
template = "analysis/reports/detail.html"
context = {
"office": cons_office,
"report": report,
}
context = BaseContext(request, context).context
return render(request, template, context)
elif format_param == "excel":
stream = report.to_excel_file()
response = FileResponse(
filename=stream.name,
)
response['Content-Disposition'] = f'attachement;"'
return response
else:
raise NotImplementedError