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.contrib.contenttypes.fields import GenericRelation
from django.db import models from django.db import models
from django.template import defaultfilters from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
import reversion import reversion
@ -10,7 +10,7 @@ from sapl.base.models import Autor
from sapl.compilacao.models import TextoArticulado from sapl.compilacao.models import TextoArticulado
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES,
restringe_tipos_de_arquivo_txt, restringe_tipos_de_arquivo_txt,
texto_upload_path, texto_upload_path,
get_settings_auth_user_model, get_settings_auth_user_model,
OverwriteStorage) OverwriteStorage)
@ -70,8 +70,51 @@ def norma_upload_path(instance, filename):
return texto_upload_path(instance, filename, subpath=instance.ano) 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() @reversion.register()
class NormaJuridica(models.Model): class NormaJuridica(models.Model):
objects = NormaJuridicaManager()
ESFERA_FEDERACAO_CHOICES = Choices( ESFERA_FEDERACAO_CHOICES = Choices(
('M', 'municipal', _('Municipal')), ('M', 'municipal', _('Municipal')),
('E', 'estadual', _('Estadual')), ('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.core.exceptions import ObjectDoesNotExist
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.http.response import HttpResponseRedirect
from django.template import RequestContext, loader from django.template import RequestContext, loader
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
@ -245,13 +246,20 @@ class NormaCrud(Crud):
class ListView(Crud.ListView): 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): def get_queryset(self):
qs = Crud.ListView.get_queryset(self) qs = NormaJuridica.objects.normas_com_textos_articulados_pendentes()
q = Q(
texto_articulado__privacidade=0
) | Q(
texto_articulado__isnull=True)
qs = qs.exclude(q)
return qs.order_by('-texto_articulado__privacidade', '-ano', '-numero') return qs.order_by('-texto_articulado__privacidade', '-ano', '-numero')
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):

4
sapl/templates/norma/normajuridica_filter.html

@ -1,10 +1,10 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags common_tags %}
{% block actions %} {% block actions %}
<div class="actions btn-group float-left" role="group"> <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"> <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 %} {% blocktrans with verbose_name=view.verbose_name %}Pendências nos Textos Articulados{% endblocktrans %}
</a> </a>

Loading…
Cancel
Save