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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with
94 additions and
66 deletions
-
sapl/compilacao/models.py
-
sapl/compilacao/urls.py
-
sapl/norma/models.py
-
sapl/templates/compilacao/normajuridica_widget_top.html
-
sapl/templates/norma/normajuridica_detail.html
-
sapl/templates/norma/normajuridica_filter.html
|
|
@ -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') |
|
|
|
|
|
@ -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', |
|
|
|
|
|
@ -231,11 +231,21 @@ 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', |
|
|
|
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.filter( |
|
|
|
norma_relacionada=self.id).order_by('norma_principal__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) |
|
|
|
|
|
|
|
|
|
@ -3,8 +3,8 @@ |
|
|
|
{% load common_tags%} |
|
|
|
|
|
|
|
<div class="row py-4"> |
|
|
|
{% if n.get_normas_relacionadas.1|length > 0 %} |
|
|
|
{% for r in n.get_normas_relacionadas.1 %} |
|
|
|
{% 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"> |
|
|
@ -16,12 +16,10 @@ |
|
|
|
</div> |
|
|
|
{% endif %} |
|
|
|
{% endfor %} |
|
|
|
{% endif %} |
|
|
|
|
|
|
|
{% if n.get_normas_relacionadas.1|length > 0 %} |
|
|
|
{% for r in n.get_normas_relacionadas.1 %} |
|
|
|
{% for r in 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"> |
|
|
|
<div class="text-info col-{% if normas_relacionadas.1|length > 6 %}6{%else%}12{%endif%} small"> |
|
|
|
<b>{{ r.tipo_vinculo.descricao_passiva }}</b> |
|
|
|
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}"> |
|
|
|
{{ r.norma_principal.epigrafe }} |
|
|
@ -29,17 +27,15 @@ |
|
|
|
</div> |
|
|
|
{% endif %} |
|
|
|
{% endfor %} |
|
|
|
{% endif %} |
|
|
|
|
|
|
|
{% 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"> |
|
|
|
{% 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> |
|
|
|
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}"> |
|
|
|
{{ p.norma_relacionada.epigrafe }} |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
{% endfor %} |
|
|
|
{% endif %} |
|
|
|
{% endwith %} |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
@ -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> |
|
|
|
<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> |
|
|
|
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}"> |
|
|
@ -67,6 +68,7 @@ |
|
|
|
</div> |
|
|
|
{% endfor %} |
|
|
|
{% endif %} |
|
|
|
{% endwith %} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<hr /> |
|
|
|
|
|
@ -80,12 +80,13 @@ |
|
|
|
{% endif %} |
|
|
|
</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> |
|
|
|
Norma sem alterações posteriores. |
|
|
|
</em> |
|
|
|
{% else %} |
|
|
|
{% for p in n.get_normas_relacionadas.0 %} |
|
|
|
{% for p in normas_relacionadas.0 %} |
|
|
|
<div> |
|
|
|
<b>{{ p.tipo_vinculo.descricao_ativa }}</b> |
|
|
|
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}"> |
|
|
@ -93,7 +94,7 @@ |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
{% endfor %} |
|
|
|
{% for r in n.get_normas_relacionadas.1 %} |
|
|
|
{% for r in normas_relacionadas.1 %} |
|
|
|
<div> |
|
|
|
<b>{{ r.tipo_vinculo.descricao_passiva }}</b> |
|
|
|
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}"> |
|
|
@ -102,6 +103,7 @@ |
|
|
|
</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> |
|
|
|