From 579a1088868cf595c0436ad7def8398950a7a56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Mon, 30 Oct 2023 16:26:06 -0300 Subject: [PATCH] =?UTF-8?q?Adicionados=20campos=20na=20listview=20de=20sol?= =?UTF-8?q?icita=C3=A7=C3=B5es=20de=20eventos.=20Gertiq=20#167808?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/eventos/admin.py | 102 ++++++++++++++++++++++++++++++++++-- sigi/apps/eventos/models.py | 29 +--------- 2 files changed, 99 insertions(+), 32 deletions(-) diff --git a/sigi/apps/eventos/admin.py b/sigi/apps/eventos/admin.py index 83f1238..63a256b 100644 --- a/sigi/apps/eventos/admin.py +++ b/sigi/apps/eventos/admin.py @@ -3,7 +3,7 @@ import time from moodle import Moodle from typing import Any from django.db import models -from django.db.models import F, OuterRef, Subquery +from django.db.models import F, OuterRef, Subquery, Count, Q from django.conf import settings from django.contrib import admin, messages from django.core.exceptions import ValidationError @@ -287,13 +287,17 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin): "data_recebido_coperi", "get_oficinas", "get_municipio", - "get_uf", - "get_regiao", "get_populacao", + "get_oficinas_municipio", + "get_uf", "get_oficinas_uf", + "get_regiao", + "get_microrregiao", + "get_oficinas_microrregiao", "estimativa_casas", "estimativa_servidores", ) + list_display_links = ("casa",) list_filter = ( "casa__municipio__uf", "casa__municipio__uf__regiao", @@ -303,7 +307,6 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin): ActVigenteFilter, ) list_select_related = ["casa", "casa__municipio", "casa__municipio__uf"] - list_display_links = ("casa",) search_fields = ( "casa__search_text", "casa__municipio__search_text", @@ -605,12 +608,76 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin): def get_regiao(self, obj): return obj.casa.municipio.uf.get_regiao_display() + @admin.display( + description=_("Microrregião"), ordering="casa__municipio__microrregiao" + ) + def get_microrregiao(self, obj): + return obj.casa.municipio.microrregiao + + @admin.display( + description=_("Oficinas atendidas/confirmadas na microrregião") + ) + def get_oficinas_microrregiao(self, obj): + ano_corrente = timezone.localdate().year + counters = Evento.objects.filter( + status__in=[Evento.STATUS_AUTORIZADO, Evento.STATUS_REALIZADO], + casa_anfitria__municipio__microrregiao=obj.casa.municipio.microrregiao, + tipo_evento__categoria=TipoEvento.CATEGORIA_OFICINA, + ).aggregate( + total=Count("id"), + no_ano=Count("id", filter=Q(data_inicio__year=ano_corrente)), + dois_anos=Count( + "id", + filter=Q(data_inicio__year__gte=ano_corrente - 1), + ), + tres_anos=Count( + "id", + filter=Q(data_inicio__year__gte=ano_corrente - 2), + ), + ) + return _( + ( + "Total: {total}, no ano corrente: {no_ano}, " + "nos dois últimos anos: {dois_anos}, " + "nos três últimos anos: {tres_anos}" + ).format(**counters) + ) + @admin.display( description=_("População"), ordering="casa__municipio__populacao" ) def get_populacao(self, obj): return obj.casa.municipio.populacao + @admin.display( + description=_("Oficinas atendidas/confirmadas no município") + ) + def get_oficinas_municipio(self, obj): + ano_corrente = timezone.localdate().year + counters = Evento.objects.filter( + status__in=[Evento.STATUS_AUTORIZADO, Evento.STATUS_REALIZADO], + casa_anfitria__municipio=obj.casa.municipio, + tipo_evento__categoria=TipoEvento.CATEGORIA_OFICINA, + ).aggregate( + total=Count("id"), + no_ano=Count("id", filter=Q(data_inicio__year=ano_corrente)), + dois_anos=Count( + "id", + filter=Q(data_inicio__year__gte=ano_corrente - 1), + ), + tres_anos=Count( + "id", + filter=Q(data_inicio__year__gte=ano_corrente - 2), + ), + ) + return _( + ( + "Total: {total}, no ano corrente: {no_ano}, " + "nos dois últimos anos: {dois_anos}, " + "nos três últimos anos: {tres_anos}" + ).format(**counters) + ) + @admin.display(description=_("ACT vigente"), ordering="act_num") def get_act(self, obj): if obj.act_id: @@ -622,6 +689,33 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin): ) return None + @admin.display(description=_("Oficinas atendidas/confirmadas na UF")) + def get_oficinas_uf(self, obj): + ano_corrente = timezone.localdate().year + counters = Evento.objects.filter( + status__in=[Evento.STATUS_AUTORIZADO, Evento.STATUS_REALIZADO], + casa_anfitria__municipio__uf=obj.casa.municipio.uf, + tipo_evento__categoria=TipoEvento.CATEGORIA_OFICINA, + ).aggregate( + total=Count("id"), + no_ano=Count("id", filter=Q(data_inicio__year=ano_corrente)), + dois_anos=Count( + "id", + filter=Q(data_inicio__year__gte=ano_corrente - 1), + ), + tres_anos=Count( + "id", + filter=Q(data_inicio__year__gte=ano_corrente - 2), + ), + ) + return _( + ( + "Total: {total}, no ano corrente: {no_ano}, " + "nos dois últimos anos: {dois_anos}, " + "nos três últimos anos: {tres_anos}" + ).format(**counters) + ) + @admin.display( description=_("Término vigência ACT"), ordering="act_data_termino_vigencia", diff --git a/sigi/apps/eventos/models.py b/sigi/apps/eventos/models.py index 9a744b8..0cf40de 100644 --- a/sigi/apps/eventos/models.py +++ b/sigi/apps/eventos/models.py @@ -8,7 +8,7 @@ from django.contrib import admin from django.core.validators import RegexValidator from django.core.exceptions import ValidationError from django.db import models -from django.db.models import Sum, Count, Q +from django.db.models import Sum from django.urls import reverse from django.utils import timezone from django.utils.safestring import mark_safe @@ -192,33 +192,6 @@ class Solicitacao(models.Model): ) return self.num_processo - @admin.display(description=_("Oficinas atendidas/confirmadas na UF")) - def get_oficinas_uf(self): - ano_corrente = timezone.localdate().year - counters = Evento.objects.filter( - status__in=[Evento.STATUS_AUTORIZADO, Evento.STATUS_REALIZADO], - casa_anfitria__municipio__uf=self.casa.municipio.uf, - tipo_evento__categoria=TipoEvento.CATEGORIA_OFICINA, - ).aggregate( - total=Count("id"), - no_ano=Count("id", filter=Q(data_inicio__year=ano_corrente)), - dois_anos=Count( - "id", - filter=Q(data_inicio__year__gte=ano_corrente - 1), - ), - tres_anos=Count( - "id", - filter=Q(data_inicio__year__gte=ano_corrente - 2), - ), - ) - return _( - ( - "Total: {total}, no ano corrente: {no_ano}, " - "nos dois últimos anos: {dois_anos}, " - "nos três últimos anos: {tres_anos}" - ).format(**counters) - ) - class ItemSolicitado(models.Model): STATUS_SOLICITADO = "S"