Browse Source

Ajustes em relatórios da COADFI

pull/159/head
Sesostris Vieira 2 years ago
parent
commit
b35a8940b7
  1. 2
      sigi/apps/convenios/admin.py
  2. 29
      sigi/apps/home/templates/home/dashboard/resumo_convenios.html
  3. 94
      sigi/apps/home/views.py

2
sigi/apps/convenios/admin.py

@ -256,7 +256,7 @@ class ConvenioAdmin(CartExportReportMixin, admin.ModelAdmin):
"casa_legislativa__municipio__uf__sigla", "casa_legislativa__municipio__uf__sigla",
"data_retorno_assinatura", "data_retorno_assinatura",
), ),
"title": _("Relatório de convenios"), "title": _("Relatório de parcerias"),
} }
return WeasyTemplateResponse( return WeasyTemplateResponse(
filename="relatorio_convenios.pdf", filename="relatorio_convenios.pdf",

29
sigi/apps/home/templates/home/dashboard/resumo_convenios.html

@ -17,11 +17,13 @@
</div> </div>
</li> </li>
</ul> </ul>
<a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'CO' %}">Centro Oeste</a> <blockquote>
<a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'NE' %}">Nordeste</a> <a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'CO' %}">Centro Oeste</a>
<a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'NO' %}">Norte</a> <a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'NE' %}">Nordeste</a>
<a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'SD' %}">Sudeste</a> <a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'NO' %}">Norte</a>
<a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'SL' %}">Sul</a> <a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'SD' %}">Sudeste</a>
<a class="waves-effect waves-light btn-small btn-flat" href="{% url 'convenios-report_regiao_pdf' 'SL' %}">Sul</a>
</blockquote>
<table class="responsive-table numeros"> <table class="responsive-table numeros">
<tr> <tr>
@ -41,21 +43,12 @@
</table> </table>
<table class="responsive-table numeros"> <table class="responsive-table numeros">
{% for label, value in tabela_resumo_camara.totais %}
<tr> <tr>
<th>{% blocktrans with label_tipo=label_tipo %}Total de {{ label_tipo }} do país{% endblocktrans %}</th> <th>{{ label }}</th>
<td>{{ tabela_resumo_camara.total_camaras }}</td> <td>{{ value }}</td>
</tr>
<tr>
<th>{% blocktrans with label_tipo=label_tipo %}{{ label_tipo }} com convênios vigentes{% endblocktrans %}</th>
<td>{{ tabela_resumo_camara.total_camaras_convenios_vigentes }}</td>
</tr>
<tr>
<th>{% blocktrans with label_tipo=label_tipo %}{{ label_tipo }} sem nenhum convênio{% endblocktrans %}</th>
<td>{{ tabela_resumo_camara.camaras_sem_convenio }}</td>
</tr> </tr>
{% endfor %}
<tr> <tr>
<th>{% trans 'Casas sem convenio que utilizam algum serviço de hospedagem' %} <th>{% trans 'Casas sem convenio que utilizam algum serviço de hospedagem' %}
<a href="{% url "home_reportsemconvenio" %}?modo=H" target="_blank" aria-label="{% trans "Listar casas" %}" title="{% trans "Listar casas" %}"><i class="material-icons tiny">list</i></a> <a href="{% url "home_reportsemconvenio" %}?modo=H" target="_blank" aria-label="{% trans "Listar casas" %}" title="{% trans "Listar casas" %}"><i class="material-icons tiny">list</i></a>

94
sigi/apps/home/views.py

@ -499,8 +499,9 @@ def resumo_convenios(request):
df = resumo.pop("data_frame") df = resumo.pop("data_frame")
col = df.columns[0] col = df.columns[0]
for key, value in resumo.items(): for key, value in resumo.items():
if type(value) is dict: if hasattr(value, "__iter__") or hasattr(value, "__getitem__"):
for k, v in value.items(): value = value.items() if hasattr(value, "items") else value
for k, v in value:
df.loc[f"{key} - {k}"] = {col: v} df.loc[f"{key} - {k}"] = {col: v}
else: else:
df.loc[key] = {col: value} 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")): def busca_informacoes_camara(tipos=["CM"], label_tipo=_("Câmaras Municipais")):
camaras = Orgao.objects.filter(tipo__sigla__in=tipos) camaras = Orgao.objects.filter(tipo__sigla__in=tipos)
convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla__in=tipos) convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla__in=tipos)
convenios_em_andamento = convenios.filter(data_retorno_assinatura=None) convenios_vigentes = convenios.exclude(data_retorno_assinatura=None).filter(
convenios_vencidos = convenios.filter( Q(data_termino_vigencia__gte=timezone.localdate())
data_termino_vigencia__lt=timezone.localdate() | Q(data_termino_vigencia=None)
) )
camaras_projetos_vigentes = camaras.exclude(convenio=None).exclude( convenios_andando = convenios.filter(data_retorno_assinatura=None)
convenio__in=convenios_vencidos convenios_vencidos = convenios.exclude(
) Q(data_retorno_assinatura=None) | Q(data_termino_vigencia=None)
).filter(data_termino_vigencia__lt=timezone.localdate())
# Dataframe do resumo de camaras por projeto #
dataset = { dataset = {
d.pop("convenio__projeto__sigla"): d _(f"{label_tipo} com convênios vigentes"): {
for d in camaras.values("convenio__projeto__sigla").annotate( k: v
total=Count("id", distinct=True), for k, v in convenios_vigentes.values_list(
andamento=Count( "projeto__sigla"
"id", ).annotate(Count("casa_legislativa_id", distinct=True))
filter=Q(convenio__in=convenios_em_andamento), },
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))
},
}
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(),
), ),
vigentes=Count( (
"id", filter=Q(id__in=camaras_projetos_vigentes), distinct=True _(f"Total de {label_tipo} com convênio em andamento"),
convenios_andando.order_by("casa_legislativa_id")
.distinct("casa_legislativa_id")
.count(),
), ),
vencidos=Count( (
"id", filter=~Q(id__in=camaras_projetos_vigentes), distinct=True _(f"Total de {label_tipo} com convênio vencido"),
convenios_vencidos.order_by("casa_legislativa_id")
.distinct("casa_legislativa_id")
.count(),
), ),
) )
}
if None in dataset: df = (
rec_none = dataset.pop(None) pd.DataFrame.from_dict(dataset, orient="index")
camaras_sem_convenio = rec_none["total"] .replace(np.NaN, 0)
else: .convert_dtypes()
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,
) )
# Retornando listas em forma de dicionario # Retornando listas em forma de dicionario
return { return {
"data_frame": df, "data_frame": df,
"total_camaras": camaras.count(), "totais": ds_totais,
"total_camaras_convenios_vigentes": camaras_projetos_vigentes.count(),
"camaras_sem_convenio": camaras_sem_convenio,
"sem_convenio": sem_convenio(), "sem_convenio": sem_convenio(),
} }

Loading…
Cancel
Save