Browse Source

Adicionados campos na listview de solicitações de eventos. Gertiq #167808

pull/167/head 3.0.58
Sesóstris Vieira 1 year ago
parent
commit
579a108886
  1. 102
      sigi/apps/eventos/admin.py
  2. 29
      sigi/apps/eventos/models.py

102
sigi/apps/eventos/admin.py

@ -3,7 +3,7 @@ import time
from moodle import Moodle from moodle import Moodle
from typing import Any from typing import Any
from django.db import models 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.conf import settings
from django.contrib import admin, messages from django.contrib import admin, messages
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
@ -287,13 +287,17 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin):
"data_recebido_coperi", "data_recebido_coperi",
"get_oficinas", "get_oficinas",
"get_municipio", "get_municipio",
"get_uf",
"get_regiao",
"get_populacao", "get_populacao",
"get_oficinas_municipio",
"get_uf",
"get_oficinas_uf", "get_oficinas_uf",
"get_regiao",
"get_microrregiao",
"get_oficinas_microrregiao",
"estimativa_casas", "estimativa_casas",
"estimativa_servidores", "estimativa_servidores",
) )
list_display_links = ("casa",)
list_filter = ( list_filter = (
"casa__municipio__uf", "casa__municipio__uf",
"casa__municipio__uf__regiao", "casa__municipio__uf__regiao",
@ -303,7 +307,6 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin):
ActVigenteFilter, ActVigenteFilter,
) )
list_select_related = ["casa", "casa__municipio", "casa__municipio__uf"] list_select_related = ["casa", "casa__municipio", "casa__municipio__uf"]
list_display_links = ("casa",)
search_fields = ( search_fields = (
"casa__search_text", "casa__search_text",
"casa__municipio__search_text", "casa__municipio__search_text",
@ -605,12 +608,76 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin):
def get_regiao(self, obj): def get_regiao(self, obj):
return obj.casa.municipio.uf.get_regiao_display() 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( @admin.display(
description=_("População"), ordering="casa__municipio__populacao" description=_("População"), ordering="casa__municipio__populacao"
) )
def get_populacao(self, obj): def get_populacao(self, obj):
return obj.casa.municipio.populacao 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") @admin.display(description=_("ACT vigente"), ordering="act_num")
def get_act(self, obj): def get_act(self, obj):
if obj.act_id: if obj.act_id:
@ -622,6 +689,33 @@ class SolicitacaoAdmin(CartExportMixin, admin.ModelAdmin):
) )
return None 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( @admin.display(
description=_("Término vigência ACT"), description=_("Término vigência ACT"),
ordering="act_data_termino_vigencia", ordering="act_data_termino_vigencia",

29
sigi/apps/eventos/models.py

@ -8,7 +8,7 @@ from django.contrib import admin
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models 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.urls import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
@ -192,33 +192,6 @@ class Solicitacao(models.Model):
) )
return self.num_processo 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): class ItemSolicitado(models.Model):
STATUS_SOLICITADO = "S" STATUS_SOLICITADO = "S"

Loading…
Cancel
Save