From fd86b7b79f821aa6c482a25563f63b44b723995e Mon Sep 17 00:00:00 2001 From: Alvaro Gouvea <44756822+AlGouvea@users.noreply.github.com> Date: Thu, 4 Nov 2021 10:46:12 -0300 Subject: [PATCH] =?UTF-8?q?Otimiza=C3=A7=C3=A3o=20de=20consultas=20em=20vi?= =?UTF-8?q?ews=20(#3474)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Otimização de consultas em views * Update sapl/protocoloadm/views.py Co-authored-by: Edward <9326037+edwardoliveira@users.noreply.github.com> --- sapl/comissoes/views.py | 14 ++++---- sapl/materia/views.py | 9 ++++-- sapl/protocoloadm/views.py | 66 ++++++++++++++++++++------------------ 3 files changed, 49 insertions(+), 40 deletions(-) diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 48a19ddf6..0c9329f05 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -351,15 +351,17 @@ class AdicionaPautaView(PermissionRequiredMixin, FilterView): context['root_pk'] = context['object'].comissao.pk qr = self.request.GET.copy() - materias_pauta = PautaReuniao.objects.filter(reuniao=context['object']) nao_listar = [mp.materia.pk for mp in materias_pauta] - context['object_list'] = context['object_list'].filter( - tramitacao__unidade_tramitacao_destino__comissao=context['root_pk'] - ).exclude(materia__pk__in=nao_listar).order_by( - "materia__tipo", "-materia__ano", "materia__numero" - ) + if not len(qr): + context['object_list'] = [] + else: + context['object_list'] = context['object_list'].filter( + tramitacao__unidade_tramitacao_destino__comissao=context['root_pk'] + ).exclude(materia__pk__in=nao_listar).order_by( + "materia__tipo", "-materia__ano", "materia__numero" + ) context['numero_resultados'] = len(context['object_list']) context['show_results'] = show_results_filter_set(qr) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 7dc1f90be..1be993568 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -2263,8 +2263,13 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): qr = self.request.GET.copy() context['tipos_docs'] = TipoDocumento.objects.all() - context['object_list'] = context['object_list'].order_by( - 'ano', 'numero') + + if not len(qr): + context['object_list'] = [] + else: + context['object_list'] = context['object_list'].order_by( + 'ano', 'numero') + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['show_results'] = show_results_filter_set(qr) diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 45180a5bc..01e525750 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -1122,38 +1122,40 @@ class DocumentoAnexadoEmLoteView(PermissionRequiredMixin, FilterView): return context qr = self.request.GET.copy() - context['temp_object_list'] = context['object_list'].order_by( - 'numero', '-ano' - ) - - context['object_list'] = [] - for obj in context['temp_object_list']: - if not obj.pk == int(context['root_pk']): - documento_principal = DocumentoAdministrativo.objects.get( - id=context['root_pk']) - documento_anexado = obj - is_anexado = Anexado.objects.filter(documento_principal=documento_principal, - documento_anexado=documento_anexado).exists() - if not is_anexado: - ciclico = False - anexados_anexado = Anexado.objects.filter( - documento_principal=documento_anexado) - - while anexados_anexado and not ciclico: - anexados = [] - - for anexo in anexados_anexado: - - if documento_principal == anexo.documento_anexado: - ciclico = True - else: - for a in Anexado.objects.filter(documento_principal=anexo.documento_anexado): - anexados.append(a) - - anexados_anexado = anexados - - if not ciclico: - context['object_list'].append(obj) + if not len(qr): + context['object_list'] = [] + else: + context['temp_object_list'] = context['object_list'].order_by( + 'numero', '-ano') + context['object_list'] = [] + for obj in context['temp_object_list']: + if not obj.pk == int(context['root_pk']): + documento_principal = DocumentoAdministrativo.objects.get( + id=context['root_pk']) + documento_anexado = obj + is_anexado = Anexado.objects.filter(documento_principal=documento_principal, + documento_anexado=documento_anexado).exists() + if not is_anexado: + ciclico = False + anexados_anexado = Anexado.objects.filter( + documento_principal=documento_anexado) + + while anexados_anexado and not ciclico: + anexados = [] + + for anexo in anexados_anexado: + + if documento_principal == anexo.documento_anexado: + ciclico = True + else: + for a in Anexado.objects.filter(documento_principal=anexo.documento_anexado): + anexados.append(a) + + anexados_anexado = anexados + + if not ciclico: + context['object_list'].append(obj) + context['numero_res'] = len(context['object_list'])