From b35a8940b738e7acca45a03a17ba18d9db0d8927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Thu, 10 Nov 2022 15:02:09 -0300 Subject: [PATCH] =?UTF-8?q?Ajustes=20em=20relat=C3=B3rios=20da=20COADFI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/convenios/admin.py | 2 +- .../home/dashboard/resumo_convenios.html | 33 +++---- sigi/apps/home/views.py | 98 +++++++++++-------- 3 files changed, 69 insertions(+), 64 deletions(-) diff --git a/sigi/apps/convenios/admin.py b/sigi/apps/convenios/admin.py index 6190050..83483cc 100644 --- a/sigi/apps/convenios/admin.py +++ b/sigi/apps/convenios/admin.py @@ -256,7 +256,7 @@ class ConvenioAdmin(CartExportReportMixin, admin.ModelAdmin): "casa_legislativa__municipio__uf__sigla", "data_retorno_assinatura", ), - "title": _("Relatório de convenios"), + "title": _("Relatório de parcerias"), } return WeasyTemplateResponse( filename="relatorio_convenios.pdf", diff --git a/sigi/apps/home/templates/home/dashboard/resumo_convenios.html b/sigi/apps/home/templates/home/dashboard/resumo_convenios.html index d971faa..fcdb9b6 100644 --- a/sigi/apps/home/templates/home/dashboard/resumo_convenios.html +++ b/sigi/apps/home/templates/home/dashboard/resumo_convenios.html @@ -17,11 +17,13 @@ -Centro Oeste -Nordeste -Norte -Sudeste -Sul +
+ Centro Oeste + Nordeste + Norte + Sudeste + Sul +
@@ -41,21 +43,12 @@
- - - - - - - - - - - - - - - + {% for label, value in tabela_resumo_camara.totais %} + + + + + {% endfor %}
{% blocktrans with label_tipo=label_tipo %}Total de {{ label_tipo }} do país{% endblocktrans %}{{ tabela_resumo_camara.total_camaras }}
{% blocktrans with label_tipo=label_tipo %}{{ label_tipo }} com convênios vigentes{% endblocktrans %}{{ tabela_resumo_camara.total_camaras_convenios_vigentes }}
{% blocktrans with label_tipo=label_tipo %}{{ label_tipo }} sem nenhum convênio{% endblocktrans %}{{ tabela_resumo_camara.camaras_sem_convenio }}
{{ label }}{{ value }}
{% trans 'Casas sem convenio que utilizam algum serviço de hospedagem' %} list diff --git a/sigi/apps/home/views.py b/sigi/apps/home/views.py index a8ef0ec..9f3365d 100644 --- a/sigi/apps/home/views.py +++ b/sigi/apps/home/views.py @@ -499,8 +499,9 @@ def resumo_convenios(request): df = resumo.pop("data_frame") col = df.columns[0] for key, value in resumo.items(): - if type(value) is dict: - for k, v in value.items(): + if hasattr(value, "__iter__") or hasattr(value, "__getitem__"): + value = value.items() if hasattr(value, "items") else value + for k, v in value: df.loc[f"{key} - {k}"] = {col: v} else: df.loc[key] = {col: value} @@ -1127,56 +1128,67 @@ def report_sem_convenio(request): def busca_informacoes_camara(tipos=["CM"], label_tipo=_("Câmaras Municipais")): camaras = Orgao.objects.filter(tipo__sigla__in=tipos) convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla__in=tipos) - convenios_em_andamento = convenios.filter(data_retorno_assinatura=None) - convenios_vencidos = convenios.filter( - data_termino_vigencia__lt=timezone.localdate() + convenios_vigentes = convenios.exclude(data_retorno_assinatura=None).filter( + Q(data_termino_vigencia__gte=timezone.localdate()) + | Q(data_termino_vigencia=None) ) - camaras_projetos_vigentes = camaras.exclude(convenio=None).exclude( - convenio__in=convenios_vencidos - ) - - # Dataframe do resumo de camaras por projeto # + convenios_andando = convenios.filter(data_retorno_assinatura=None) + convenios_vencidos = convenios.exclude( + Q(data_retorno_assinatura=None) | Q(data_termino_vigencia=None) + ).filter(data_termino_vigencia__lt=timezone.localdate()) dataset = { - d.pop("convenio__projeto__sigla"): d - for d in camaras.values("convenio__projeto__sigla").annotate( - total=Count("id", distinct=True), - andamento=Count( - "id", - filter=Q(convenio__in=convenios_em_andamento), - distinct=True, - ), - vigentes=Count( - "id", filter=Q(id__in=camaras_projetos_vigentes), distinct=True - ), - vencidos=Count( - "id", filter=~Q(id__in=camaras_projetos_vigentes), distinct=True - ), - ) + _(f"{label_tipo} com convênios vigentes"): { + k: v + for k, v in convenios_vigentes.values_list( + "projeto__sigla" + ).annotate(Count("casa_legislativa_id", distinct=True)) + }, + _(f"{label_tipo} com convênios em andamento"): { + k: v + for k, v in convenios_andando.values_list( + "projeto__sigla" + ).annotate(Count("casa_legislativa_id", distinct=True)) + }, + _(f"{label_tipo} com convênios vencidos"): { + k: v + for k, v in convenios_vencidos.values_list( + "projeto__sigla" + ).annotate(Count("casa_legislativa_id", distinct=True)) + }, } - if None in dataset: - rec_none = dataset.pop(None) - camaras_sem_convenio = rec_none["total"] - else: - camaras_sem_convenio = 0 - - df = pd.DataFrame(dataset) - df.rename( - index={ - "total": _(f"Total de {label_tipo} conveniados"), - "andamento": _(f"{label_tipo} com convênios em andamento"), - "vigentes": _(f"{label_tipo} com convênios vigentes"), - "vencidos": _(f"{label_tipo} com convênios vencidos"), - }, - inplace=True, + ds_totais = ( + (_(f"Total de {label_tipo} do país"), camaras.count()), + ( + _(f"Total de {label_tipo} com convênio vigente"), + convenios_vigentes.order_by("casa_legislativa_id") + .distinct("casa_legislativa_id") + .count(), + ), + ( + _(f"Total de {label_tipo} com convênio em andamento"), + convenios_andando.order_by("casa_legislativa_id") + .distinct("casa_legislativa_id") + .count(), + ), + ( + _(f"Total de {label_tipo} com convênio vencido"), + convenios_vencidos.order_by("casa_legislativa_id") + .distinct("casa_legislativa_id") + .count(), + ), + ) + + df = ( + pd.DataFrame.from_dict(dataset, orient="index") + .replace(np.NaN, 0) + .convert_dtypes() ) # Retornando listas em forma de dicionario return { "data_frame": df, - "total_camaras": camaras.count(), - "total_camaras_convenios_vigentes": camaras_projetos_vigentes.count(), - "camaras_sem_convenio": camaras_sem_convenio, + "totais": ds_totais, "sem_convenio": sem_convenio(), }