From 8d476e7cc16cf07a96b259d86b346c5903ed0e95 Mon Sep 17 00:00:00 2001 From: Ricardo Lima Canela Date: Thu, 30 Jan 2020 14:33:50 -0300 Subject: [PATCH] =?UTF-8?q?Alterando=20consulta=20e=20apresenta=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20Anexadas=20ciclicas=20(#3080)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Alterando consulta e apresentação de Anexadas * refatorando nome de variaveis em materias_anexadas_ciclicas * refatorando funcao is_ciclo_unique --- sapl/base/views.py | 39 ++++++++++++++++++++-- sapl/templates/base/anexadas_ciclicas.html | 17 +++++----- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/sapl/base/views.py b/sapl/base/views.py index b24dd5d37..0d11c5692 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -1198,7 +1198,7 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): tabela.append( ('anexadas_ciclicas', 'Matérias Anexadas cíclicas', - len(anexados_ciclicos(True)) + len(materias_anexadas_ciclicas()) ) ) tabela.append( @@ -1209,10 +1209,43 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): ) return tabela +def materias_anexadas_ciclicas(): + ciclos = [] + + for a in Anexada.objects.select_related('materia_principal', + 'materia_anexada', + 'materia_principal__tipo', + 'materia_anexada__tipo'): + visitados = [a.materia_principal] + anexadas = [a.materia_anexada] + while len(anexadas) > 0: + ma = anexadas.pop() + if ma not in visitados: + visitados.append(ma) + anexadas.extend([a.materia_anexada for a in Anexada.objects.filter(materia_principal=ma)]) + else: + ciclo_list = visitados + [ma] + ciclos.append(ciclo_list) + + """ + Remove ciclos repetidos (ou semanticamente equivalentes). + Exemplo: A -> B -> A e B -> A -> B + """ + ciclos_set = [] + ciclos_unique = [e for e in ciclos if is_ciclo_unique(e, ciclos_set)] + + return ciclos_unique + +def is_ciclo_unique(ciclo, ciclos_set): + if set(ciclo) not in ciclos_set: + ciclos_set.append(set(ciclo)) + return True + else: + return False def anexados_ciclicos(ofMateriaLegislativa): ciclicos = [] - + if ofMateriaLegislativa: principais = Anexada.objects.values( 'materia_principal' @@ -1299,7 +1332,7 @@ class ListarAnexadasCiclicasView(PermissionRequiredMixin, ListView): paginate_by = 10 def get_queryset(self): - return anexados_ciclicos(True) + return materias_anexadas_ciclicas() def get_context_data(self, **kwargs): context = super( diff --git a/sapl/templates/base/anexadas_ciclicas.html b/sapl/templates/base/anexadas_ciclicas.html index 9008d3428..fdd68f175 100644 --- a/sapl/templates/base/anexadas_ciclicas.html +++ b/sapl/templates/base/anexadas_ciclicas.html @@ -10,19 +10,20 @@ - - + - {% for data, fim, inicio in anexadas_ciclicas %} + {% for ciclos in anexadas_ciclicas %} - - {% endfor %}
Matéria Fim do CicloMatéria Início do CicloCiclo
{{ data }} - {{ fim }} - - {{ inicio }} + {{ page_obj.start_index|add:forloop.counter0 }} ) + {% for ciclo in ciclos %} + {{ ciclo }} + {% if not forloop.last %} + -> + {% endif %} + {% endfor %}