You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
konova/analysis/forms.py

81 lines
2.5 KiB
Python

"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 20.10.21
"""
from dal import autocomplete
from django import forms
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from codelist.models import KonovaCode
from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID
from konova.forms import BaseForm
class TimespanReportForm(BaseForm):
""" TimespanReporForm is used for allowing simple creation of an e.g. annual report for conservation offices
"""
date_from = forms.DateField(
label_suffix="",
label=_("From"),
widget=forms.DateInput(
attrs={
"type": "date",
"data-provide": "datepicker",
"class": "form-control",
},
format="%d.%m.%Y"
)
)
date_to = forms.DateField(
label_suffix="",
label=_("To"),
widget=forms.DateInput(
attrs={
"type": "date",
"data-provide": "datepicker",
"class": "form-control",
},
format="%d.%m.%Y"
)
)
conservation_office = forms.ModelChoiceField(
label=_("Conservation office"),
label_suffix="",
help_text=_("Select the responsible office"),
queryset=KonovaCode.objects.filter(
is_archived=False,
is_leaf=True,
code_lists__in=[CODELIST_CONSERVATION_OFFICE_ID],
),
widget=autocomplete.ModelSelect2(
url="codes-conservation-office-autocomplete",
attrs={
"data-placeholder": _("Click for selection")
}
),
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("Generate report")
self.form_caption = _("Select a timespan and the desired conservation office")
self.action_url = reverse("analysis:reports")
def save(self) -> str:
""" Generates a redirect url for the detail report
Returns:
detail_report_url (str): The constructed detail report url
"""
date_from = self.cleaned_data.get("date_from", None)
date_to = self.cleaned_data.get("date_to", None)
office = self.cleaned_data.get("conservation_office", None)
detail_report_url = reverse("analysis:report-detail", args=(office.id,)) + f"?df={date_from}&dt={date_to}"
return detail_report_url