@ -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 '