From 6cfe9b155aaea00c4d018d37d55f2f2e0f01843a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Wed, 26 Oct 2022 17:38:24 -0300 Subject: [PATCH] =?UTF-8?q?Conv=C3=AAnios:=20filtros,=20relat=C3=B3rios,?= =?UTF-8?q?=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/convenios/admin.py | 38 ++-- sigi/apps/convenios/reports.py | 335 --------------------------------- sigi/apps/home/views.py | 44 ++--- 3 files changed, 42 insertions(+), 375 deletions(-) delete mode 100644 sigi/apps/convenios/reports.py diff --git a/sigi/apps/convenios/admin.py b/sigi/apps/convenios/admin.py index 7bec97a..5ad64b9 100644 --- a/sigi/apps/convenios/admin.py +++ b/sigi/apps/convenios/admin.py @@ -1,5 +1,7 @@ +from django.db.models import Q from django.contrib import admin from django.http import HttpResponse, HttpResponseRedirect +from django.utils import timezone from django.utils.translation import gettext as _ from django.utils.safestring import mark_safe from django_weasyprint.views import WeasyTemplateResponse @@ -71,15 +73,26 @@ class AnexoAdmin(admin.ModelAdmin): ) -class AcompanhaFilter(admin.filters.RelatedFieldListFilter): - def __init__(self, *args, **kwargs): - super(AcompanhaFilter, self).__init__(*args, **kwargs) - servidores = ( - Servidor.objects.filter(convenio__isnull=False) - .order_by("nome_completo") - .distinct() +class ConvenioVigenteFilter(admin.filters.SimpleListFilter): + parameter_name = "vigencia" + title = _("Vigência") + + def lookups(self, request, model_admin): + return ( + ("vigentes", _("Vigentes")), + ("vencidos", _("Vencidos")), ) - self.lookup_choices = [(x.id, x) for x in servidores] + + def queryset(self, request, queryset): + if self.value() == "vigentes": + return queryset.filter( + Q(data_termino_vigencia__gte=timezone.localdate()) + | Q(data_termino_vigencia=None) + ) + elif self.value() == "vencidos": + return queryset.exclude(data_termino_vigencia=None).filter( + data_termino_vigencia__lt=timezone.localdate() + ) @admin.register(Projeto) @@ -166,9 +179,8 @@ class ConvenioAdmin(CartExportReportMixin, admin.ModelAdmin): ) list_filter = ( ("data_retorno_assinatura", DateRangeFilter), - ("data_sigi", DateRangeFilter), - ("data_solicitacao", DateRangeFilter), - ("data_sigad", DateRangeFilter), + ("data_termino_vigencia", DateRangeFilter), + ConvenioVigenteFilter, ("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter), "projeto", "casa_legislativa__tipo", @@ -257,7 +269,7 @@ class ConvenioAdmin(CartExportReportMixin, admin.ModelAdmin): def report_convenios_camaras(self, request): context = { "convenios": self.get_queryset(request).filter( - casa_legislativa__tipo__legislativo=False + casa_legislativa__tipo__sigla="CM" ), "title": _("Relatório de convenios de camaras municipais"), } @@ -276,7 +288,7 @@ class ConvenioAdmin(CartExportReportMixin, admin.ModelAdmin): def report_convenios_assembleia(self, request): context = { "convenios": self.get_queryset(request).filter( - casa_legislativa__tipo__legislativo=True + casa_legislativa__tipo__sigla="AL" ), "title": _("Relatório de convenios de assembleias legislativas"), } diff --git a/sigi/apps/convenios/reports.py b/sigi/apps/convenios/reports.py deleted file mode 100644 index 60f0fdd..0000000 --- a/sigi/apps/convenios/reports.py +++ /dev/null @@ -1,335 +0,0 @@ -from django.utils.translation import gettext as _ -from geraldo import ( - ReportBand, - ObjectValue, - Label, - ReportGroup, - FIELD_ACTION_SUM, -) -from reportlab.lib.units import cm - -from sigi.apps.relatorios.reports import ReportDefault - - -# from abc import ABCMeta - - -class CasasAderidasReport(object): - pass - - -class CasasNaoAderidasReport(object): - pass - - -class CasasComEquipamentosReport(object): - pass - - -class SemEquipamentosReport(object): - pass - - -class ConvenioReport(ReportDefault): - title = _("Relatório de Parcerias") - - class band_page_header(ReportDefault.band_page_header): - - label_top = ReportDefault.band_page_header.label_top - label_left = [0, 2.5, 6, 8, 10, 12, 14, 16] - elements = list(ReportDefault.band_page_header.elements) - height = 4.7 * cm - - elements += [ - Label( - text=_("UF"), - left=label_left[0] * cm, - top=label_top + 0.4 * cm, - ), - Label( - text=_("Municipio"), - left=label_left[1] * cm, - top=label_top + 0.4 * cm, - ), - Label( - text=_("Número do Convênio"), - left=label_left[2] * cm, - top=label_top, - width=2 * cm, - ), - Label( - text=_("Projeto"), - left=label_left[3] * cm, - top=label_top + 0.4 * cm, - width=2 * cm, - ), - Label( - text=_("Data do Convênio"), - left=label_left[4] * cm, - top=label_top, - width=2 * cm, - ), - Label( - text=_("Data de Publicação"), - left=label_left[5] * cm, - top=label_top, - width=2 * cm, - ), - Label( - text=_("Orgão"), - left=label_left[6] * cm, - top=label_top + 0.4 * cm, - width=2 * cm, - ), - ] - - class band_page_footer(ReportDefault.band_page_footer): - pass - - class band_detail(ReportDefault.band_detail): - - label_left = [0, 2.5, 6, 8, 10, 12, 14, 16] - - elements = [ - ObjectValue( - attribute_name="casa_legislativa.municipio.uf.sigla", - left=label_left[0] * cm, - ), - ObjectValue( - attribute_name="casa_legislativa.municipio.nome", - left=label_left[1] * cm, - ), - ObjectValue(attribute_name="num_convenio", left=label_left[2] * cm), - ObjectValue( - attribute_name="projeto.sigla", left=label_left[3] * cm - ), - ObjectValue( - attribute_name="data_retorno_assinatura", - left=label_left[4] * cm, - get_value=lambda instance: instance.data_retorno_assinatura.strftime( - "%d/%m/%Y" - ) - if instance.data_retorno_assinatura is not None - else "-", - ), - ObjectValue( - attribute_name="data_pub_diario", - left=label_left[5] * cm, - get_value=lambda instance: instance.data_pub_diario.strftime( - "%d/%m/%Y" - ) - if instance.data_pub_diario is not None - else "-", - ), - ObjectValue( - attribute_name="casa_legislativa.nome", left=label_left[6] * cm - ), - ] - - # groups = [ - # ReportGroup(attribute_name='casa_legislativa.municipio.uf', - # band_header=ReportBand( - # height=0.7 * cm, - # elements=[ - # ObjectValue(attribute_name='casa_legislativa.municipio.uf', - # get_Value=lambda instance: '%s: %s' % (_('Casa Legislativa'), instance.casa_legislativa.uf) - # ) - # ], - # borders={'top': True}, - # ) - # ) - # ] - - -class ConvenioReportSemAceite(ConvenioReport): - class band_page_header(ReportDefault.band_page_header): - - label_top = ReportDefault.band_page_header.label_top - label_left = [0, 2.5, 6, 8, 10, 12, 14, 16] - elements = list(ReportDefault.band_page_header.elements) - height = 4.7 * cm - - elements += [ - Label( - text=_("UF"), - left=label_left[0] * cm, - top=label_top + 0.4 * cm, - ), - Label( - text=_("Município"), - left=label_left[1] * cm, - top=label_top + 0.4 * cm, - ), - Label( - text=_("Número do Convênio"), - left=label_left[2] * cm, - top=label_top, - width=2 * cm, - ), - Label( - text=_("Projeto"), - left=label_left[3] * cm, - top=label_top, - width=2 * cm, - ), - Label( - text=_("Data do Convênio"), - left=label_left[4] * cm, - top=label_top, - width=2 * cm, - ), - Label( - text=_("Orgão"), - left=label_left[5] * cm, - top=label_top + 0.4 * cm, - width=2 * cm, - ), - ] - - class band_detail(ReportDefault.band_detail): - - label_left = [0, 2.5, 6, 8, 10, 12, 14, 16] - - elements = [ - ObjectValue( - attribute_name="casa_legislativa.municipio.uf.sigla", - left=label_left[0] * cm, - ), - ObjectValue( - attribute_name="casa_legislativa.municipio.nome", - left=label_left[1] * cm, - ), - ObjectValue(attribute_name="num_convenio", left=label_left[2] * cm), - ObjectValue( - attribute_name="projeto.sigla", - left=label_left[3], - ), - ObjectValue( - attribute_name="data_retorno_assinatura", - left=label_left[4] * cm, - get_value=lambda instance: instance.data_retorno_assinatura.strftime( - "%d/%m/%Y" - ) - if instance.data_retorno_assinatura is not None - else "-", - ), - ObjectValue( - attribute_name="casa_legislativa.nome", left=label_left[5] * cm - ), - ] - - -float_duas_casas = lambda instance: "%.2f" % (instance) - - -class ConvenioReportRegiao(ReportDefault): - title = _("Relatório de Parcerias por Região") - - class band_page_header(ReportDefault.band_page_header): - label_top = ReportDefault.band_page_header.label_top - label_left = [0.5, 6, 8, 10, 12, 14] - map(lambda x: x - 0.4, label_left) - - elements = list(ReportDefault.band_page_header.elements) - - elements += [ - Label( - text=_("UF"), - left=label_left[0] * cm, - top=label_top, - ), - Label( - text=_("Total"), - left=label_left[1] * cm, - top=label_top, - ), - Label( - text=_("Aderidas"), - left=label_left[2] * cm, - top=label_top, - ), - Label(text="%", left=label_left[3] * cm, top=label_top), - Label( - text=_("Ñ Aderidas"), - left=label_left[4] * cm, - top=label_top, - ), - Label(text="%", left=label_left[5] * cm, top=label_top), - ] - - class band_detail(ReportDefault.band_detail): - label_left = [0.5, 6, 8, 10, 12, 14] - display_inline = True - float_duas_casas = lambda instance: "%.2f" % ( - instance.porc_casas_aderidas - ) - default_style = {"fontName": "Helvetica", "fontSize": 11} - - elements = [ - ObjectValue( - attribute_name="estado", - left=label_left[0] * cm, - ), - ObjectValue( - attribute_name="quant_casas", - left=label_left[1] * cm, - ), - ObjectValue( - attribute_name="quant_casas_aderidas", left=label_left[2] * cm - ), - ObjectValue( - attribute_name="porc_casas_aderidas", left=label_left[3] * cm - ), - ObjectValue( - attribute_name="quant_casas_nao_aderidas", - left=label_left[4] * cm, - ), - ObjectValue( - attribute_name="porc_casas_nao_aderidas", - left=label_left[5] * cm, - ), - ] - - class band_summary(ReportBand): - label_left = [0.5, 6, 8, 10, 12, 14] - elements = [ - Label(text=_("Total"), top=0.1 * cm, left=label_left[0] * cm), - ObjectValue( - attribute_name="quant_casas", - action=FIELD_ACTION_SUM, - left=label_left[1] * cm, - ), - ObjectValue( - attribute_name="quant_casas_aderidas", - action=FIELD_ACTION_SUM, - left=label_left[2] * cm, - ), - # ObjectValue(attribute_name='porc_casas_aderidas', action=FIELD_ACTION_AVG, left=label_left[3]*cm, - # get_value= lambda instance : lambda instance: '%.2f' % (instance.porc_casas_aderidas), - # ), - ObjectValue( - attribute_name="quant_casas_nao_aderidas", - action=FIELD_ACTION_SUM, - left=label_left[4] * cm, - ), - # ObjectValue(attribute_name='porc_casas_nao_aderidas', left=label_left[5]*cm, - # get_value=lambda x: teste(), - # ), - ] - borders = {"top": True} - - -class ConvenioPorCMReport(ConvenioReport): - title = _("Relatório de Parcerias por Câmara Municipal") - - -class ConvenioPorALReport(ConvenioReport): - title = _("Relatório de Parcerias por Assembléia Legislativa") - - -class ConvenioReportSemAceiteCM(ConvenioReportSemAceite): - title = _("Relatório de Parcerias por Câmara Municipal") - - -class ConvenioReportSemAceiteAL(ConvenioReportSemAceite): - title = _("Relatório de Parcerias por Assembléia Legislativa") diff --git a/sigi/apps/home/views.py b/sigi/apps/home/views.py index f6dc4a0..4d71677 100644 --- a/sigi/apps/home/views.py +++ b/sigi/apps/home/views.py @@ -924,6 +924,9 @@ def busca_informacoes_camara(): convenios_com_aceite = convenios.exclude(data_termo_aceite=None) + camaras_projetos_vigentes = camaras.exclude(convenio=None).exclude( + convenio__data_termino_vigencia__lt="2022-10-26" + ) camaras_sem_processo = camaras.filter(convenio=None) # Criacao das listas para o resumo de camaras por projeto @@ -939,47 +942,33 @@ def busca_informacoes_camara(): lista_convenios_em_andamento = [] lista_camaras_equipadas = [] for projeto in projetos: - conv_sem_adesao_proj = convenios_sem_adesao.filter(projeto=projeto) - conv_com_adesao_proj = convenios_com_adesao.filter(projeto=projeto) conv_assinados_proj = convenios_assinados.filter(projeto=projeto) conv_em_andamento_proj = convenios_em_andamento.filter(projeto=projeto) - conv_equipadas_proj = convenios_com_aceite.filter(projeto=projeto) - - cabecalho_topo.append(projeto.sigla) - lista_total.append(camaras.filter(convenio__projeto=projeto).count()) - lista_nao_aderidas.append( - camaras.filter(convenio__in=conv_sem_adesao_proj).count() - ) - lista_aderidas.append( - camaras.filter(convenio__in=conv_com_adesao_proj).count() - ) - lista_convenios_assinados.append( - camaras.filter(convenio__in=conv_assinados_proj).count() - ) - lista_convenios_em_andamento.append( - camaras.filter(convenio__in=conv_em_andamento_proj).count() - ) - lista_camaras_equipadas.append( - camaras.filter(convenio__in=conv_equipadas_proj).count() - ) + total = camaras.filter(convenio__projeto=projeto).count() + conv_assinados = camaras.filter( + convenio__in=conv_assinados_proj + ).count() + conv_andamento = camaras.filter( + convenio__in=conv_em_andamento_proj + ).count() + + if (total + conv_assinados + conv_andamento) > 0: + cabecalho_topo.append(projeto.sigla) + lista_total.append(total) + lista_convenios_assinados.append(conv_assinados) + lista_convenios_em_andamento.append(conv_andamento) # Cabecalho da esquerda na tabela cabecalho_esquerda = ( _("Câmaras municipais"), - _("Câmaras municipais não aderidas"), - _("Câmaras municipais aderidas"), _("Câmaras municipais com convênios assinados"), _("Câmaras municipais convênios em andamento"), - _("Câmaras municipais equipadas"), ) linhas = ( lista_total, - lista_nao_aderidas, - lista_aderidas, lista_convenios_assinados, lista_convenios_em_andamento, - lista_camaras_equipadas, ) # Unindo as duas listas para que o cabecalho da esquerda fique junto com sua @@ -991,6 +980,7 @@ def busca_informacoes_camara(): "cabecalho_topo": cabecalho_topo, "lista_zip": lista_zip, "total_camaras": camaras.count(), + "total_camaras_projetos_vigentes": camaras_projetos_vigentes.count(), "camaras_sem_processo": camaras_sem_processo.count(), "sem_convenio": sem_convenio(), }