diff --git a/sapl/compilacao/models.py b/sapl/compilacao/models.py index 783e28ce0..7b54fcb67 100644 --- a/sapl/compilacao/models.py +++ b/sapl/compilacao/models.py @@ -390,7 +390,6 @@ class TextoArticulado(TimestampedMixin): @classonlymethod def update_or_create(cls, view_integracao, obj): - map_fields = view_integracao.map_fields ta_values = getattr(view_integracao, 'ta_values', {}) @@ -1182,6 +1181,24 @@ class Dispositivo(BaseModel, TimestampedMixin): help_text=_('O recorte de imagem ' 'é possível após a atualização.')) + # define custom manager + class SelectRelatedManager(models.Manager): + def get_queryset(self): + return super().get_queryset().select_related('tipo_dispositivo', + 'publicacao', + 'ta', + 'ta_publicado', + 'dispositivo_subsequente', + 'dispositivo_substituido', + 'dispositivo_pai', + 'dispositivo_pai__tipo_dispositivo', + 'dispositivo_raiz', + 'dispositivo_vigencia', + 'dispositivo_atualizador' + ) + # Replace the default manager with custom manager + objects = SelectRelatedManager() + class Meta: verbose_name = _('Dispositivo') verbose_name_plural = _('Dispositivos') diff --git a/sapl/compilacao/urls.py b/sapl/compilacao/urls.py index 7ca2ad463..2b9438ca0 100644 --- a/sapl/compilacao/urls.py +++ b/sapl/compilacao/urls.py @@ -23,7 +23,7 @@ urlpatterns_compilacao = [ url(r'^(?P[0-9]+)/text$', views.TextView.as_view(), name='ta_text'), - url(r'^(?P[0-9]+)/text/vigencia/(?P.+)/$', + url(r'^(?P[0-9]+)/text/vigencia/(?P.*:[A-Za-z0-9_-]+)/$', views.TextView.as_view(), name='ta_vigencia'), url(r'^(?P[0-9]+)/text/edit', diff --git a/sapl/norma/models.py b/sapl/norma/models.py index cd8a81745..df672294d 100644 --- a/sapl/norma/models.py +++ b/sapl/norma/models.py @@ -231,12 +231,22 @@ class NormaJuridica(models.Model): ordering = ['-data', '-numero'] def get_normas_relacionadas(self): - principais = NormaRelacionada.objects.filter( - norma_principal=self.id).order_by('norma_principal__data', - 'norma_relacionada__data') - relacionadas = NormaRelacionada.objects.filter( - norma_relacionada=self.id).order_by('norma_principal__data', - 'norma_relacionada__data') + principais = NormaRelacionada.objects.\ + select_related('tipo_vinculo', + 'norma_principal', + 'norma_relacionada', + 'norma_principal__tipo', + 'norma_relacionada__tipo').\ + filter(norma_principal=self.id).order_by('norma_principal__data', + 'norma_relacionada__data') + relacionadas = NormaRelacionada.objects.\ + select_related('tipo_vinculo', + 'norma_principal', + 'norma_relacionada', + 'norma_principal__tipo', + 'norma_relacionada__tipo').\ + filter(norma_relacionada=self.id).order_by('norma_principal__data', + 'norma_relacionada__data') return (principais, relacionadas) def get_anexos_norma_juridica(self): diff --git a/sapl/templates/compilacao/normajuridica_widget_top.html b/sapl/templates/compilacao/normajuridica_widget_top.html index 8b1b8a0a0..38dce066e 100644 --- a/sapl/templates/compilacao/normajuridica_widget_top.html +++ b/sapl/templates/compilacao/normajuridica_widget_top.html @@ -3,43 +3,39 @@ {% load common_tags%}
- {% if n.get_normas_relacionadas.1|length > 0 %} - {% for r in n.get_normas_relacionadas.1 %} - {% if r.tipo_vinculo.revoga_integralmente %} -
-
+ {% with normas_relacionadas=n.get_normas_relacionadas %} + {% for r in normas_relacionadas.1 %} + {% if r.tipo_vinculo.revoga_integralmente %} +
+
+ {{ r.tipo_vinculo.descricao_passiva }}  + + {{ r.norma_principal.epigrafe }} + +
+
+ {% endif %} + {% endfor %} + + {% for r in normas_relacionadas.1 %} + {% if not r.tipo_vinculo.revoga_integralmente %} +
{{ r.tipo_vinculo.descricao_passiva }}  {{ r.norma_principal.epigrafe }}
-
- {% endif %} - {% endfor %} - {% endif %} - - {% if n.get_normas_relacionadas.1|length > 0 %} - {% for r in n.get_normas_relacionadas.1 %} - {% if not r.tipo_vinculo.revoga_integralmente %} -
- {{ r.tipo_vinculo.descricao_passiva }}  - - {{ r.norma_principal.epigrafe }} - -
- {% endif %} - {% endfor %} - {% endif %} + {% endif %} + {% endfor %} - {% if n.get_normas_relacionadas.0|length > 0 %} - {% for p in n.get_normas_relacionadas.0 %} -
- {{ p.tipo_vinculo.descricao_ativa }}  - - {{ p.norma_relacionada.epigrafe }} - -
- {% endfor %} - {% endif %} + {% for p in normas_relacionadas.0 %} +
+ {{ p.tipo_vinculo.descricao_ativa }}  + + {{ p.norma_relacionada.epigrafe }} + +
+ {% endfor %} + {% endwith %}
diff --git a/sapl/templates/norma/normajuridica_detail.html b/sapl/templates/norma/normajuridica_detail.html index c618c81d2..8f665b1be 100644 --- a/sapl/templates/norma/normajuridica_detail.html +++ b/sapl/templates/norma/normajuridica_detail.html @@ -47,8 +47,9 @@

Normas Relacionadas

- {% if object.get_normas_relacionadas.0|length > 0 %} - {% for p in object.get_normas_relacionadas.0 %} + {% with normas_relacionadas=object.get_normas_relacionadas %} + {% if normas_relacionadas.0|length > 0 %} + {% for p in normas_relacionadas.0 %}
{{ p.tipo_vinculo.descricao_ativa }}  @@ -57,8 +58,8 @@
{% endfor %} {% endif %} - {% if object.get_normas_relacionadas.1|length > 0 %} - {% for r in object.get_normas_relacionadas.1 %} + {% if normas_relacionadas.1|length > 0 %} + {% for r in normas_relacionadas.1 %} {% endfor %} {% endif %} + {% endwith %}

diff --git a/sapl/templates/norma/normajuridica_filter.html b/sapl/templates/norma/normajuridica_filter.html index 33f0b8993..5af318ff8 100644 --- a/sapl/templates/norma/normajuridica_filter.html +++ b/sapl/templates/norma/normajuridica_filter.html @@ -80,28 +80,30 @@ {% endif %} - {% if n.get_normas_relacionadas.0|length == 0 and n.get_normas_relacionadas.1|length == 0%} - - Norma sem alterações posteriores. - - {% else %} - {% for p in n.get_normas_relacionadas.0 %} -
- {% endfor %} - {% for r in n.get_normas_relacionadas.1 %} -
- {{ r.tipo_vinculo.descricao_passiva }}  - - {{ r.norma_principal }} - -
- {% endfor %} - {% endif %} + {% with normas_relacionadas=n.get_normas_relacionadas %} + {% if normas_relacionadas.0|length == 0 and normas_relacionadas.1|length == 0%} + + Norma sem alterações posteriores. + + {% else %} + {% for p in normas_relacionadas.0 %} +
+ {{ p.tipo_vinculo.descricao_ativa }}  + + {{ p.norma_relacionada }} + +
+ {% endfor %} + {% for r in normas_relacionadas.1 %} +
+ {{ r.tipo_vinculo.descricao_passiva }}  + + {{ r.norma_principal }} + +
+ {% endfor %} + {% endif %} + {% endwith %} {% if n.autoria_set.all %} Autor: {% for a in n.autoria_set.all %} @@ -113,6 +115,7 @@ {% endfor %}
{% endif %} + {% endfor %}