From ffd1e21feb731713e077405da262434b81a5bd91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Thu, 26 Mar 2026 19:20:02 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20links=20no=20dash=20de=20servi=C3=A7?= =?UTF-8?q?os=20por=20ano?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/servicos/admin.py | 1 + sigi/apps/servicos/dashboards.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/sigi/apps/servicos/admin.py b/sigi/apps/servicos/admin.py index 5659f03..8da31e1 100644 --- a/sigi/apps/servicos/admin.py +++ b/sigi/apps/servicos/admin.py @@ -107,6 +107,7 @@ class ServicoAdmin(ReturnMixin, ExportActionMixin, admin.ModelAdmin): ] autocomplete_fields = ("casa_legislativa",) readonly_fields = ["data_alteracao"] + date_hierarchy = "data_ativacao" list_filter = ( "tipo_servico", "hospedagem_interlegis", diff --git a/sigi/apps/servicos/dashboards.py b/sigi/apps/servicos/dashboards.py index 47bf19d..1b123aa 100644 --- a/sigi/apps/servicos/dashboards.py +++ b/sigi/apps/servicos/dashboards.py @@ -3,6 +3,7 @@ import datetime import locale from dashboard import Dashcard, getcolor from random import choice, randint, seed +from urllib.parse import urlencode from django.db.models import Count, F, Q from django.db.models.functions import TruncMonth from django.http import QueryDict @@ -448,14 +449,21 @@ class ServicosAno(Dashcard): return labels def get_datasets(self, request, queryset=None): + meses = {calendar.month_abbr[x + 1]: str(x + 1) for x in range(12)} + ano = request.GET.get("ano", None) if queryset is None: queryset = self.get_queryset(request) - if request.GET.get("ano", None): + if ano: lang = to_locale(get_language()) + ".UTF-8" locale.setlocale(locale.LC_ALL, lang) map_function = lambda x: _(calendar.month_abbr[x]) + map_yaxis = lambda x: { + "data_ativacao__year": ano, + "data_ativacao__month": meses[x], + } else: map_function = str + map_yaxis = lambda x: {"data_ativacao__year": x} labels = self.get_labels(request, queryset) @@ -472,6 +480,26 @@ class ServicosAno(Dashcard): "label": s, "data": series[s], "backgroundColor": getcolor(s), + "links": [ + self.get_view_link(s, map_yaxis(k), v) + for k, v in series[s].items() + ], } for s in series ] + + def get_view_link(self, xaxis, yaxis, value): + base_url = reverse("admin:servicos_servico_changelist") + if value > 0: + yaxis["hospedagem_interlegis__exact"] = 1 + try: + yaxis["tipo_servico__id__exact"] = TipoServico.objects.get( + sigla=xaxis + ).id + except ( + TipoServico.DoesNotExist, + TipoServico.MultipleObjectsReturned, + ): + return None + return f"{base_url}?{urlencode(yaxis)}" + return None