Browse Source

Minimiza efeitos colaterais causados pelo commit 8d0480c7d4

pull/2162/head
Leandro Roberto 6 years ago
parent
commit
2569f5365a
  1. 5
      sapl/compilacao/models.py
  2. 3
      sapl/compilacao/views.py
  3. 27
      sapl/materia/models.py
  4. 25
      sapl/materia/views.py
  5. 10
      sapl/norma/models.py
  6. 15
      sapl/norma/views.py
  7. 4
      sapl/templates/compilacao/textoarticulado_detail.html
  8. 4
      sapl/templates/norma/normajuridica_detail.html

5
sapl/compilacao/models.py

@ -237,7 +237,10 @@ class TextoArticulado(TimestampedMixin):
def __str__(self):
if self.content_object:
return str(self.content_object)
assert hasattr(self.content_object, 'epigrafe'), _(
'Modelos integrados aos Textos Articulados devem possuir a '
'property "epigrafe"')
return str(self.content_object.epigrafe)
else:
return _('%(tipo)s%(numero)s de %(data)s') % {
'tipo': self.tipo_ta,

3
sapl/compilacao/views.py

@ -137,6 +137,7 @@ class IntegracaoTaView(TemplateView):
'observacao': 'observacao',
'numero': 'numero',
'ano': 'ano',
'tipo': 'tipo',
}
Caso o model de integração não possua um dos campos,
@ -562,7 +563,7 @@ class TaDetailView(CompMixin, DetailView):
'Metadados para o Texto Articulado de %s\n'
'<small>%s</small>') % (
self.get_object().content_object._meta.verbose_name_plural,
self.get_object().content_object)
self.get_object().content_object.epigrafe)
else:
return self.get_object()

27
sapl/materia/models.py

@ -1,14 +1,15 @@
import reversion
from django.contrib.auth.models import Group
from django.contrib.contenttypes.fields import GenericRelation
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.db.models.functions import Concat
from django.template import defaultfilters
from django.utils import formats, timezone
from django.utils.translation import ugettext_lazy as _
from model_utils import Choices
import reversion
from sapl.base.models import SEQUENCIA_NUMERACAO, Autor
from sapl.comissoes.models import Comissao
@ -19,6 +20,7 @@ from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SaplGenericForeignKey,
SaplGenericRelation, restringe_tipos_de_arquivo_txt,
texto_upload_path)
EM_TRAMITACAO = [(1, 'Sim'),
(0, 'Não')]
@ -242,6 +244,16 @@ class MateriaLegislativa(models.Model):
return _('%(tipo)s%(numero)s de %(ano)s') % {
'tipo': self.tipo, 'numero': self.numero, 'ano': self.ano}
@property
def epigrafe(self):
return _('%(tipo)s%(numero)s de %(data)s') % {
'tipo': self.tipo,
'numero': self.numero,
'data': defaultfilters.date(
self.data_apresentacao,
"d \d\e F \d\e Y"
)}
def data_entrada_protocolo(self):
'''
hack: recuperar a data de entrada do protocolo sem gerar
@ -425,7 +437,8 @@ class DocumentoAcessorio(models.Model):
verbose_name=_('Tipo'))
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
data = models.DateField(blank=True, null=True, default=None, verbose_name=_('Data'))
data = models.DateField(blank=True, null=True,
default=None, verbose_name=_('Data'))
autor = models.CharField(
max_length=50, blank=True, verbose_name=_('Autor'))
ementa = models.TextField(blank=True, verbose_name=_('Ementa'))
@ -756,6 +769,16 @@ class Proposicao(models.Model):
self.id,
descricao)
@property
def epigrafe(self):
return _('%(tipo)s%(numero)s de %(data)s') % {
'tipo': self.tipo,
'numero': self.numero,
'data': defaultfilters.date(
self.data_envio if self.data_envio else timezone.now(),
"d \d\e F \d\e Y"
)}
def delete(self, using=None, keep_parents=False):
if self.texto_original:
self.texto_original.delete()

25
sapl/materia/views.py

@ -2,7 +2,6 @@ from datetime import datetime
from random import choice
from string import ascii_letters, digits
import weasyprint
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML
from django.contrib import messages
@ -17,10 +16,11 @@ from django.shortcuts import get_object_or_404, redirect
from django.template import RequestContext, loader
from django.utils import formats, timezone
from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView, ListView, TemplateView, CreateView, UpdateView
from django.views.generic import ListView, TemplateView, CreateView, UpdateView
from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView
from django_filters.views import FilterView
import weasyprint
import sapl
from sapl.base.models import Autor, CasaLegislativa
@ -67,6 +67,7 @@ from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria,
TipoProposicao, Tramitacao, UnidadeTramitacao)
from .signals import tramitacao_signal
AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia')
OrigemCrud = CrudAux.build(Origem, '')
@ -96,9 +97,10 @@ def proposicao_texto(request, pk):
if proposicao.texto_original:
if (not proposicao.data_recebimento and
proposicao.autor.user_id != request.user.id):
messages.error(request, _('Você não tem permissão para acessar o texto original.'))
messages.error(request, _(
'Você não tem permissão para acessar o texto original.'))
return redirect(reverse('sapl.materia:proposicao_detail',
kwargs={'pk':pk}))
kwargs={'pk': pk}))
arquivo = proposicao.texto_original
@ -221,6 +223,7 @@ class MateriaTaView(IntegracaoTaView):
'observacao': None,
'numero': 'numero',
'ano': 'ano',
'tipo': 'tipo',
}
map_funcs = {
'publicacao_func': False,
@ -251,6 +254,7 @@ class ProposicaoTaView(IntegracaoTaView):
'observacao': None,
'numero': 'numero_proposicao',
'ano': 'ano',
'tipo': 'tipo',
}
map_funcs = {
'publicacao_func': False
@ -1034,7 +1038,7 @@ class TramitacaoCrud(MasterDetailCrud):
if local:
initial['unidade_tramitacao_local'
] = local.unidade_tramitacao_destino.pk
] = local.unidade_tramitacao_destino.pk
else:
initial['unidade_tramitacao_local'] = ''
initial['data_tramitacao'] = timezone.now().date()
@ -2035,10 +2039,13 @@ class ExcluirTramitacaoEmLoteView(PermissionRequiredMixin, FormView):
def form_valid(self, form):
tramitacao_set = Tramitacao.objects.filter(data_tramitacao=form.cleaned_data['data_tramitacao'],
unidade_tramitacao_local=form.cleaned_data['unidade_tramitacao_local'],
unidade_tramitacao_destino=form.cleaned_data['unidade_tramitacao_destino'],
status=form.cleaned_data['status'])
tramitacao_set = Tramitacao.objects.filter(
data_tramitacao=form.cleaned_data['data_tramitacao'],
unidade_tramitacao_local=form.cleaned_data[
'unidade_tramitacao_local'],
unidade_tramitacao_destino=form.cleaned_data[
'unidade_tramitacao_destino'],
status=form.cleaned_data['status'])
for tramitacao in tramitacao_set:
materia = tramitacao.materia
if tramitacao == materia.tramitacao_set.last():

10
sapl/norma/models.py

@ -1,9 +1,9 @@
import reversion
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 model_utils import Choices
import reversion
from sapl.compilacao.models import TextoArticulado
from sapl.materia.models import MateriaLegislativa
@ -146,12 +146,18 @@ class NormaJuridica(models.Model):
norma=self.id)
return anexos
def __str__(self):
return _('%(numero)s de %(data)s') % {
'numero': self.numero,
'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")}
@property
def epigrafe(self):
return _('%(tipo)s%(numero)s de %(data)s') % {
'tipo': self.tipo,
'numero': self.numero,
'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")}
def delete(self, using=None, keep_parents=False):
if self.texto_integral:
self.texto_integral.delete()

15
sapl/norma/views.py

@ -1,6 +1,6 @@
import re
import weasyprint
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
@ -12,6 +12,7 @@ from django.views.generic import TemplateView, UpdateView
from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView
from django_filters.views import FilterView
import weasyprint
from sapl.base.models import AppConfig
from sapl.compilacao.views import IntegracaoTaView
@ -24,6 +25,7 @@ from .forms import (AnexoNormaJuridicaForm, NormaFilterSet, NormaJuridicaForm,
from .models import (AnexoNormaJuridica, AssuntoNorma, NormaJuridica, NormaRelacionada,
TipoNormaJuridica, TipoVinculoNormaJuridica)
# LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '')
AssuntoNormaCrud = CrudAux.build(AssuntoNorma, 'assunto_norma_juridica',
list_field_names=['assunto', 'descricao'])
@ -72,7 +74,10 @@ class NormaPesquisaView(FilterView):
def get_queryset(self):
qs = super().get_queryset()
qs = qs.extra({'norma_i': "CAST(regexp_replace(numero,'[^0-9]','', 'g') AS INTEGER)", 'norma_letra': "regexp_replace(numero,'[^a-zA-Z]','', 'g')"}).order_by('-data', '-norma_i', '-norma_letra')
qs = qs.extra({
'nm_i': "CAST(regexp_replace(numero,'[^0-9]','', 'g') AS INTEGER)",
'norma_letra': "regexp_replace(numero,'[^a-zA-Z]','', 'g')"
}).order_by('-data', '-nm_i', '-norma_letra')
return qs
@ -98,6 +103,7 @@ class NormaPesquisaView(FilterView):
return context
class AnexoNormaJuridicaCrud(MasterDetailCrud):
model = AnexoNormaJuridica
parent_field = 'norma'
@ -105,7 +111,7 @@ class AnexoNormaJuridicaCrud(MasterDetailCrud):
public = [RP_LIST, RP_DETAIL]
class BaseMixin(MasterDetailCrud.BaseMixin):
list_field_names = ['id','anexo_arquivo']
list_field_names = ['id', 'anexo_arquivo']
class CreateView(MasterDetailCrud.CreateView):
form_class = AnexoNormaJuridicaForm
@ -141,6 +147,7 @@ class NormaTaView(IntegracaoTaView):
'observacao': 'observacao',
'numero': 'numero',
'ano': 'ano',
'tipo': 'tipo',
}
map_funcs = {
@ -238,7 +245,7 @@ def recuperar_numero_norma(request):
param = {'tipo': tipo}
param['ano'] = ano if ano else timezone.now().year
norma = NormaJuridica.objects.filter(**param).order_by(
'tipo', 'ano', 'numero').values_list('numero', 'ano').last()
'tipo', 'ano', 'numero').values_list('numero', 'ano').last()
if norma:
response = JsonResponse({'numero': int(re.sub("[^0-9].*", '', norma[0])) + 1,
'ano': norma[1]})

4
sapl/templates/compilacao/textoarticulado_detail.html

@ -8,9 +8,9 @@
{%if object %}
<li>
{% if request.GET.back_type == 'history' and object.content_object %}
<a href="javascript:window.history.back()" title="{% trans 'Voltar para '%}{{object.content_object}}">{% trans 'Voltar para '%}{{object.content_object}}</a>
<a href="javascript:window.history.back()" title="{% trans 'Voltar para '%}{{object}}">{% trans 'Voltar para '%}{{object}}</a>
{% elif object.content_object%}
<a href="{% url object|urldetail_content_type:object.content_object object.content_object.pk %}" title="{% trans 'Voltar para '%}{{object.content_object}}">{% trans 'Voltar para '%}{{object.content_object}}</a>
<a href="{% url object|urldetail_content_type:object.content_object object.content_object.pk %}" title="{% trans 'Voltar para '%}{{object}}">{% trans 'Voltar para '%}{{object}}</a>
{%else%}
<a href="{% url 'sapl.compilacao:ta_detail' object.pk %}">{% trans 'Início' %}</a>
{%endif%}

4
sapl/templates/norma/normajuridica_detail.html

@ -42,7 +42,7 @@
<div class="form-control-static">
<b>{{ p.tipo_vinculo.descricao_ativa }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' p.norma_relacionada.pk %}">
{{ p.norma_relacionada }}
{{ p.norma_relacionada.epigrafe }}
</a>
</div>
{% endfor %}
@ -53,7 +53,7 @@
<div class="form-control-static">
<b>{{ r.tipo_vinculo.descricao_passiva }}</b>&nbsp;
<a href="{% url 'sapl.norma:normajuridica_detail' r.norma_principal.pk %}">
{{ r.norma_principal }}
{{ r.norma_principal.epigrafe }}
</a>
</div>
{% endfor %}

Loading…
Cancel
Save