diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
index 30086ea7d..1d223de8f 100644
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -3,9 +3,9 @@ import logging
import os
from crispy_forms.bootstrap import Alert, InlineRadios, FormActions
+from crispy_forms.helper import FormHelper
from crispy_forms.layout import (HTML, Button, Column, Div, Field, Fieldset,
Layout, Row, Submit)
-from crispy_forms.helper import FormHelper
from django import forms
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist, ValidationError
@@ -260,7 +260,7 @@ class MateriaLegislativaForm(FileFieldCheckMixin, ModelForm):
materia = super(MateriaLegislativaForm, self).save(commit)
materia.save()
-
+
if self.cleaned_data['autor']:
autoria = Autoria()
autoria.primeiro_autor = primeiro_autor
@@ -536,7 +536,8 @@ class TramitacaoForm(ModelForm):
materia.em_tramitacao = False if tramitacao.status.indicador == "F" else True
materia.save()
- tramitar_anexadas = sapl.base.models.AppConfig.attr('tramitacao_materia')
+ tramitar_anexadas = sapl.base.models.AppConfig.attr(
+ 'tramitacao_materia')
if tramitar_anexadas:
lista_tramitacao = []
anexadas_list = lista_anexados(materia)
@@ -546,35 +547,38 @@ class TramitacaoForm(ModelForm):
ma.em_tramitacao = False if tramitacao.status.indicador == "F" else True
ma.save()
lista_tramitacao.append(Tramitacao(
- status=tramitacao.status,
- materia=ma,
- data_tramitacao=tramitacao.data_tramitacao,
- unidade_tramitacao_local=tramitacao.unidade_tramitacao_local,
- data_encaminhamento=tramitacao.data_encaminhamento,
- unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino,
- urgente=tramitacao.urgente,
- turno=tramitacao.turno,
- texto=tramitacao.texto,
- data_fim_prazo=tramitacao.data_fim_prazo,
- user=tramitacao.user,
- ip=tramitacao.ip
- ))
+ status=tramitacao.status,
+ materia=ma,
+ data_tramitacao=tramitacao.data_tramitacao,
+ unidade_tramitacao_local=tramitacao.unidade_tramitacao_local,
+ data_encaminhamento=tramitacao.data_encaminhamento,
+ unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino,
+ urgente=tramitacao.urgente,
+ turno=tramitacao.turno,
+ texto=tramitacao.texto,
+ data_fim_prazo=tramitacao.data_fim_prazo,
+ user=tramitacao.user,
+ ip=tramitacao.ip
+ ))
Tramitacao.objects.bulk_create(lista_tramitacao)
return tramitacao
-# Compara se os campos de duas tramitações são iguais,
+# Compara se os campos de duas tramitações são iguais,
# exceto os campos id, documento_id e timestamp
def compara_tramitacoes_mat(tramitacao1, tramitacao2):
if not tramitacao1 or not tramitacao2:
return False
lst_items = ['id', 'materia_id', 'timestamp']
- values = [(k,v) for k,v in tramitacao1.__dict__.items() if ((k not in lst_items) and (k[0] != '_'))]
- other_values = [(k,v) for k,v in tramitacao2.__dict__.items() if (k not in lst_items and k[0] != '_')]
+ values = [(k, v) for k, v in tramitacao1.__dict__.items()
+ if ((k not in lst_items) and (k[0] != '_'))]
+ other_values = [(k, v) for k, v in tramitacao2.__dict__.items()
+ if (k not in lst_items and k[0] != '_')]
return values == other_values
+
class TramitacaoUpdateForm(TramitacaoForm):
unidade_tramitacao_local = forms.ModelChoiceField(
queryset=UnidadeTramitacao.objects.all(),
@@ -648,7 +652,8 @@ class TramitacaoUpdateForm(TramitacaoForm):
materia.em_tramitacao = False if nova_tram_principal.status.indicador == "F" else True
materia.save()
- tramitar_anexadas = sapl.base.models.AppConfig.attr('tramitacao_materia')
+ tramitar_anexadas = sapl.base.models.AppConfig.attr(
+ 'tramitacao_materia')
if tramitar_anexadas:
anexadas_list = lista_anexados(materia)
for ma in anexadas_list:
@@ -671,6 +676,7 @@ class TramitacaoUpdateForm(TramitacaoForm):
ma.save()
return nova_tram_principal
+
class LegislacaoCitadaForm(ModelForm):
tipo = forms.ModelChoiceField(
@@ -844,8 +850,10 @@ class AnexadaForm(ModelForm):
data_desanexacao = cleaned_data['data_desanexacao'] if cleaned_data['data_desanexacao'] else data_anexacao
if data_anexacao > data_desanexacao:
- self.logger.error("Data de anexação posterior à data de desanexação.")
- raise ValidationError(_("Data de anexação posterior à data de desanexação."))
+ self.logger.error(
+ "Data de anexação posterior à data de desanexação.")
+ raise ValidationError(
+ _("Data de anexação posterior à data de desanexação."))
try:
self.logger.info("Tentando obter objeto MateriaLegislativa (numero={}, ano={}, tipo={})."
@@ -874,9 +882,10 @@ class AnexadaForm(ModelForm):
if is_anexada:
self.logger.error("Matéria já se encontra anexada.")
raise ValidationError(_('Matéria já se encontra anexada'))
-
+
ciclico = False
- anexadas_anexada = Anexada.objects.filter(materia_principal=materia_anexada)
+ anexadas_anexada = Anexada.objects.filter(
+ materia_principal=materia_anexada)
while anexadas_anexada and not ciclico:
anexadas = []
@@ -885,15 +894,17 @@ class AnexadaForm(ModelForm):
if materia_principal == anexa.materia_anexada:
ciclico = True
- else:
+ else:
for a in Anexada.objects.filter(materia_principal=anexa.materia_anexada):
anexadas.append(a)
anexadas_anexada = anexadas
-
+
if ciclico:
- self.logger.error("A matéria não pode ser anexada por uma de suas anexadas.")
- raise ValidationError(_("A matéria não pode ser anexada por uma de suas anexadas."))
+ self.logger.error(
+ "A matéria não pode ser anexada por uma de suas anexadas.")
+ raise ValidationError(
+ _("A matéria não pode ser anexada por uma de suas anexadas."))
cleaned_data['materia_anexada'] = materia_anexada
@@ -1141,7 +1152,7 @@ class DespachoInicialCreateForm(forms.Form):
# super().__init__(*args, **kwargs)
# kwargs.pop('instance')
row1 = to_row(
- [('comissao', 12),])
+ [('comissao', 12), ])
self.form.helper = SaplFormHelper()
self.form.helper.form_method = 'POST'
@@ -1149,7 +1160,6 @@ class DespachoInicialCreateForm(forms.Form):
Fieldset(_('Pesquisa Básica'),
row1))
-
def clean(self):
super().clean()
@@ -1160,7 +1170,7 @@ class DespachoInicialCreateForm(forms.Form):
if not self.is_valid():
return self.cleaned_data
-
+
errors = []
for comissao in comissoes:
if DespachoInicial.objects.filter(
@@ -1200,6 +1210,7 @@ class DespachoInicialForm(ModelForm):
return self.cleaned_data
+
class AutoriaForm(ModelForm):
tipo_autor = ModelChoiceField(label=_('Tipo Autor'),
@@ -1219,7 +1230,8 @@ class AutoriaForm(ModelForm):
if 'initial' in kwargs and 'materia' in kwargs['initial']:
materia = kwargs['initial']['materia']
- self.fields['primeiro_autor'].initial = Autoria.objects.filter(materia=materia).count() == 0
+ self.fields['primeiro_autor'].initial = Autoria.objects.filter(
+ materia=materia).count() == 0
row1 = to_row([('tipo_autor', 4),
('autor', 4),
@@ -1289,8 +1301,9 @@ class AutoriaMultiCreateForm(Form):
super().__init__(*args, **kwargs)
if 'initial' in kwargs and 'autores' in kwargs['initial']:
- self.fields['primeiro_autor'].initial = kwargs['initial']['autores'].count() == 0
-
+ self.fields['primeiro_autor'].initial = kwargs['initial']['autores'].count(
+ ) == 0
+
row1 = to_row([('tipo_autor', 10), ('primeiro_autor', 2)])
row2 = to_row([('autor', 12), ])
@@ -1999,7 +2012,7 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm):
ano=timezone.now().year).aggregate(Max('numero_proposicao'))
numero__max = numero__max['numero_proposicao__max']
inst.numero_proposicao = (
- numero__max + 1) if numero__max else 1
+ numero__max + 1) if numero__max else 1
self.gerar_hash(inst, receber_recibo)
@@ -2097,7 +2110,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
attrs={'readonly': 'readonly'}))
regime_tramitacao = forms.ModelChoiceField(label="Regime de tramitação",
- required=False, queryset=RegimeTramitacao.objects.all())
+ required=False, queryset=RegimeTramitacao.objects.all())
gerar_protocolo = forms.ChoiceField(
required=False,
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
index 0295628ac..bf51a1ee0 100644
--- a/sapl/materia/views.py
+++ b/sapl/materia/views.py
@@ -1,13 +1,11 @@
+from datetime import datetime
+import itertools
import logging
import os
-import shutil
-import tempfile
-import weasyprint
-import itertools
-
-from datetime import datetime
from random import choice
+import shutil
from string import ascii_letters, digits
+import tempfile
from crispy_forms.layout import HTML
from django.conf import settings
@@ -28,6 +26,7 @@ from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView
from django_filters.views import FilterView
import weasyprint
+import weasyprint
import sapl
from sapl.base.email_utils import do_envia_email_confirmacao
@@ -1142,9 +1141,9 @@ class RelatoriaCrud(MasterDetailCrud):
parlamentar = relatoria.parlamentar
comissao = relatoria.comissao
composicoes = [p.composicao for p in
- Participacao.objects.filter(
- parlamentar=parlamentar,
- composicao__comissao=comissao)]
+ Participacao.objects.filter(
+ parlamentar=parlamentar,
+ composicao__comissao=comissao)]
data_designacao = relatoria.data_designacao_relator
composicao = ''
for c in composicoes:
@@ -1205,7 +1204,8 @@ class TramitacaoCrud(MasterDetailCrud):
'-timestamp',
'-id').first()
- #TODO: Esta checagem foi inserida na issue #2027, mas é mesmo necessária?
+ # TODO: Esta checagem foi inserida na issue #2027, mas é mesmo
+ # necessária?
if ultima_tramitacao:
if ultima_tramitacao.unidade_tramitacao_destino:
context['form'].fields[
@@ -1259,7 +1259,8 @@ class TramitacaoCrud(MasterDetailCrud):
layout_key = 'TramitacaoUpdate'
def form_valid(self, form):
- dict_objeto_antigo = Tramitacao.objects.get(pk=self.kwargs['pk']).__dict__
+ dict_objeto_antigo = Tramitacao.objects.get(
+ pk=self.kwargs['pk']).__dict__
self.object = form.save()
dict_objeto_novo = self.object.__dict__
@@ -1271,7 +1272,8 @@ class TramitacaoCrud(MasterDetailCrud):
'data_encaminhamento', 'data_fim_prazo', 'urgente', 'turno'
]
- # Se não houve qualquer alteração em um dos dados, mantém o usuário e ip
+ # Se não houve qualquer alteração em um dos dados, mantém o usuário
+ # e ip
for atributo in atributos:
if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]:
self.object.user = user
@@ -1314,7 +1316,7 @@ class TramitacaoCrud(MasterDetailCrud):
materia = tramitacao.materia
url = reverse('sapl.materia:tramitacao_list',
kwargs={'pk': materia.id})
-
+
ultima_tramitacao = materia.tramitacao_set.order_by(
'-data_tramitacao',
'-timestamp',
@@ -1333,7 +1335,8 @@ class TramitacaoCrud(MasterDetailCrud):
if materia.tramitacao_set.count() == 0:
materia.em_tramitacao = False
materia.save()
- tramitar_anexadas = sapl.base.models.AppConfig.attr('tramitacao_materia')
+ tramitar_anexadas = sapl.base.models.AppConfig.attr(
+ 'tramitacao_materia')
if tramitar_anexadas:
mat_anexadas = lista_anexados(materia)
for ma in mat_anexadas:
@@ -1355,7 +1358,7 @@ class TramitacaoCrud(MasterDetailCrud):
context = super().get_context_data(**kwargs)
context['user'] = self.request.user
return context
-
+
def montar_helper_documento_acessorio(self):
autor_row = montar_row_autor('autor')
@@ -1486,7 +1489,8 @@ class AutoriaMultiCreateView(PermissionRequiredForAppCrudMixin, FormView):
autores_selecionados = form.cleaned_data['autor']
primeiro_autor = form.cleaned_data['primeiro_autor']
for autor in autores_selecionados:
- Autoria.objects.create(materia=self.materia, autor=autor, primeiro_autor=primeiro_autor)
+ Autoria.objects.create(materia=self.materia,
+ autor=autor, primeiro_autor=primeiro_autor)
return FormView.form_valid(self, form)
@@ -1506,7 +1510,7 @@ class DespachoInicialMultiCreateView(PermissionRequiredForAppCrudMixin, FormView
context = super().get_context_data(**kwargs)
context['title'] = '%s (%s)' % (
_('Adicionar Vários Despachos'), self.materia)
- context['root_pk']= self.kwargs['pk']
+ context['root_pk'] = self.kwargs['pk']
context['subnav_template_name'] = 'materia/subnav.yaml'
return context
@@ -1520,7 +1524,8 @@ class DespachoInicialMultiCreateView(PermissionRequiredForAppCrudMixin, FormView
def form_valid(self, form):
comissoes_selecionadas = form.cleaned_data['comissao']
for comissao in comissoes_selecionadas:
- DespachoInicial.objects.create(materia=self.materia, comissao=comissao)
+ DespachoInicial.objects.create(
+ materia=self.materia, comissao=comissao)
return FormView.form_valid(self, form)
@@ -1542,14 +1547,13 @@ class DespachoInicialCrud(MasterDetailCrud):
initial = super().get_initial()
self.materia = MateriaLegislativa.objects.get(id=self.kwargs['pk'])
initial['materia'] = self.materia
- import ipdb; ipdb.set_trace()
return initial
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = '%s (%s)' % (
_('Adicionar Vários Despachos'), self.materia)
- context['root_pk']= self.kwargs['pk']
+ context['root_pk'] = self.kwargs['pk']
context['subnav_template_name'] = 'materia/subnav.yaml'
return context
@@ -1563,10 +1567,11 @@ class DespachoInicialCrud(MasterDetailCrud):
def form_valid(self, form):
comissoes_selecionadas = form.cleaned_data['comissao']
for comissao in comissoes_selecionadas:
- DespachoInicial.objects.create(materia=self.materia, comissao=comissao)
+ DespachoInicial.objects.create(
+ materia=self.materia, comissao=comissao)
return FormView.form_valid(self, form)
-
+
class LegislacaoCitadaCrud(MasterDetailCrud):
model = LegislacaoCitada
@@ -1705,7 +1710,7 @@ class MateriaLegislativaCrud(Crud):
dict_objeto_antigo = MateriaLegislativa.objects.get(
pk=self.kwargs['pk']
).__dict__
-
+
self.object = form.save()
dict_objeto_novo = self.object.__dict__
@@ -1713,7 +1718,7 @@ class MateriaLegislativaCrud(Crud):
'tipo_id', 'ano', 'numero', 'data_apresentacao', 'numero_protocolo',
'tipo_apresentacao', 'texto_original', 'apelido', 'dias_prazo', 'polemica',
'objeto', 'regime_tramitacao_id', 'em_tramitacao', 'data_fim_prazo',
- 'data_publicacao', 'complementar', 'tipo_origem_externa_id',
+ 'data_publicacao', 'complementar', 'tipo_origem_externa_id',
'numero_origem_externa', 'ano_origem_externa', 'local_origem_externa_id',
'data_origem_externa', 'ementa', 'indexacao', 'observacao'
]
@@ -1730,7 +1735,7 @@ class MateriaLegislativaCrud(Crud):
anexadas = lista_anexados(materia)
for anexada in anexadas:
- anexada.em_tramitacao = True if form.instance.em_tramitacao else False
+ anexada.em_tramitacao = True if form.instance.em_tramitacao else False
anexada.save()
return super().form_valid(form)
@@ -1752,7 +1757,8 @@ class MateriaLegislativaCrud(Crud):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['user'] = self.request.user
- context['materia'] = MateriaLegislativa.objects.get(pk=self.kwargs['pk'])
+ context['materia'] = MateriaLegislativa.objects.get(
+ pk=self.kwargs['pk'])
return context
class ListView(Crud.ListView, RedirectView):
@@ -2139,20 +2145,22 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView):
msg = _('Autor tem que ter menos do que 50 caracteres.')
messages.add_message(request, messages.ERROR, msg)
return self.get(request, self.kwargs)
-
+
tmp_name = os.path.join(MEDIA_ROOT, request.FILES['arquivo'].name)
with open(tmp_name, 'wb') as destination:
for chunk in request.FILES['arquivo'].chunks():
destination.write(chunk)
try:
doc_data = tz.localize(datetime.strptime(
- request.POST['data'], "%d/%m/%Y"))
+ request.POST['data'], "%d/%m/%Y"))
except Exception as e:
- msg = _('Formato da data incorreto. O formato deve ser da forma dd/mm/aaaa.')
- messages.add_message(request, messages.ERROR, msg)
- self.logger.error("User={}. {}. Data inserida: {}".format(username, str(msg), request.POST['data']))
- os.remove(tmp_name)
- return self.get(request, self.kwargs)
+ msg = _(
+ 'Formato da data incorreto. O formato deve ser da forma dd/mm/aaaa.')
+ messages.add_message(request, messages.ERROR, msg)
+ self.logger.error("User={}. {}. Data inserida: {}".format(
+ username, str(msg), request.POST['data']))
+ os.remove(tmp_name)
+ return self.get(request, self.kwargs)
for materia_id in marcadas:
doc = DocumentoAcessorio()
@@ -2166,25 +2174,27 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView):
try:
doc.clean_fields()
except ValidationError as e:
- for m in [ '%s: %s' % (DocumentoAcessorio()._meta.get_field(k).verbose_name, ''.join(v))
- for k,v in e.message_dict.items() ]:
+ for m in ['%s: %s' % (DocumentoAcessorio()._meta.get_field(k).verbose_name, ''.join(v))
+ for k, v in e.message_dict.items()]:
# Insere as mensagens de erro no formato:
# 'verbose_name do nome do campo': 'mensagem de erro'
messages.add_message(request, messages.ERROR, m)
- self.logger.error("User={}. {}. Nome do arquivo: {}.".format(username, str(msg), request.FILES['arquivo'].name))
+ self.logger.error("User={}. {}. Nome do arquivo: {}.".format(
+ username, str(msg), request.FILES['arquivo'].name))
os.remove(tmp_name)
return self.get(request, self.kwargs)
doc.save()
- diretorio = os.path.join(MEDIA_ROOT,
- 'sapl/public/documentoacessorio',
- str(doc_data.year),
- str(doc.id))
+ diretorio = os.path.join(MEDIA_ROOT,
+ 'sapl/public/documentoacessorio',
+ str(doc_data.year),
+ str(doc.id))
if not os.path.exists(diretorio):
os.makedirs(diretorio)
- file_path = os.path.join(diretorio,
+ file_path = os.path.join(diretorio,
request.FILES['arquivo'].name)
shutil.copy2(tmp_name, file_path)
- doc.arquivo.name = file_path.split(MEDIA_ROOT + "/")[1] # Retira MEDIA_ROOT do nome
+ doc.arquivo.name = file_path.split(
+ MEDIA_ROOT + "/")[1] # Retira MEDIA_ROOT do nome
doc.save()
os.remove(tmp_name)
@@ -2210,17 +2220,17 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView):
# Verifica se os campos foram preenchidos
if not self.request.GET.get('tipo', " "):
- msg =_('Por favor, selecione um tipo de matéria.')
+ msg = _('Por favor, selecione um tipo de matéria.')
messages.add_message(self.request, messages.ERROR, msg)
if not self.request.GET.get('data_apresentacao_0', " ") or not self.request.GET.get('data_apresentacao_1', " "):
- msg =_('Por favor, preencha as datas.')
+ msg = _('Por favor, preencha as datas.')
messages.add_message(self.request, messages.ERROR, msg)
return context
if not self.request.GET.get('data_apresentacao_0', " ") or not self.request.GET.get('data_apresentacao_1', " "):
- msg =_('Por favor, preencha as datas.')
+ msg = _('Por favor, preencha as datas.')
messages.add_message(self.request, messages.ERROR, msg)
return context
@@ -2229,8 +2239,10 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView):
'numero', '-ano')
principal = MateriaLegislativa.objects.get(pk=self.kwargs['pk'])
not_list = [self.kwargs['pk']] + \
- [m for m in principal.materia_principal_set.all().values_list('materia_anexada_id', flat=True)]
- context['object_list'] = context['object_list'].exclude(pk__in=not_list)
+ [m for m in principal.materia_principal_set.all(
+ ).values_list('materia_anexada_id', flat=True)]
+ context['object_list'] = context['object_list'].exclude(
+ pk__in=not_list)
context['temp_object_list'] = context['object_list']
context['object_list'] = []
@@ -2238,12 +2250,12 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView):
materia_anexada = obj
ciclico = False
anexadas_anexada = Anexada.objects.filter(
- materia_principal = materia_anexada
+ materia_principal=materia_anexada
)
while anexadas_anexada and not ciclico:
anexadas = []
-
+
for anexa in anexadas_anexada:
if principal == anexa.materia_anexada:
@@ -2251,7 +2263,7 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView):
else:
for a in Anexada.objects.filter(materia_principal=anexa.materia_anexada):
anexadas.append(a)
-
+
anexadas_anexada = anexadas
if not ciclico:
@@ -2282,7 +2294,7 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView):
if len(marcadas) == 0:
msg = _('Nenhuma máteria foi selecionada.')
messages.add_message(request, messages.ERROR, msg)
-
+
if data_anexacao > v_data_desanexacao:
msg = _('Data de anexação posterior à data de desanexação.')
messages.add_message(request, messages.ERROR, msg)
@@ -2307,7 +2319,8 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView):
msg = _('Matéria(s) anexada(s).')
messages.add_message(request, messages.SUCCESS, msg)
- success_url = reverse('sapl.materia:anexada_list', kwargs={'pk': kwargs['pk']})
+ success_url = reverse('sapl.materia:anexada_list',
+ kwargs={'pk': kwargs['pk']})
return HttpResponseRedirect(success_url)
@@ -2393,6 +2406,7 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView):
return self.get(self.request, kwargs, {'form':form})
+
class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView):
filterset_class = TramitacaoEmLoteFilterSet