Browse Source

Otimiza recuperação de normas relacionadas (#3734)

Co-authored-by: Edward <9326037+edwardoliveira@users.noreply.github.com>
pull/3721/merge
Edward 5 months ago
committed by GitHub
parent
commit
256f0ce73a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 19
      sapl/compilacao/models.py
  2. 2
      sapl/compilacao/urls.py
  3. 22
      sapl/norma/models.py
  4. 60
      sapl/templates/compilacao/normajuridica_widget_top.html
  5. 10
      sapl/templates/norma/normajuridica_detail.html
  6. 47
      sapl/templates/norma/normajuridica_filter.html

19
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')

2
sapl/compilacao/urls.py

@ -23,7 +23,7 @@ urlpatterns_compilacao = [
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',

22
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):

60
sapl/templates/compilacao/normajuridica_widget_top.html

@ -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
sapl/templates/norma/normajuridica_detail.html

@ -47,8 +47,9 @@
<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 %}">
@ -57,8 +58,8 @@
</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 %}">
@ -67,6 +68,7 @@
</div>
{% endfor %}
{% endif %}
{% endwith %}
</div>
</div>
<hr />

47
sapl/templates/norma/normajuridica_filter.html

@ -80,28 +80,30 @@
{% 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 %}
@ -113,6 +115,7 @@
{% endfor %}
</br>
{% endif %}
</td>
</tr>
{% endfor %}
</table>

Loading…
Cancel
Save