Browse Source

Adiciona filtros por range de datas. Gertiq #258412

pull/5/merge
Sesóstris Vieira 2 weeks ago
parent
commit
9d3b1e54dc
  1. 1
      requirements/requirements.txt
  2. 8
      sigi/apps/convenios/admin.py
  3. 4
      sigi/apps/eventos/admin.py
  4. 4
      sigi/apps/servicos/admin.py
  5. 74
      sigi/apps/utils/filters.py
  6. 1
      sigi/settings.py

1
requirements/requirements.txt

@ -1,5 +1,6 @@
Django==6.0.4
django-admin-autocomplete-filter==0.7.1
django-admin-rangefilter==0.14.0
django-auth-ldap==5.3.0
django-debug-toolbar==6.3.0
django-environ==0.13.0

8
sigi/apps/convenios/admin.py

@ -4,9 +4,11 @@ from django.utils import timezone
from django.utils.translation import gettext as _
from django.utils.safestring import mark_safe
from django_weasyprint.views import WeasyTemplateResponse
from djbs import djbs_constants
from import_export import resources
from import_export.admin import ExportActionMixin
from import_export.fields import Field
from rangefilter.filters import DateRangeFilterBuilder
from tinymce.models import HTMLField
from tinymce.widgets import AdminTinyMCE
from sigi.apps.convenios.models import (
@ -21,7 +23,6 @@ from sigi.apps.convenios.models import (
from sigi.apps.utils.mixins import AsciifyQParameter
from sigi.apps.casas.admin import GerentesInterlegisFilter
from sigi.apps.utils.mixins import ReturnMixin
from sigi.apps.utils.filters import DateRangeFilter
class ConvenioExportResourse(resources.ModelResource):
@ -139,6 +140,7 @@ class ProjetoAdmin(admin.ModelAdmin):
class ConvenioAdmin(
AsciifyQParameter, ReturnMixin, ExportActionMixin, admin.ModelAdmin
):
# filter_style = djbs_constants.FILTER_STYLE_FORM
fieldsets = (
(
None,
@ -225,8 +227,8 @@ class ConvenioAdmin(
"casa_legislativa",
)
list_filter = (
("data_retorno_assinatura", DateRangeFilter),
("data_termino_vigencia", DateRangeFilter),
("data_retorno_assinatura", DateRangeFilterBuilder()),
("data_termino_vigencia", DateRangeFilterBuilder()),
ConvenioVigenteFilter,
("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter),
"projeto",

4
sigi/apps/eventos/admin.py

@ -30,6 +30,7 @@ from django_weasyprint.views import WeasyTemplateResponse
from import_export import resources
from import_export.admin import ExportActionMixin
from import_export.fields import Field
from rangefilter.filters import DateRangeFilterBuilder
from tinymce.models import HTMLField
from tinymce.widgets import AdminTinyMCE
from weasyprint import HTML
@ -59,7 +60,6 @@ from sigi.apps.eventos.views import (
)
from sigi.apps.eventos.saberes import SaberesSyncException
from sigi.apps.utils import abreviatura
from sigi.apps.utils.filters import DateRangeFilter
from sigi.apps.utils.mixins import AsciifyQParameter
from sigi.apps.utils.resources import ValueModelResource
@ -998,7 +998,7 @@ class EventoAdmin(AsciifyQParameter, ExportActionMixin, admin.ModelAdmin):
"tipo_evento__categoria",
"casa_anfitria__municipio__uf",
"casa_anfitria__municipio__uf__regiao",
("data_inicio", DateRangeFilter),
("data_inicio", DateRangeFilterBuilder()),
"virtual",
"solicitante",
("moodle_courseid", admin.EmptyFieldListFilter),

4
sigi/apps/servicos/admin.py

@ -8,6 +8,7 @@ from django.utils.translation import gettext as _
from import_export import resources
from import_export.fields import Field
from import_export.admin import ExportActionMixin
from rangefilter.filters import DateRangeFilterBuilder
from sigi.apps.casas.admin import GerentesInterlegisFilter
from sigi.apps.servicos.models import Servico, LogServico, TipoServico
from sigi.apps.servicos.filters import (
@ -18,7 +19,6 @@ from sigi.apps.convenios.filters import (
TipoProjetoFilter,
ExcluirTipoProjetoFilter,
)
from sigi.apps.utils.filters import DateRangeFilter
from sigi.apps.utils.mixins import ReturnMixin
from sigi.apps.utils.resources import ValueModelResource
@ -112,7 +112,7 @@ class ServicoAdmin(ReturnMixin, ExportActionMixin, admin.ModelAdmin):
list_filter = (
"tipo_servico",
"hospedagem_interlegis",
("data_ativacao", DateRangeFilter),
("data_ativacao", DateRangeFilterBuilder()),
("data_desativacao", ServicoAtivoFilter),
"resultado_verificacao",
DataUtimoUsoFilter,

74
sigi/apps/utils/filters.py

@ -168,77 +168,3 @@ class RangeFilter(admin.FieldListFilter):
raise IncorrectLookupParameters(e)
return queryset
class DateRangeFilter(admin.FieldListFilter):
template = "admin/date_range_filter.html"
def __init__(self, field, request, params, model, model_admin, field_path):
self.model = model
self.model_admin = model_admin
self.lookup_kwargs = [f"{field_path}__gte", f"{field_path}__lte"]
form_data = {}
for p in self.expected_parameters():
if p in params:
value = params.pop(p)[-1]
form_data[p] = prepare_lookup_value(
p, value, self.list_separator
)
super().__init__(field, request, params, model, model_admin, field_path)
form = self.get_date_form(form_data)
if form.is_valid():
self.used_parameters = {
key: [value]
for key, value in form.cleaned_data.items()
if value is not None
}
else:
self.used_parameters = {}
def has_output(self):
return self.model.objects.exists()
def expected_parameters(self):
return self.lookup_kwargs
def choices(self, changelist):
form_params = {
key: value[-1] for key, value in self.used_parameters.items()
}
return [
{
"query_string": changelist.get_query_string(
remove=self.lookup_kwargs
),
"form": self.get_date_form(form_params, changelist),
}
]
def get_date_form(self, context={}, changelist=None):
date_fields = {
name: forms.DateField(
required=False,
label=(_("De") if "__gte" in name else _("Até")),
widget=forms.DateInput(
attrs={
"class": "datepicker admin_filter",
"placeholder": (
_("De") if "__gte" in name else _("Até")
),
"data-clear": (
changelist.get_query_string(
remove=[
name,
]
)
if changelist
else ""
),
}
),
)
for name in self.lookup_kwargs
}
DateForm = type("DateForm", (forms.Form,), date_fields)
return DateForm(context)

1
sigi/settings.py

@ -56,6 +56,7 @@ INSTALLED_APPS = [
"django.contrib.staticfiles",
"django.contrib.sites",
"django_extensions",
"rangefilter",
"job_controller",
"django_filters",
"localflavor",

Loading…
Cancel
Save