|
|
@ -1,13 +1,11 @@ |
|
|
|
|
|
from datetime import datetime |
|
|
|
|
|
import itertools |
|
|
import logging |
|
|
import logging |
|
|
import os |
|
|
import os |
|
|
import shutil |
|
|
|
|
|
import tempfile |
|
|
|
|
|
import weasyprint |
|
|
|
|
|
import itertools |
|
|
|
|
|
|
|
|
|
|
|
from datetime import datetime |
|
|
|
|
|
from random import choice |
|
|
from random import choice |
|
|
|
|
|
import shutil |
|
|
from string import ascii_letters, digits |
|
|
from string import ascii_letters, digits |
|
|
|
|
|
import tempfile |
|
|
|
|
|
|
|
|
from crispy_forms.layout import HTML |
|
|
from crispy_forms.layout import HTML |
|
|
from django.conf import settings |
|
|
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.views.generic.edit import FormView |
|
|
from django_filters.views import FilterView |
|
|
from django_filters.views import FilterView |
|
|
import weasyprint |
|
|
import weasyprint |
|
|
|
|
|
import weasyprint |
|
|
|
|
|
|
|
|
import sapl |
|
|
import sapl |
|
|
from sapl.base.email_utils import do_envia_email_confirmacao |
|
|
from sapl.base.email_utils import do_envia_email_confirmacao |
|
|
@ -1142,9 +1141,9 @@ class RelatoriaCrud(MasterDetailCrud): |
|
|
parlamentar = relatoria.parlamentar |
|
|
parlamentar = relatoria.parlamentar |
|
|
comissao = relatoria.comissao |
|
|
comissao = relatoria.comissao |
|
|
composicoes = [p.composicao for p in |
|
|
composicoes = [p.composicao for p in |
|
|
Participacao.objects.filter( |
|
|
Participacao.objects.filter( |
|
|
parlamentar=parlamentar, |
|
|
parlamentar=parlamentar, |
|
|
composicao__comissao=comissao)] |
|
|
composicao__comissao=comissao)] |
|
|
data_designacao = relatoria.data_designacao_relator |
|
|
data_designacao = relatoria.data_designacao_relator |
|
|
composicao = '' |
|
|
composicao = '' |
|
|
for c in composicoes: |
|
|
for c in composicoes: |
|
|
@ -1205,7 +1204,8 @@ class TramitacaoCrud(MasterDetailCrud): |
|
|
'-timestamp', |
|
|
'-timestamp', |
|
|
'-id').first() |
|
|
'-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: |
|
|
if ultima_tramitacao.unidade_tramitacao_destino: |
|
|
if ultima_tramitacao.unidade_tramitacao_destino: |
|
|
context['form'].fields[ |
|
|
context['form'].fields[ |
|
|
@ -1259,7 +1259,8 @@ class TramitacaoCrud(MasterDetailCrud): |
|
|
layout_key = 'TramitacaoUpdate' |
|
|
layout_key = 'TramitacaoUpdate' |
|
|
|
|
|
|
|
|
def form_valid(self, form): |
|
|
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() |
|
|
self.object = form.save() |
|
|
dict_objeto_novo = self.object.__dict__ |
|
|
dict_objeto_novo = self.object.__dict__ |
|
|
@ -1271,7 +1272,8 @@ class TramitacaoCrud(MasterDetailCrud): |
|
|
'data_encaminhamento', 'data_fim_prazo', 'urgente', 'turno' |
|
|
'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: |
|
|
for atributo in atributos: |
|
|
if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: |
|
|
if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: |
|
|
self.object.user = user |
|
|
self.object.user = user |
|
|
@ -1314,7 +1316,7 @@ class TramitacaoCrud(MasterDetailCrud): |
|
|
materia = tramitacao.materia |
|
|
materia = tramitacao.materia |
|
|
url = reverse('sapl.materia:tramitacao_list', |
|
|
url = reverse('sapl.materia:tramitacao_list', |
|
|
kwargs={'pk': materia.id}) |
|
|
kwargs={'pk': materia.id}) |
|
|
|
|
|
|
|
|
ultima_tramitacao = materia.tramitacao_set.order_by( |
|
|
ultima_tramitacao = materia.tramitacao_set.order_by( |
|
|
'-data_tramitacao', |
|
|
'-data_tramitacao', |
|
|
'-timestamp', |
|
|
'-timestamp', |
|
|
@ -1333,7 +1335,8 @@ class TramitacaoCrud(MasterDetailCrud): |
|
|
if materia.tramitacao_set.count() == 0: |
|
|
if materia.tramitacao_set.count() == 0: |
|
|
materia.em_tramitacao = False |
|
|
materia.em_tramitacao = False |
|
|
materia.save() |
|
|
materia.save() |
|
|
tramitar_anexadas = sapl.base.models.AppConfig.attr('tramitacao_materia') |
|
|
tramitar_anexadas = sapl.base.models.AppConfig.attr( |
|
|
|
|
|
'tramitacao_materia') |
|
|
if tramitar_anexadas: |
|
|
if tramitar_anexadas: |
|
|
mat_anexadas = lista_anexados(materia) |
|
|
mat_anexadas = lista_anexados(materia) |
|
|
for ma in mat_anexadas: |
|
|
for ma in mat_anexadas: |
|
|
@ -1355,7 +1358,7 @@ class TramitacaoCrud(MasterDetailCrud): |
|
|
context = super().get_context_data(**kwargs) |
|
|
context = super().get_context_data(**kwargs) |
|
|
context['user'] = self.request.user |
|
|
context['user'] = self.request.user |
|
|
return context |
|
|
return context |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def montar_helper_documento_acessorio(self): |
|
|
def montar_helper_documento_acessorio(self): |
|
|
autor_row = montar_row_autor('autor') |
|
|
autor_row = montar_row_autor('autor') |
|
|
@ -1486,7 +1489,8 @@ class AutoriaMultiCreateView(PermissionRequiredForAppCrudMixin, FormView): |
|
|
autores_selecionados = form.cleaned_data['autor'] |
|
|
autores_selecionados = form.cleaned_data['autor'] |
|
|
primeiro_autor = form.cleaned_data['primeiro_autor'] |
|
|
primeiro_autor = form.cleaned_data['primeiro_autor'] |
|
|
for autor in autores_selecionados: |
|
|
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) |
|
|
return FormView.form_valid(self, form) |
|
|
|
|
|
|
|
|
@ -1506,7 +1510,7 @@ class DespachoInicialMultiCreateView(PermissionRequiredForAppCrudMixin, FormView |
|
|
context = super().get_context_data(**kwargs) |
|
|
context = super().get_context_data(**kwargs) |
|
|
context['title'] = '%s <small>(%s)</small>' % ( |
|
|
context['title'] = '%s <small>(%s)</small>' % ( |
|
|
_('Adicionar Vários Despachos'), self.materia) |
|
|
_('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' |
|
|
context['subnav_template_name'] = 'materia/subnav.yaml' |
|
|
return context |
|
|
return context |
|
|
|
|
|
|
|
|
@ -1520,7 +1524,8 @@ class DespachoInicialMultiCreateView(PermissionRequiredForAppCrudMixin, FormView |
|
|
def form_valid(self, form): |
|
|
def form_valid(self, form): |
|
|
comissoes_selecionadas = form.cleaned_data['comissao'] |
|
|
comissoes_selecionadas = form.cleaned_data['comissao'] |
|
|
for comissao in comissoes_selecionadas: |
|
|
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) |
|
|
return FormView.form_valid(self, form) |
|
|
|
|
|
|
|
|
@ -1542,14 +1547,13 @@ class DespachoInicialCrud(MasterDetailCrud): |
|
|
initial = super().get_initial() |
|
|
initial = super().get_initial() |
|
|
self.materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) |
|
|
self.materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) |
|
|
initial['materia'] = self.materia |
|
|
initial['materia'] = self.materia |
|
|
import ipdb; ipdb.set_trace() |
|
|
|
|
|
return initial |
|
|
return initial |
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs): |
|
|
def get_context_data(self, **kwargs): |
|
|
context = super().get_context_data(**kwargs) |
|
|
context = super().get_context_data(**kwargs) |
|
|
context['title'] = '%s <small>(%s)</small>' % ( |
|
|
context['title'] = '%s <small>(%s)</small>' % ( |
|
|
_('Adicionar Vários Despachos'), self.materia) |
|
|
_('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' |
|
|
context['subnav_template_name'] = 'materia/subnav.yaml' |
|
|
return context |
|
|
return context |
|
|
|
|
|
|
|
|
@ -1563,10 +1567,11 @@ class DespachoInicialCrud(MasterDetailCrud): |
|
|
def form_valid(self, form): |
|
|
def form_valid(self, form): |
|
|
comissoes_selecionadas = form.cleaned_data['comissao'] |
|
|
comissoes_selecionadas = form.cleaned_data['comissao'] |
|
|
for comissao in comissoes_selecionadas: |
|
|
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) |
|
|
return FormView.form_valid(self, form) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LegislacaoCitadaCrud(MasterDetailCrud): |
|
|
class LegislacaoCitadaCrud(MasterDetailCrud): |
|
|
model = LegislacaoCitada |
|
|
model = LegislacaoCitada |
|
|
@ -1705,7 +1710,7 @@ class MateriaLegislativaCrud(Crud): |
|
|
dict_objeto_antigo = MateriaLegislativa.objects.get( |
|
|
dict_objeto_antigo = MateriaLegislativa.objects.get( |
|
|
pk=self.kwargs['pk'] |
|
|
pk=self.kwargs['pk'] |
|
|
).__dict__ |
|
|
).__dict__ |
|
|
|
|
|
|
|
|
self.object = form.save() |
|
|
self.object = form.save() |
|
|
dict_objeto_novo = self.object.__dict__ |
|
|
dict_objeto_novo = self.object.__dict__ |
|
|
|
|
|
|
|
|
@ -1713,7 +1718,7 @@ class MateriaLegislativaCrud(Crud): |
|
|
'tipo_id', 'ano', 'numero', 'data_apresentacao', 'numero_protocolo', |
|
|
'tipo_id', 'ano', 'numero', 'data_apresentacao', 'numero_protocolo', |
|
|
'tipo_apresentacao', 'texto_original', 'apelido', 'dias_prazo', 'polemica', |
|
|
'tipo_apresentacao', 'texto_original', 'apelido', 'dias_prazo', 'polemica', |
|
|
'objeto', 'regime_tramitacao_id', 'em_tramitacao', 'data_fim_prazo', |
|
|
'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', |
|
|
'numero_origem_externa', 'ano_origem_externa', 'local_origem_externa_id', |
|
|
'data_origem_externa', 'ementa', 'indexacao', 'observacao' |
|
|
'data_origem_externa', 'ementa', 'indexacao', 'observacao' |
|
|
] |
|
|
] |
|
|
@ -1730,7 +1735,7 @@ class MateriaLegislativaCrud(Crud): |
|
|
anexadas = lista_anexados(materia) |
|
|
anexadas = lista_anexados(materia) |
|
|
|
|
|
|
|
|
for anexada in anexadas: |
|
|
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() |
|
|
anexada.save() |
|
|
|
|
|
|
|
|
return super().form_valid(form) |
|
|
return super().form_valid(form) |
|
|
@ -1752,7 +1757,8 @@ class MateriaLegislativaCrud(Crud): |
|
|
def get_context_data(self, **kwargs): |
|
|
def get_context_data(self, **kwargs): |
|
|
context = super().get_context_data(**kwargs) |
|
|
context = super().get_context_data(**kwargs) |
|
|
context['user'] = self.request.user |
|
|
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 |
|
|
return context |
|
|
|
|
|
|
|
|
class ListView(Crud.ListView, RedirectView): |
|
|
class ListView(Crud.ListView, RedirectView): |
|
|
@ -2139,20 +2145,22 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
msg = _('Autor tem que ter menos do que 50 caracteres.') |
|
|
msg = _('Autor tem que ter menos do que 50 caracteres.') |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
return self.get(request, self.kwargs) |
|
|
return self.get(request, self.kwargs) |
|
|
|
|
|
|
|
|
tmp_name = os.path.join(MEDIA_ROOT, request.FILES['arquivo'].name) |
|
|
tmp_name = os.path.join(MEDIA_ROOT, request.FILES['arquivo'].name) |
|
|
with open(tmp_name, 'wb') as destination: |
|
|
with open(tmp_name, 'wb') as destination: |
|
|
for chunk in request.FILES['arquivo'].chunks(): |
|
|
for chunk in request.FILES['arquivo'].chunks(): |
|
|
destination.write(chunk) |
|
|
destination.write(chunk) |
|
|
try: |
|
|
try: |
|
|
doc_data = tz.localize(datetime.strptime( |
|
|
doc_data = tz.localize(datetime.strptime( |
|
|
request.POST['data'], "%d/%m/%Y")) |
|
|
request.POST['data'], "%d/%m/%Y")) |
|
|
except Exception as e: |
|
|
except Exception as e: |
|
|
msg = _('Formato da data incorreto. O formato deve ser da forma dd/mm/aaaa.') |
|
|
msg = _( |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
'Formato da data incorreto. O formato deve ser da forma dd/mm/aaaa.') |
|
|
self.logger.error("User={}. {}. Data inserida: {}".format(username, str(msg), request.POST['data'])) |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
os.remove(tmp_name) |
|
|
self.logger.error("User={}. {}. Data inserida: {}".format( |
|
|
return self.get(request, self.kwargs) |
|
|
username, str(msg), request.POST['data'])) |
|
|
|
|
|
os.remove(tmp_name) |
|
|
|
|
|
return self.get(request, self.kwargs) |
|
|
|
|
|
|
|
|
for materia_id in marcadas: |
|
|
for materia_id in marcadas: |
|
|
doc = DocumentoAcessorio() |
|
|
doc = DocumentoAcessorio() |
|
|
@ -2166,25 +2174,27 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
try: |
|
|
try: |
|
|
doc.clean_fields() |
|
|
doc.clean_fields() |
|
|
except ValidationError as e: |
|
|
except ValidationError as e: |
|
|
for m in [ '%s: %s' % (DocumentoAcessorio()._meta.get_field(k).verbose_name, '</br>'.join(v)) |
|
|
for m in ['%s: %s' % (DocumentoAcessorio()._meta.get_field(k).verbose_name, '</br>'.join(v)) |
|
|
for k,v in e.message_dict.items() ]: |
|
|
for k, v in e.message_dict.items()]: |
|
|
# Insere as mensagens de erro no formato: |
|
|
# Insere as mensagens de erro no formato: |
|
|
# 'verbose_name do nome do campo': 'mensagem de erro' |
|
|
# 'verbose_name do nome do campo': 'mensagem de erro' |
|
|
messages.add_message(request, messages.ERROR, m) |
|
|
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) |
|
|
os.remove(tmp_name) |
|
|
return self.get(request, self.kwargs) |
|
|
return self.get(request, self.kwargs) |
|
|
doc.save() |
|
|
doc.save() |
|
|
diretorio = os.path.join(MEDIA_ROOT, |
|
|
diretorio = os.path.join(MEDIA_ROOT, |
|
|
'sapl/public/documentoacessorio', |
|
|
'sapl/public/documentoacessorio', |
|
|
str(doc_data.year), |
|
|
str(doc_data.year), |
|
|
str(doc.id)) |
|
|
str(doc.id)) |
|
|
if not os.path.exists(diretorio): |
|
|
if not os.path.exists(diretorio): |
|
|
os.makedirs(diretorio) |
|
|
os.makedirs(diretorio) |
|
|
file_path = os.path.join(diretorio, |
|
|
file_path = os.path.join(diretorio, |
|
|
request.FILES['arquivo'].name) |
|
|
request.FILES['arquivo'].name) |
|
|
shutil.copy2(tmp_name, file_path) |
|
|
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() |
|
|
doc.save() |
|
|
os.remove(tmp_name) |
|
|
os.remove(tmp_name) |
|
|
|
|
|
|
|
|
@ -2210,17 +2220,17 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
|
|
|
|
|
|
# Verifica se os campos foram preenchidos |
|
|
# Verifica se os campos foram preenchidos |
|
|
if not self.request.GET.get('tipo', " "): |
|
|
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) |
|
|
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', " "): |
|
|
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) |
|
|
messages.add_message(self.request, messages.ERROR, msg) |
|
|
|
|
|
|
|
|
return context |
|
|
return context |
|
|
|
|
|
|
|
|
if not self.request.GET.get('data_apresentacao_0', " ") or not self.request.GET.get('data_apresentacao_1', " "): |
|
|
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) |
|
|
messages.add_message(self.request, messages.ERROR, msg) |
|
|
return context |
|
|
return context |
|
|
|
|
|
|
|
|
@ -2229,8 +2239,10 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
'numero', '-ano') |
|
|
'numero', '-ano') |
|
|
principal = MateriaLegislativa.objects.get(pk=self.kwargs['pk']) |
|
|
principal = MateriaLegislativa.objects.get(pk=self.kwargs['pk']) |
|
|
not_list = [self.kwargs['pk']] + \ |
|
|
not_list = [self.kwargs['pk']] + \ |
|
|
[m for m in principal.materia_principal_set.all().values_list('materia_anexada_id', flat=True)] |
|
|
[m for m in principal.materia_principal_set.all( |
|
|
context['object_list'] = context['object_list'].exclude(pk__in=not_list) |
|
|
).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['temp_object_list'] = context['object_list'] |
|
|
context['object_list'] = [] |
|
|
context['object_list'] = [] |
|
|
@ -2238,12 +2250,12 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
materia_anexada = obj |
|
|
materia_anexada = obj |
|
|
ciclico = False |
|
|
ciclico = False |
|
|
anexadas_anexada = Anexada.objects.filter( |
|
|
anexadas_anexada = Anexada.objects.filter( |
|
|
materia_principal = materia_anexada |
|
|
materia_principal=materia_anexada |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
while anexadas_anexada and not ciclico: |
|
|
while anexadas_anexada and not ciclico: |
|
|
anexadas = [] |
|
|
anexadas = [] |
|
|
|
|
|
|
|
|
for anexa in anexadas_anexada: |
|
|
for anexa in anexadas_anexada: |
|
|
|
|
|
|
|
|
if principal == anexa.materia_anexada: |
|
|
if principal == anexa.materia_anexada: |
|
|
@ -2251,7 +2263,7 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
else: |
|
|
else: |
|
|
for a in Anexada.objects.filter(materia_principal=anexa.materia_anexada): |
|
|
for a in Anexada.objects.filter(materia_principal=anexa.materia_anexada): |
|
|
anexadas.append(a) |
|
|
anexadas.append(a) |
|
|
|
|
|
|
|
|
anexadas_anexada = anexadas |
|
|
anexadas_anexada = anexadas |
|
|
|
|
|
|
|
|
if not ciclico: |
|
|
if not ciclico: |
|
|
@ -2282,7 +2294,7 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
if len(marcadas) == 0: |
|
|
if len(marcadas) == 0: |
|
|
msg = _('Nenhuma máteria foi selecionada.') |
|
|
msg = _('Nenhuma máteria foi selecionada.') |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
|
|
|
|
|
|
if data_anexacao > v_data_desanexacao: |
|
|
if data_anexacao > v_data_desanexacao: |
|
|
msg = _('Data de anexação posterior à data de desanexação.') |
|
|
msg = _('Data de anexação posterior à data de desanexação.') |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
messages.add_message(request, messages.ERROR, msg) |
|
|
@ -2307,7 +2319,8 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
msg = _('Matéria(s) anexada(s).') |
|
|
msg = _('Matéria(s) anexada(s).') |
|
|
messages.add_message(request, messages.SUCCESS, msg) |
|
|
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) |
|
|
return HttpResponseRedirect(success_url) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -2393,6 +2406,7 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): |
|
|
return self.get(self.request, kwargs, {'form':form}) |
|
|
return self.get(self.request, kwargs, {'form':form}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView): |
|
|
class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView): |
|
|
filterset_class = TramitacaoEmLoteFilterSet |
|
|
filterset_class = TramitacaoEmLoteFilterSet |
|
|
|
|
|
|
|
|
|