Skip to content

Commit

Permalink
Otimiza recuperação de normas relacionadas (#3734)
Browse files Browse the repository at this point in the history
Co-authored-by: Edward <[email protected]>
  • Loading branch information
edwardoliveira authored Jul 31, 2024
1 parent 00e9ad4 commit 256f0ce
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 66 deletions.
19 changes: 18 additions & 1 deletion sapl/compilacao/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,6 @@ def has_edit_permission(self, request):

@classonlymethod
def update_or_create(cls, view_integracao, obj):

map_fields = view_integracao.map_fields
ta_values = getattr(view_integracao, 'ta_values', {})

Expand Down Expand Up @@ -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')
Expand Down
2 changes: 1 addition & 1 deletion sapl/compilacao/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
url(r'^(?P<ta_id>[0-9]+)/text$',
views.TextView.as_view(), name='ta_text'),

url(r'^(?P<ta_id>[0-9]+)/text/vigencia/(?P<sign>.+)/$',
url(r'^(?P<ta_id>[0-9]+)/text/vigencia/(?P<sign>.*:[A-Za-z0-9_-]+)/$',
views.TextView.as_view(), name='ta_vigencia'),

url(r'^(?P<ta_id>[0-9]+)/text/edit',
Expand Down
22 changes: 16 additions & 6 deletions sapl/norma/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,12 +231,22 @@ class Meta:
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):
Expand Down
60 changes: 28 additions & 32 deletions sapl/templates/compilacao/normajuridica_widget_top.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,39 @@
{% load common_tags%}

<div class="row py-4">
{% if n.get_normas_relacionadas.1|length > 0 %}
{% for r in n.get_normas_relacionadas.1 %}
{% if r.tipo_vinculo.revoga_integralmente %}
<div class="col-12">
<div class="text-danger">
{% with normas_relacionadas=n.get_normas_relacionadas %}
{% for r in normas_relacionadas.1 %}
{% if r.tipo_vinculo.revoga_integralmente %}
<div class="col-12">
<div class="text-danger">
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
{{ r.norma_principal.epigrafe }}
</a>
</div>
</div>
{% endif %}
{% endfor %}

{% for r in normas_relacionadas.1 %}
{% if not r.tipo_vinculo.revoga_integralmente %}
<div class="text-info col-{% if normas_relacionadas.1|length > 6 %}6{%else%}12{%endif%} small">
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
{{ r.norma_principal.epigrafe }}
</a>
</div>
</div>
{% 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 %}
<div class="text-info col-{% if n.get_normas_relacionadas.1|length > 6 %}6{%else%}12{%endif%} small">
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
{{ r.norma_principal.epigrafe }}
</a>
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endfor %}

{% if n.get_normas_relacionadas.0|length > 0 %}
{% for p in n.get_normas_relacionadas.0 %}
<div class="text-info col-{% if n.get_normas_relacionadas.0|length > 6 %}6{%else%}12{%endif%} small">
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
{{ p.norma_relacionada.epigrafe }}
</a>
</div>
{% endfor %}
{% endif %}
{% for p in normas_relacionadas.0 %}
<div class="text-info col-{% if normas_relacionadas.0|length > 6 %}6{%else%}12{%endif%} small">
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
{{ p.norma_relacionada.epigrafe }}
</a>
</div>
{% endfor %}
{% endwith %}

</div>
10 changes: 6 additions & 4 deletions sapl/templates/norma/normajuridica_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ <h2 class="legend">{{ fieldset.legend }}</h2>
<div class="row">
<div class="col-sm-12">
<p class="control-label">Normas Relacionadas</p>
{% 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 %}
<div class="form-control-static">
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
Expand All @@ -57,8 +58,8 @@ <h2 class="legend">{{ fieldset.legend }}</h2>
</div>
{% 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 %}
<div class="form-control-static">
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
Expand All @@ -67,6 +68,7 @@ <h2 class="legend">{{ fieldset.legend }}</h2>
</div>
{% endfor %}
{% endif %}
{% endwith %}
</div>
</div>
<hr />
Expand Down
47 changes: 25 additions & 22 deletions sapl/templates/norma/normajuridica_filter.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,28 +80,30 @@ <h3 style="text-align:right;">{% trans 'Pesquisa concluída com sucesso! Foi enc
{% endif %}
</td>
<td>
{% if n.get_normas_relacionadas.0|length == 0 and n.get_normas_relacionadas.1|length == 0%}
<em>
Norma sem alterações posteriores.
</em>
{% else %}
{% for p in n.get_normas_relacionadas.0 %}
<div>
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
{{ p.norma_relacionada }}
</a>
</div>
{% endfor %}
{% for r in n.get_normas_relacionadas.1 %}
<div>
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
{{ r.norma_principal }}
</a>
</div>
{% endfor %}
{% endif %}
{% with normas_relacionadas=n.get_normas_relacionadas %}
{% if normas_relacionadas.0|length == 0 and normas_relacionadas.1|length == 0%}
<em>
Norma sem alterações posteriores.
</em>
{% else %}
{% for p in normas_relacionadas.0 %}
<div>
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
{{ p.norma_relacionada }}
</a>
</div>
{% endfor %}
{% for r in normas_relacionadas.1 %}
<div>
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
{{ r.norma_principal }}
</a>
</div>
{% endfor %}
{% endif %}
{% endwith %}
{% if n.autoria_set.all %}
<strong>Autor:</strong>
{% for a in n.autoria_set.all %}
Expand All @@ -113,6 +115,7 @@ <h3 style="text-align:right;">{% trans 'Pesquisa concluída com sucesso! Foi enc
{% endfor %}
</br>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
Expand Down

0 comments on commit 256f0ce

Please sign in to comment.