Browse Source

Permite paginação de matérias no expediente e ordem do dia (#3086)

* Ajusta o SAPL à loucura de Sete Lagoas-MG

* adicionando paginacao a votacao em bloco para ordem do dia e expediente de tamanho 500

* Endereçando comentário de revisão

* ajuste de autopep8 da IDE

* add rolagens faltantes p matérias em algumas funcs

* Update sapl/sessao/views.py

Co-Authored-By: Edward <9326037+edwardoliveira@users.noreply.github.com>

* corrige sugestion

* Adaptando solução para leitura de materias ordem e expediente

* Conserta commit #9a3039ba

Co-authored-by: Ricardo Lima Canela <ricardolimacanela@gmail.com>
Co-authored-by: Leandro  Silva <leandroroberto.br@gmail.com>
Co-authored-by: Ulysses Lara <ulysses3353@gmail.com>
pull/3163/head
Edward 5 years ago
committed by Edward Ribeiro
parent
commit
57d168c511
  1. 316
      sapl/sessao/views.py
  2. 4
      sapl/templates/sessao/votacao/votacao_bloco.html

316
sapl/sessao/views.py

@ -8,7 +8,6 @@ from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
from django.db.models import Max, Q
from django.forms.utils import ErrorList
from django.http import JsonResponse
from django.http.response import Http404, HttpResponseRedirect
from django.utils import timezone
@ -17,7 +16,7 @@ from django.utils.decorators import method_decorator
from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import FormView, ListView, TemplateView, CreateView, UpdateView
from django.views.generic import (FormView, ListView, TemplateView)
from django.views.generic.base import RedirectView
from django.views.generic.detail import DetailView
from django.views.generic.edit import FormMixin
@ -55,8 +54,8 @@ from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, OcorrenciaS
PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta,
RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, ORDENACAO_RESUMO,
RegistroLeitura, TipoListaDiscurso, ListaDiscurso, CronometroLista, ParlamentarLista)
RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia,
ORDENACAO_RESUMO, RegistroLeitura, TipoListaDiscurso, ListaDiscurso, CronometroLista, ParlamentarLista)
TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
@ -214,6 +213,8 @@ def abrir_votacao(request, pk, spk):
if not model:
raise Http404()
query_params = "?"
if (verifica_presenca(request, presenca_model, spk) and
verifica_votacoes_abertas(request) and
verifica_sessao_iniciada(request, spk)):
@ -224,8 +225,15 @@ def abrir_votacao(request, pk, spk):
sessao.save()
materia_votacao.save()
return HttpResponseRedirect(
reverse('sapl.sessao:' + redirect_url, kwargs={'pk': spk}))
if 'page' in request.GET:
query_params += 'page={}&'.format(request.GET['page'])
query_params += "#id{}".format(materia_votacao.materia.id)
success_url = reverse('sapl.sessao:' + redirect_url, kwargs={'pk': spk})
success_url += query_params
return HttpResponseRedirect(success_url)
def customize_link_materia(context, pk, has_permission, is_expediente):
@ -256,12 +264,13 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
if tramitacao and tramitacao.tipo_turno:
turno = tramitacao.tipo_turno.nome
title_materia = '''<a href=%s>%s</a> </br>
title_materia = """<a id=id%s href=%s>%s</a> </br>
<b>Processo:</b> %s </br>
<b>Autor:</b> %s </br>
<b>Protocolo:</b> %s </br>
<b>Turno:</b> %s </br>
''' % (url_materia,
""" % (obj.materia.id,
url_materia,
row[1][0],
numeracao if numeracao else '',
autor if autor else '',
@ -278,9 +287,9 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
materia=obj.materia).exists()
exist_leitura = obj.registroleitura_set.filter(
materia=obj.materia).exists()
if (obj.tipo_votacao != 4 and not exist_resultado and not exist_retirada) or\
(obj.tipo_votacao == 4 and not exist_leitura):
(obj.tipo_votacao == 4 and not exist_leitura):
if obj.votacao_aberta:
url = ''
if is_expediente:
@ -335,21 +344,28 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
'oid': obj.pk,
'mid': obj.materia_id})
page_number = ""
if 'page' in context:
#url += "?page={}".format(context['page'])
page_number = "<input type='hidden' name='page' value='%s' />" % context['page']
if has_permission:
if obj.tipo_votacao != LEITURA:
btn_registrar = '''
<form action="%s">
<input type="submit" class="btn btn-primary"
value="Registrar Votação" />
%s
</form>''' % (
url)
url, page_number)
else:
btn_registrar = '''
<form action="%s">
<input type="submit" class="btn btn-primary"
value="Registrar Leitura" />
%s
</form>''' % (
url)
url, page_number)
resultado = btn_registrar
else:
@ -358,14 +374,21 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
if is_expediente:
url = reverse('sapl.sessao:abrir_votacao', kwargs={
'pk': obj.pk,
'spk': obj.sessao_plenaria_id
'spk': obj.sessao_plenaria_id,
}) + '?tipo_materia=expediente'
if 'page' in context:
url += '&page=' + context['page']
else:
url = reverse('sapl.sessao:abrir_votacao', kwargs={
'pk': obj.pk,
'spk': obj.sessao_plenaria_id
}) + '?tipo_materia=ordem'
if 'page' in context:
url += '&page=' + context['page']
if has_permission:
if not obj.tipo_votacao == LEITURA:
btn_abrir = '''
@ -462,10 +485,12 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
'oid': obj.pk,
'mid': obj.materia_id})
resultado = ('<a href="%s">%s<br/><br/>%s</a>' %
(url,
resultado_descricao,
resultado_observacao))
resultado = (
'<a href="%s?page=%s">%s<br/><br/>%s</a>' % (
url,
context.get('page', 1),
resultado_descricao,
resultado_observacao))
else:
if obj.tipo_votacao == NOMINAL:
@ -522,12 +547,13 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
def get_presencas_generic(model, sessao, legislatura):
presentes = [p.parlamentar for p in model.objects.filter(sessao_plenaria=sessao)]
presentes = [p.parlamentar for p in model.objects.filter(
sessao_plenaria=sessao)]
parlamentares_mandato = Mandato.objects.filter(
legislatura=legislatura,
data_inicio_mandato__lte=sessao.data_inicio,
data_fim_mandato__gte=sessao.data_inicio
legislatura=legislatura,
data_inicio_mandato__lte=sessao.data_inicio,
data_fim_mandato__gte=sessao.data_inicio
).distinct().order_by(
'parlamentar__nome_parlamentar')
@ -551,7 +577,7 @@ class TipoExpedienteCrud(CrudAux):
# Se todas as referências a este tipo forem de conteúdo vazio,
# significa que pode ser apagado
if self.object.expedientesessao_set.filter(conteudo='').count() == \
self.object.expedientesessao_set.all().count():
self.object.expedientesessao_set.all().count():
self.object.expedientesessao_set.all().delete()
return CrudAux.DeleteView.delete(self, *args, **kwargs)
@ -603,6 +629,11 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
ordering = ['numero_ordem', 'materia', 'resultado']
def get_context_data(self, **kwargs):
if self.get_queryset().count() > 500:
self.paginate_by = 50
else:
self.paginate_by = None
context = super().get_context_data(**kwargs)
has_permition = self.request.user.has_module_perms(AppConfig.label)
return customize_link_materia(context, self.kwargs['pk'], has_permition, False)
@ -642,7 +673,17 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
ordering = ['numero_ordem', 'materia', 'resultado']
def get_context_data(self, **kwargs):
if self.get_queryset().count() > 500:
self.paginate_by = 50
else:
self.paginate_by = None
context = super().get_context_data(**kwargs)
if self.request.GET.get('page'):
context['page'] = self.request.GET.get('page')
has_permition = self.request.user.has_module_perms(AppConfig.label)
return customize_link_materia(context, self.kwargs['pk'], has_permition, True)
@ -695,7 +736,8 @@ class OradorCrud(MasterDetailCrud):
sessao = SessaoPlenaria.objects.get(id=sessao_pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class CreateView(MasterDetailCrud.CreateView):
@ -711,14 +753,14 @@ class OradorCrud(MasterDetailCrud):
sessao = SessaoPlenaria.objects.get(id=sessao_pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
def get_success_url(self):
return reverse('sapl.sessao:orador_list',
kwargs={'pk': self.kwargs['pk']})
class DetailView(MasterDetailCrud.DetailView):
def get_context_data(self, **kwargs):
@ -727,10 +769,10 @@ class OradorCrud(MasterDetailCrud):
sessao = SessaoPlenaria.objects.get(id=sessao_pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class UpdateView(MasterDetailCrud.UpdateView):
form_class = OradorForm
@ -747,10 +789,10 @@ class OradorCrud(MasterDetailCrud):
sessao = SessaoPlenaria.objects.get(id=sessao_pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class DeleteView(MasterDetailCrud.DeleteView):
def get_context_data(self, **kwargs):
@ -759,7 +801,8 @@ class OradorCrud(MasterDetailCrud):
sessao = SessaoPlenaria.objects.get(id=sessao_pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
@ -773,17 +816,16 @@ class OradorExpedienteCrud(OradorCrud):
def get_initial(self):
return {'id_sessao': self.kwargs['pk']}
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
pk = context['root_pk']
sessao = SessaoPlenaria.objects.get(id=pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
def get_success_url(self):
return reverse('sapl.sessao:oradorexpediente_list',
kwargs={'pk': self.kwargs['pk']})
@ -801,10 +843,10 @@ class OradorExpedienteCrud(OradorCrud):
sessao = SessaoPlenaria.objects.get(id=pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class ListView(MasterDetailCrud.ListView):
ordering = ['numero_ordem']
@ -814,7 +856,8 @@ class OradorExpedienteCrud(OradorCrud):
sessao = SessaoPlenaria.objects.get(id=pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class DetailView(MasterDetailCrud.DetailView):
@ -825,9 +868,10 @@ class OradorExpedienteCrud(OradorCrud):
sessao = SessaoPlenaria.objects.get(id=pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class DeleteView(MasterDetailCrud.DeleteView):
def get_context_data(self, **kwargs):
@ -836,9 +880,11 @@ class OradorExpedienteCrud(OradorCrud):
sessao = SessaoPlenaria.objects.get(id=sessao_pk)
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class OradorOrdemDiaCrud(OradorCrud):
model = OradorOrdemDia
@ -953,7 +999,8 @@ class SessaoCrud(Crud):
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
def get_initial(self):
@ -1005,7 +1052,8 @@ class SessaoCrud(Crud):
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
class DetailView(Crud.DetailView):
@ -1018,13 +1066,13 @@ class SessaoCrud(Crud):
return 'SessaoSolene'
return 'SessaoPlenaria'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
@ -1063,7 +1111,8 @@ class PresencaView(FormMixin, PresencaMixin, DetailView):
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
@method_decorator(permission_required(
@ -1154,7 +1203,8 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
@ -1383,7 +1433,8 @@ class MesaView(FormMixin, DetailView):
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
def get_success_url(self):
@ -1605,10 +1656,11 @@ def get_identificacao_basica(sessao_plenaria):
'abertura': abertura, 'hora_inicio': sessao_plenaria.hora_inicio},
_('Encerramento: %(encerramento)s %(hora_fim)s') % {
'encerramento': encerramento, 'hora_fim': sessao_plenaria.hora_fim},
],
],
'sessaoplenaria': sessao_plenaria}
if sessao_plenaria.tipo.nome == "Solene" and tema_solene:
context.update({'tema_solene': 'Tema da Sessão Solene: %s' % tema_solene})
context.update(
{'tema_solene': 'Tema da Sessão Solene: %s' % tema_solene})
return context
@ -1773,7 +1825,8 @@ def get_assinaturas(sessao_plenaria):
elif config_assinatura_ata == 'P' and presidente_dia and presidente_dia[0]:
context.update(
{'texto_assinatura': 'Assinatura do Presidente da Sessão'})
assinatura_presidente = [{'parlamentar': presidente_dia[0], 'cargo': "Presidente"}]
assinatura_presidente = [
{'parlamentar': presidente_dia[0], 'cargo': "Presidente"}]
context.update({'assinatura_mesa': assinatura_presidente})
return context
@ -2068,7 +2121,8 @@ class ResumoView(DetailView):
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
def get(self, request, *args, **kwargs):
@ -2096,7 +2150,8 @@ class ExpedienteView(FormMixin, DetailView):
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
@method_decorator(permission_required('sessao.add_expedientesessao'))
@ -2150,7 +2205,8 @@ class ExpedienteView(FormMixin, DetailView):
expedientes_salvos = [e.tipo.id for e in expedientes_sessao]
tipos_null = TipoExpediente.objects.all().exclude(id__in=expedientes_salvos).order_by('ordenacao', 'nome')
tipos_null = TipoExpediente.objects.all().exclude(
id__in=expedientes_salvos).order_by('ordenacao', 'nome')
expedientes = []
for e, t in zip(expedientes_sessao, tipos):
@ -2186,7 +2242,8 @@ class OcorrenciaSessaoView(FormMixin, DetailView):
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update({'subnav_template_name': 'sessao/subnav-solene.yaml'})
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
def delete(self):
@ -2303,9 +2360,13 @@ class VotacaoEditView(SessaoPermissionMixin):
yield tipo
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
kwargs={'pk': pk}) + page
class VotacaoView(SessaoPermissionMixin):
@ -2452,9 +2513,13 @@ class VotacaoView(SessaoPermissionMixin):
yield tipo
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
kwargs={'pk': pk}) + page + "#id{}".format(self.kwargs['mid'])
def fechar_votacao_materia(materia):
@ -2571,6 +2636,10 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
form = self.get_form()
username = request.user.username
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
if self.ordem:
ordem_id = kwargs['oid']
try:
@ -2602,12 +2671,19 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
if 'cancelar-votacao' in request.POST:
fechar_votacao_materia(materia_votacao)
if self.ordem:
return HttpResponseRedirect(reverse(
'sapl.sessao:ordemdia_list', kwargs={'pk': kwargs['pk']}))
return HttpResponseRedirect(
reverse(
'sapl.sessao:ordemdia_list',
kwargs={'pk': kwargs['pk']}
) + page + "#id{}".format(self.kwargs['mid'])
)
else:
return HttpResponseRedirect(reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': kwargs['pk']}))
return HttpResponseRedirect(
reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': kwargs['pk']}
) + page + "#id{}".format(self.kwargs['mid'])
)
else:
if form.cleaned_data['resultado_votacao'] == None:
form.add_error(None, 'Não é possível finalizar a votação sem '
@ -2754,14 +2830,22 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
yield [parlamentar, voto.voto]
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
if self.ordem:
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
return reverse(
'sapl.sessao:ordemdia_list',
kwargs={'pk': pk}
) + page + "#id{}".format(self.kwargs['mid'])
elif self.expediente:
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
return reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': pk}
) + page + "#id{}".format(self.kwargs['mid'])
class VotacaoNominalEditAbstract(SessaoPermissionMixin):
@ -2879,14 +2963,22 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin):
yield tipo
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
if self.ordem:
return reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
return reverse(
'sapl.sessao:ordemdia_list',
kwargs={'pk': pk}
) + page + "#id{}".format(self.kwargs['mid'])
elif self.expediente:
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
return reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': pk}
) + page + "#id{}".format(self.kwargs['mid'])
class VotacaoNominalView(VotacaoNominalAbstract):
@ -2988,9 +3080,13 @@ class VotacaoNominalExpedienteDetailView(DetailView):
yield tipo
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
kwargs={'pk': pk}) + page
class VotacaoSimbolicaTransparenciaDetailView(TemplateView):
@ -3175,9 +3271,15 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
yield tipo
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
return reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': pk}
) + page + "#id{}".format(self.kwargs['mid'])
class VotacaoExpedienteEditView(SessaoPermissionMixin):
@ -3190,9 +3292,15 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
form_class = VotacaoEditForm
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
return reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': pk}
) + page + "#id{}".format(self.kwargs['mid'])
def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all():
@ -3293,8 +3401,8 @@ class PautaSessaoDetailView(DetailView):
model = SessaoPlenaria
def get(self, request, *args, **kwargs):
from sapl.relatorios.views import relatorio_pauta_sessao_weasy # Evitar import ciclico
from sapl.relatorios.views import relatorio_pauta_sessao_weasy # Evitar import ciclico
self.object = self.get_object()
context = self.get_context_data(object=self.object)
@ -3311,7 +3419,8 @@ class PautaSessaoDetailView(DetailView):
context.update({'basica': [
_('Tipo de Sessão: %(tipo)s') % {'tipo': self.object.tipo},
_('Abertura: %(abertura)s - %(hora_inicio)s') % {'abertura': abertura, 'hora_inicio':hora_inicio},
_('Abertura: %(abertura)s - %(hora_inicio)s') % {
'abertura': abertura, 'hora_inicio': hora_inicio},
_('Encerramento: %(encerramento)s - %(hora_fim)s') % {
'encerramento': encerramento, 'hora_fim': hora_fim},
]})
@ -3420,10 +3529,11 @@ class PautaSessaoDetailView(DetailView):
context.update({'materias_ordem': materias_ordem})
context.update({'subnav_template_name': 'sessao/pauta_subnav.yaml'})
is_pdf = True if request.build_absolute_uri().split('/')[-1] == 'pdf' else False
is_pdf = True if request.build_absolute_uri().split(
'/')[-1] == 'pdf' else False
if is_pdf:
return relatorio_pauta_sessao_weasy(self,request,context)
return relatorio_pauta_sessao_weasy(self, request, context)
else:
return self.render_to_response(context)
@ -3825,6 +3935,7 @@ class VotacaoEmBlocoExpediente(PermissionRequiredForAppCrudMixin, ListView):
template_name = 'sessao/votacao/votacao_bloco.html'
app_label = AppConfig.label
expediente = True
paginate_by = 100
def get_queryset(self):
return ExpedienteMateria.objects.filter(sessao_plenaria_id=self.kwargs['pk'],
@ -3850,6 +3961,7 @@ class VotacaoEmBlocoExpediente(PermissionRequiredForAppCrudMixin, ListView):
class VotacaoEmBlocoOrdemDia(VotacaoEmBlocoExpediente):
expediente = False
paginate_by = 100
def get_queryset(self):
return OrdemDia.objects.filter(sessao_plenaria_id=self.kwargs['pk'],
@ -4457,7 +4569,8 @@ class AbstractLeituraView(FormView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['materia'] = MateriaLegislativa.objects.get(id=self.kwargs['mid'])
context['materia'] = MateriaLegislativa.objects.get(
id=self.kwargs['mid'])
return context
def get_initial(self):
@ -4467,11 +4580,13 @@ class AbstractLeituraView(FormView):
initial['materia__ementa'] = materia.ementa
if self.expediente:
expediente = ExpedienteMateria.objects.get(id=self.kwargs['oid'])
instance = RegistroLeitura.objects.filter(materia=materia, expediente=expediente)
instance = RegistroLeitura.objects.filter(
materia=materia, expediente=expediente)
initial['expediente'] = expediente
else:
ordem = OrdemDia.objects.get(id=self.kwargs['oid'])
instance = RegistroLeitura.objects.filter(materia=materia, ordem=ordem)
instance = RegistroLeitura.objects.filter(
materia=materia, ordem=ordem)
initial['ordem'] = ordem
initial['instance'] = instance
initial['user'] = self.request.user
@ -4491,21 +4606,30 @@ class AbstractLeituraView(FormView):
return super().form_valid(form)
def get_success_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk']
if self.expediente:
url = reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
kwargs={'pk': pk}) + page
else:
url = reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
kwargs={'pk': pk}) + page
return url
def cancel_url(self):
page = ''
if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page'])
url = reverse('sapl.sessao:retirar_leitura',
kwargs={
'pk': self.kwargs['pk'],
'iso': 1 if not self.expediente else 0,
'oid': self.kwargs['oid']})
kwargs={
'pk': self.kwargs['pk'],
'iso': 1 if not self.expediente else 0,
'oid': self.kwargs['oid'],
},
) + page
return url
@ -4520,22 +4644,30 @@ class OrdemDiaLeituraView(AbstractLeituraView):
@permission_required('sessao.change_expedientemateria',
'sessao.change_ordemdia')
def retirar_leitura(request, pk, iso, oid):
page = ''
if 'page' in request.GET:
page = '?page={}'.format(request.GET['page'])
is_ordem = bool(int(iso))
if not is_ordem:
ordem_expediente = ExpedienteMateria.objects.get(id=oid)
RegistroLeitura.objects.filter(materia=ordem_expediente.materia, expediente=ordem_expediente).delete()
RegistroLeitura.objects.filter(
materia=ordem_expediente.materia, expediente=ordem_expediente).delete()
succ_url = reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})
kwargs={'pk': pk}) + page
else:
ordem_expediente = OrdemDia.objects.get(id=oid)
RegistroLeitura.objects.filter(materia=ordem_expediente.materia, ordem=ordem_expediente).delete()
RegistroLeitura.objects.filter(
materia=ordem_expediente.materia, ordem=ordem_expediente).delete()
succ_url = reverse('sapl.sessao:ordemdia_list',
kwargs={'pk': pk})
kwargs={'pk': pk}) + page
ordem_expediente.resultado = ""
ordem_expediente.votacao_aberta = False
ordem_expediente.save()
return HttpResponseRedirect(succ_url)
class ListaDiscursoView(TemplateView):
template_name = 'sessao/lista_discurso.html'

4
sapl/templates/sessao/votacao/votacao_bloco.html

@ -71,10 +71,12 @@
<strong>Ementa:</strong>&nbsp;{{ o.materia.ementa|safe }}</br>
<p></p>
</td>
</tr>
</tr>
{% endif %}
{% endfor %}
</table>
{% include 'paginacao.html' %}
<table class="table table-striped table-bordered" style="display:none" id="nenhuma_mat">

Loading…
Cancel
Save