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. 18
      sapl/norma/models.py
  4. 18
      sapl/templates/compilacao/normajuridica_widget_top.html
  5. 10
      sapl/templates/norma/normajuridica_detail.html
  6. 9
      sapl/templates/norma/normajuridica_filter.html

19
sapl/compilacao/models.py

@ -390,7 +390,6 @@ class TextoArticulado(TimestampedMixin):
@classonlymethod @classonlymethod
def update_or_create(cls, view_integracao, obj): def update_or_create(cls, view_integracao, obj):
map_fields = view_integracao.map_fields map_fields = view_integracao.map_fields
ta_values = getattr(view_integracao, 'ta_values', {}) ta_values = getattr(view_integracao, 'ta_values', {})
@ -1182,6 +1181,24 @@ class Dispositivo(BaseModel, TimestampedMixin):
help_text=_('O recorte de imagem ' help_text=_('O recorte de imagem '
'é possível após a atualização.')) 'é 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: class Meta:
verbose_name = _('Dispositivo') verbose_name = _('Dispositivo')
verbose_name_plural = _('Dispositivos') verbose_name_plural = _('Dispositivos')

2
sapl/compilacao/urls.py

@ -23,7 +23,7 @@ urlpatterns_compilacao = [
url(r'^(?P<ta_id>[0-9]+)/text$', url(r'^(?P<ta_id>[0-9]+)/text$',
views.TextView.as_view(), name='ta_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'), views.TextView.as_view(), name='ta_vigencia'),
url(r'^(?P<ta_id>[0-9]+)/text/edit', url(r'^(?P<ta_id>[0-9]+)/text/edit',

18
sapl/norma/models.py

@ -231,11 +231,21 @@ class NormaJuridica(models.Model):
ordering = ['-data', '-numero'] ordering = ['-data', '-numero']
def get_normas_relacionadas(self): def get_normas_relacionadas(self):
principais = NormaRelacionada.objects.filter( principais = NormaRelacionada.objects.\
norma_principal=self.id).order_by('norma_principal__data', 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') 'norma_relacionada__data')
relacionadas = NormaRelacionada.objects.filter( relacionadas = NormaRelacionada.objects.\
norma_relacionada=self.id).order_by('norma_principal__data', 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') 'norma_relacionada__data')
return (principais, relacionadas) return (principais, relacionadas)

18
sapl/templates/compilacao/normajuridica_widget_top.html

@ -3,8 +3,8 @@
{% load common_tags%} {% load common_tags%}
<div class="row py-4"> <div class="row py-4">
{% if n.get_normas_relacionadas.1|length > 0 %} {% with normas_relacionadas=n.get_normas_relacionadas %}
{% for r in n.get_normas_relacionadas.1 %} {% for r in normas_relacionadas.1 %}
{% if r.tipo_vinculo.revoga_integralmente %} {% if r.tipo_vinculo.revoga_integralmente %}
<div class="col-12"> <div class="col-12">
<div class="text-danger"> <div class="text-danger">
@ -16,12 +16,10 @@
</div> </div>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %}
{% if n.get_normas_relacionadas.1|length > 0 %} {% for r in normas_relacionadas.1 %}
{% for r in n.get_normas_relacionadas.1 %}
{% if not r.tipo_vinculo.revoga_integralmente %} {% 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"> <div class="text-info col-{% if normas_relacionadas.1|length > 6 %}6{%else%}12{%endif%} small">
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp; <b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}"> <a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
{{ r.norma_principal.epigrafe }} {{ r.norma_principal.epigrafe }}
@ -29,17 +27,15 @@
</div> </div>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %}
{% if n.get_normas_relacionadas.0|length > 0 %} {% for p in normas_relacionadas.0 %}
{% for p in n.get_normas_relacionadas.0 %} <div class="text-info col-{% if normas_relacionadas.0|length > 6 %}6{%else%}12{%endif%} small">
<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; <b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}"> <a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
{{ p.norma_relacionada.epigrafe }} {{ p.norma_relacionada.epigrafe }}
</a> </a>
</div> </div>
{% endfor %} {% endfor %}
{% endif %} {% endwith %}
</div> </div>

10
sapl/templates/norma/normajuridica_detail.html

@ -47,8 +47,9 @@
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<p class="control-label">Normas Relacionadas</p> <p class="control-label">Normas Relacionadas</p>
{% if object.get_normas_relacionadas.0|length > 0 %} {% with normas_relacionadas=object.get_normas_relacionadas %}
{% for p in object.get_normas_relacionadas.0 %} {% if normas_relacionadas.0|length > 0 %}
{% for p in normas_relacionadas.0 %}
<div class="form-control-static"> <div class="form-control-static">
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp; <b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}"> <a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
@ -57,8 +58,8 @@
</div> </div>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if object.get_normas_relacionadas.1|length > 0 %} {% if normas_relacionadas.1|length > 0 %}
{% for r in object.get_normas_relacionadas.1 %} {% for r in normas_relacionadas.1 %}
<div class="form-control-static"> <div class="form-control-static">
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp; <b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}"> <a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
@ -67,6 +68,7 @@
</div> </div>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endwith %}
</div> </div>
</div> </div>
<hr /> <hr />

9
sapl/templates/norma/normajuridica_filter.html

@ -80,12 +80,13 @@
{% endif %} {% endif %}
</td> </td>
<td> <td>
{% if n.get_normas_relacionadas.0|length == 0 and n.get_normas_relacionadas.1|length == 0%} {% with normas_relacionadas=n.get_normas_relacionadas %}
{% if normas_relacionadas.0|length == 0 and normas_relacionadas.1|length == 0%}
<em> <em>
Norma sem alterações posteriores. Norma sem alterações posteriores.
</em> </em>
{% else %} {% else %}
{% for p in n.get_normas_relacionadas.0 %} {% for p in normas_relacionadas.0 %}
<div> <div>
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp; <b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}"> <a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
@ -93,7 +94,7 @@
</a> </a>
</div> </div>
{% endfor %} {% endfor %}
{% for r in n.get_normas_relacionadas.1 %} {% for r in normas_relacionadas.1 %}
<div> <div>
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp; <b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}"> <a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
@ -102,6 +103,7 @@
</div> </div>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endwith %}
{% if n.autoria_set.all %} {% if n.autoria_set.all %}
<strong>Autor:</strong> <strong>Autor:</strong>
{% for a in n.autoria_set.all %} {% for a in n.autoria_set.all %}
@ -113,6 +115,7 @@
{% endfor %} {% endfor %}
</br> </br>
{% endif %} {% endif %}
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

Loading…
Cancel
Save