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 @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',

22
sapl/norma/models.py

@ -231,12 +231,22 @@ 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_relacionada__data') 'norma_principal',
relacionadas = NormaRelacionada.objects.filter( 'norma_relacionada',
norma_relacionada=self.id).order_by('norma_principal__data', 'norma_principal__tipo',
'norma_relacionada__data') '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) return (principais, relacionadas)
def get_anexos_norma_juridica(self): def get_anexos_norma_juridica(self):

60
sapl/templates/compilacao/normajuridica_widget_top.html

@ -3,43 +3,39 @@
{% 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">
<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; <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 }}
</a> </a>
</div> </div>
</div> {% endif %}
{% endif %} {% endfor %}
{% 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 %}
{% 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 %} {% endwith %}
{% endif %}
</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 />

47
sapl/templates/norma/normajuridica_filter.html

@ -80,28 +80,30 @@
{% 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 %}
<em> {% if normas_relacionadas.0|length == 0 and normas_relacionadas.1|length == 0%}
Norma sem alterações posteriores. <em>
</em> Norma sem alterações posteriores.
{% else %} </em>
{% for p in n.get_normas_relacionadas.0 %} {% else %}
<div> {% for p in normas_relacionadas.0 %}
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp; <div>
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}"> <b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
{{ p.norma_relacionada }} <a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
</a> {{ p.norma_relacionada }}
</div> </a>
{% endfor %} </div>
{% for r in n.get_normas_relacionadas.1 %} {% endfor %}
<div> {% for r in normas_relacionadas.1 %}
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp; <div>
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}"> <b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
{{ r.norma_principal }} <a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
</a> {{ r.norma_principal }}
</div> </a>
{% endfor %} </div>
{% endif %} {% endfor %}
{% 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