@ -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
@ -49,7 +48,7 @@ from .models import (Bancada, CargoBancada, CargoMesa,
PresencaOrdemDia , RegistroVotacao , ResumoOrdenacao ,
SessaoPlenaria , SessaoPlenariaPresenca , TipoExpediente ,
TipoResultadoVotacao , TipoSessaoPlenaria , VotoParlamentar , TipoRetiradaPauta ,
RetiradaPauta , TipoJustificativa , JustificativaAusencia , OradorOrdemDia ,
RetiradaPauta , TipoJustificativa , JustificativaAusencia , OradorOrdemDia ,
ORDENACAO_RESUMO , RegistroLeitura )
@ -196,6 +195,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 ) ) :
@ -206,8 +207,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 ) :
@ -241,12 +249,13 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
turno = t [ 1 ]
break
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 ' ' ,
@ -263,9 +272,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 :
@ -320,21 +329,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 :
@ -343,14 +359,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 = '''
@ -447,10 +470,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 :
@ -507,12 +532,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 ' )
@ -527,14 +553,14 @@ class TipoExpedienteCrud(CrudAux):
model = TipoExpediente
class DeleteView ( CrudAux . DeleteView ) :
def delete ( self , * args , * * kwargs ) :
self . object = self . get_object ( )
# 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
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 )
@ -586,6 +612,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 )
@ -625,7 +656,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 )
@ -678,7 +719,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 ) :
@ -694,14 +736,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 ) :
@ -710,10 +752,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
@ -730,10 +772,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 ) :
@ -742,7 +784,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
@ -756,16 +799,15 @@ 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 ' ,
@ -784,10 +826,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 ' ]
@ -797,7 +839,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 ) :
@ -808,9 +851,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 ) :
@ -819,9 +863,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
@ -946,7 +992,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 ) :
@ -998,7 +1045,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 ) :
@ -1011,13 +1059,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
@ -1056,7 +1104,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 (
@ -1156,7 +1205,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,9 +1433,10 @@ 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 ) :
pk = self . kwargs [ ' pk ' ]
return reverse ( ' sapl.sessao:mesa ' , kwargs = { ' pk ' : pk } )
@ -1600,10 +1651,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
@ -1768,7 +1820,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
@ -2063,7 +2116,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 ) :
@ -2091,7 +2145,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 ' ) )
@ -2145,8 +2200,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 ) :
@ -2182,7 +2237,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 ) :
@ -2299,9 +2355,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 ) :
@ -2367,7 +2427,7 @@ class VotacaoView(SessaoPermissionMixin):
ordem_id = kwargs [ ' oid ' ]
ordem = OrdemDia . objects . get ( id = ordem_id )
presentes_id = [
presente . parlamentar . id for presente in PresencaOrdemDia . objects . filter (
sessao_plenaria_id = self . kwargs [ ' pk ' ]
@ -2447,9 +2507,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 ) :
@ -2566,6 +2630,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 :
@ -2597,12 +2665,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 '
@ -2749,14 +2824,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 ) :
@ -2874,14 +2957,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 ) :
@ -2983,9 +3074,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 ) :
@ -3052,7 +3147,7 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
expediente_id = kwargs [ ' oid ' ]
expediente = ExpedienteMateria . objects . get ( id = expediente_id )
presentes_id = [
presente . parlamentar . id for presente in SessaoPlenariaPresenca . objects . filter (
sessao_plenaria_id = self . kwargs [ ' pk ' ]
@ -3170,9 +3265,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 ) :
@ -3185,9 +3286,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 ( ) :
@ -3288,8 +3395,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 )
@ -3306,7 +3413,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 } ,
] } )
@ -3415,10 +3523,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 )
@ -3820,6 +3929,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 ' ] ,
@ -3845,6 +3955,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 ' ] ,
@ -3881,7 +3992,7 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
if request . POST [ ' origem ' ] == ' ordem ' :
ordens = OrdemDia . objects . filter (
id__in = request . POST . getlist ( ' marcadas_1 ' ) )
presentes_id = [
presente . parlamentar . id for presente in PresencaOrdemDia . objects . filter (
sessao_plenaria_id = self . kwargs [ ' pk ' ]
@ -3900,7 +4011,7 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
else :
expedientes = ExpedienteMateria . objects . filter (
id__in = request . POST . getlist ( ' marcadas_1 ' ) )
presentes_id = [
presente . parlamentar . id for presente in SessaoPlenariaPresenca . objects . filter (
sessao_plenaria_id = self . kwargs [ ' pk ' ]
@ -4040,7 +4151,7 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
if self . request . POST [ ' origem ' ] == ' ordem ' :
ordens = OrdemDia . objects . filter (
id__in = self . request . POST . getlist ( ' ordens ' ) )
presentes_id = [
presente . parlamentar . id for presente in PresencaOrdemDia . objects . filter (
sessao_plenaria_id = self . kwargs [ ' pk ' ]
@ -4054,12 +4165,12 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
qtde_ativos = len ( presenca_ativos )
context . update ( { ' ordens ' : ordens ,
' total_presentes ' : qtde_presentes ,
' total_presentes ' : qtde_presentes ,
' total_votantes ' : qtde_ativos } )
elif self . request . POST [ ' origem ' ] == ' expediente ' :
expedientes = ExpedienteMateria . objects . filter (
id__in = self . request . POST . getlist ( ' expedientes ' ) )
presentes_id = [
presente . parlamentar . id for presente in SessaoPlenariaPresenca . objects . filter (
sessao_plenaria_id = self . kwargs [ ' pk ' ]
@ -4388,7 +4499,6 @@ class RetiradaPautaCrud(MasterDetailCrud):
pass
class AbstractLeituraView ( FormView ) :
template_name = ' sessao/votacao/leitura_form.html '
success_url = ' / '
@ -4396,7 +4506,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 ) :
@ -4406,11 +4517,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
@ -4430,21 +4543,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
@ -4459,19 +4581,24 @@ 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 )
return HttpResponseRedirect ( succ_url )