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==6.0.4
django-admin-autocomplete-filter==0.7.1 django-admin-autocomplete-filter==0.7.1
django-admin-rangefilter==0.14.0
django-auth-ldap==5.3.0 django-auth-ldap==5.3.0
django-debug-toolbar==6.3.0 django-debug-toolbar==6.3.0
django-environ==0.13.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.translation import gettext as _
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django_weasyprint.views import WeasyTemplateResponse from django_weasyprint.views import WeasyTemplateResponse
from djbs import djbs_constants
from import_export import resources from import_export import resources
from import_export.admin import ExportActionMixin from import_export.admin import ExportActionMixin
from import_export.fields import Field from import_export.fields import Field
from rangefilter.filters import DateRangeFilterBuilder
from tinymce.models import HTMLField from tinymce.models import HTMLField
from tinymce.widgets import AdminTinyMCE from tinymce.widgets import AdminTinyMCE
from sigi.apps.convenios.models import ( 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.utils.mixins import AsciifyQParameter
from sigi.apps.casas.admin import GerentesInterlegisFilter from sigi.apps.casas.admin import GerentesInterlegisFilter
from sigi.apps.utils.mixins import ReturnMixin from sigi.apps.utils.mixins import ReturnMixin
from sigi.apps.utils.filters import DateRangeFilter
class ConvenioExportResourse(resources.ModelResource): class ConvenioExportResourse(resources.ModelResource):
@ -139,6 +140,7 @@ class ProjetoAdmin(admin.ModelAdmin):
class ConvenioAdmin( class ConvenioAdmin(
AsciifyQParameter, ReturnMixin, ExportActionMixin, admin.ModelAdmin AsciifyQParameter, ReturnMixin, ExportActionMixin, admin.ModelAdmin
): ):
# filter_style = djbs_constants.FILTER_STYLE_FORM
fieldsets = ( fieldsets = (
( (
None, None,
@ -225,8 +227,8 @@ class ConvenioAdmin(
"casa_legislativa", "casa_legislativa",
) )
list_filter = ( list_filter = (
("data_retorno_assinatura", DateRangeFilter), ("data_retorno_assinatura", DateRangeFilterBuilder()),
("data_termino_vigencia", DateRangeFilter), ("data_termino_vigencia", DateRangeFilterBuilder()),
ConvenioVigenteFilter, ConvenioVigenteFilter,
("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter), ("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter),
"projeto", "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 import resources
from import_export.admin import ExportActionMixin from import_export.admin import ExportActionMixin
from import_export.fields import Field from import_export.fields import Field
from rangefilter.filters import DateRangeFilterBuilder
from tinymce.models import HTMLField from tinymce.models import HTMLField
from tinymce.widgets import AdminTinyMCE from tinymce.widgets import AdminTinyMCE
from weasyprint import HTML from weasyprint import HTML
@ -59,7 +60,6 @@ from sigi.apps.eventos.views import (
) )
from sigi.apps.eventos.saberes import SaberesSyncException from sigi.apps.eventos.saberes import SaberesSyncException
from sigi.apps.utils import abreviatura from sigi.apps.utils import abreviatura
from sigi.apps.utils.filters import DateRangeFilter
from sigi.apps.utils.mixins import AsciifyQParameter from sigi.apps.utils.mixins import AsciifyQParameter
from sigi.apps.utils.resources import ValueModelResource from sigi.apps.utils.resources import ValueModelResource
@ -998,7 +998,7 @@ class EventoAdmin(AsciifyQParameter, ExportActionMixin, admin.ModelAdmin):
"tipo_evento__categoria", "tipo_evento__categoria",
"casa_anfitria__municipio__uf", "casa_anfitria__municipio__uf",
"casa_anfitria__municipio__uf__regiao", "casa_anfitria__municipio__uf__regiao",
("data_inicio", DateRangeFilter), ("data_inicio", DateRangeFilterBuilder()),
"virtual", "virtual",
"solicitante", "solicitante",
("moodle_courseid", admin.EmptyFieldListFilter), ("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 import resources
from import_export.fields import Field from import_export.fields import Field
from import_export.admin import ExportActionMixin from import_export.admin import ExportActionMixin
from rangefilter.filters import DateRangeFilterBuilder
from sigi.apps.casas.admin import GerentesInterlegisFilter from sigi.apps.casas.admin import GerentesInterlegisFilter
from sigi.apps.servicos.models import Servico, LogServico, TipoServico from sigi.apps.servicos.models import Servico, LogServico, TipoServico
from sigi.apps.servicos.filters import ( from sigi.apps.servicos.filters import (
@ -18,7 +19,6 @@ from sigi.apps.convenios.filters import (
TipoProjetoFilter, TipoProjetoFilter,
ExcluirTipoProjetoFilter, ExcluirTipoProjetoFilter,
) )
from sigi.apps.utils.filters import DateRangeFilter
from sigi.apps.utils.mixins import ReturnMixin from sigi.apps.utils.mixins import ReturnMixin
from sigi.apps.utils.resources import ValueModelResource from sigi.apps.utils.resources import ValueModelResource
@ -112,7 +112,7 @@ class ServicoAdmin(ReturnMixin, ExportActionMixin, admin.ModelAdmin):
list_filter = ( list_filter = (
"tipo_servico", "tipo_servico",
"hospedagem_interlegis", "hospedagem_interlegis",
("data_ativacao", DateRangeFilter), ("data_ativacao", DateRangeFilterBuilder()),
("data_desativacao", ServicoAtivoFilter), ("data_desativacao", ServicoAtivoFilter),
"resultado_verificacao", "resultado_verificacao",
DataUtimoUsoFilter, DataUtimoUsoFilter,

74
sigi/apps/utils/filters.py

@ -168,77 +168,3 @@ class RangeFilter(admin.FieldListFilter):
raise IncorrectLookupParameters(e) raise IncorrectLookupParameters(e)
return queryset 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.staticfiles",
"django.contrib.sites", "django.contrib.sites",
"django_extensions", "django_extensions",
"rangefilter",
"job_controller", "job_controller",
"django_filters", "django_filters",
"localflavor", "localflavor",

Loading…
Cancel
Save