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

Loading…
Cancel
Save