Browse Source

Fix: #3263

pull/3285/head
Leandro Roberto 5 years ago
parent
commit
2405beda24
  1. 47
      sapl/norma/models.py
  2. 20
      sapl/norma/views.py
  3. 4
      sapl/templates/norma/normajuridica_filter.html

47
sapl/norma/models.py

@ -1,8 +1,8 @@
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models
from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from model_utils import Choices
import reversion
@ -10,7 +10,7 @@ from sapl.base.models import Autor
from sapl.compilacao.models import TextoArticulado
from sapl.materia.models import MateriaLegislativa
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES,
restringe_tipos_de_arquivo_txt,
restringe_tipos_de_arquivo_txt,
texto_upload_path,
get_settings_auth_user_model,
OverwriteStorage)
@ -70,8 +70,51 @@ def norma_upload_path(instance, filename):
return texto_upload_path(instance, filename, subpath=instance.ano)
class NormaJuridicaManager(models.Manager):
use_for_related_fields = True
def normas_com_textos_articulados_pendentes(self):
qs = self.get_queryset()
qs = qs.filter(
texto_articulado__editable_only_by_owners=False)
q = models.Q(
texto_articulado__privacidade=0
) | models.Q(
texto_articulado__isnull=True
)
qs = qs.exclude(q)
for n in qs:
ta = n.texto_articulado.first()
count = ta.dispositivos_set.count()
if count == 1:
count = 0
elif count == 2:
d = ta.dispositivos_set.last()
if d.auto_inserido or not d.texto or d.texto == n.ementa:
count = 0
elif count == 3:
ds = ta.dispositivos_set.all()
if ds[1].auto_inserido and \
not d[2].dispositivo_pai and\
d[2].tipo_dispositivo.dispositivo_de_articulacao:
count = 0
if not count:
ta.dispositivos_set.filter(
dispositivo_pai__isnull=False).delete()
ta.delete()
return qs
@reversion.register()
class NormaJuridica(models.Model):
objects = NormaJuridicaManager()
ESFERA_FEDERACAO_CHOICES = Choices(
('M', 'municipal', _('Municipal')),
('E', 'estadual', _('Estadual')),

20
sapl/norma/views.py

@ -6,6 +6,7 @@ from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from django.http import HttpResponse, JsonResponse
from django.http.response import HttpResponseRedirect
from django.template import RequestContext, loader
from django.urls import reverse
from django.utils import timezone
@ -245,13 +246,20 @@ class NormaCrud(Crud):
class ListView(Crud.ListView):
def get(self, request, *args, **kwargs):
if AppConfig.attr('texto_articulado_norma'):
return Crud.ListView.get(self, request, *args, **kwargs)
else:
url = self.get_redirect_url(*args, **kwargs)
return HttpResponseRedirect(url)
def get_redirect_url(self, *args, **kwargs):
namespace = self.model._meta.app_config.name
return reverse('%s:%s' % (namespace, 'norma_pesquisa'))
def get_queryset(self):
qs = Crud.ListView.get_queryset(self)
q = Q(
texto_articulado__privacidade=0
) | Q(
texto_articulado__isnull=True)
qs = qs.exclude(q)
qs = NormaJuridica.objects.normas_com_textos_articulados_pendentes()
return qs.order_by('-texto_articulado__privacidade', '-ano', '-numero')
def get_context_data(self, **kwargs):

4
sapl/templates/norma/normajuridica_filter.html

@ -1,10 +1,10 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% load crispy_forms_tags common_tags %}
{% block actions %}
<div class="actions btn-group float-left" role="group">
{% if perms.compilacao.lock_unlock_textoarticulado %}
{% if perms.compilacao.lock_unlock_textoarticulado and 'texto_articulado_norma'|get_config_attr %}
<a href="{% url 'sapl.norma:normajuridica_list' %}" class="btn btn-sm btn-outline-primary">
{% blocktrans with verbose_name=view.verbose_name %}Pendências nos Textos Articulados{% endblocktrans %}
</a>

Loading…
Cancel
Save