@ -1,5 +1,5 @@
from re import sub
from operator import itemgetter
from re import sub
from django . contrib import messages
from django . contrib . auth . decorators import permission_required
@ -49,6 +49,7 @@ from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
SessaoPlenaria , SessaoPlenariaPresenca , TipoExpediente ,
TipoResultadoVotacao , TipoSessaoPlenaria , VotoParlamentar )
TipoSessaoCrud = CrudAux . build ( TipoSessaoPlenaria , ' tipo_sessao_plenaria ' )
TipoExpedienteCrud = CrudAux . build ( TipoExpediente , ' tipo_expediente ' )
CargoBancadaCrud = CrudAux . build ( CargoBancada , ' ' )
@ -389,7 +390,8 @@ def get_presencas_generic(model, sessao, legislatura):
presentes = [ p . parlamentar for p in presencas ]
presentes = sorted ( presentes , key = lambda x : remover_acentos ( x . nome_parlamentar ) )
presentes = sorted (
presentes , key = lambda x : remover_acentos ( x . nome_parlamentar ) )
mandato = Mandato . objects . filter (
legislatura = legislatura ) . order_by ( ' parlamentar__nome_parlamentar ' )
@ -408,7 +410,8 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
public = [ RP_LIST , RP_DETAIL ]
class BaseMixin ( MasterDetailCrud . BaseMixin ) :
list_field_names = [ ' numero_ordem ' , ' materia ' , ' materia__ementa ' ,
list_field_names = [ ' numero_ordem ' , ' materia ' ,
( ' materia__ementa ' , ' ' , ' observacao ' ) ,
' resultado ' ]
class CreateView ( MasterDetailCrud . CreateView ) :
@ -439,17 +442,18 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
return initial
class DetailView ( MasterDetailCrud . DetailView ) :
layout_key = ' OrdemDiaDetail '
class ListView ( MasterDetailCrud . ListView ) :
paginate_by = None
ordering = [ ' numero_ordem ' , ' materia ' , ' resultado ' ]
def get_context_data ( self , * * kwargs ) :
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 )
def recuperar_materia ( request ) :
tipo = TipoMateriaLegislativa . objects . get ( pk = request . GET [ ' tipo_materia ' ] )
numero = request . GET [ ' numero_materia ' ]
@ -463,7 +467,7 @@ def recuperar_materia(request):
' id ' : materia . id ,
' indexacao ' : materia . indexacao } )
except ObjectDoesNotExist :
response = JsonResponse ( { ' ementa ' : ' ' , ' id ' : 0 , ' indexacao ' : ' ' } )
response = JsonResponse ( { ' ementa ' : ' ' , ' id ' : 0 , ' indexacao ' : ' ' } )
return response
@ -476,7 +480,8 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
class BaseMixin ( MasterDetailCrud . BaseMixin ) :
list_field_names = [ ' numero_ordem ' , ' materia ' ,
' materia__ementa ' , ' resultado ' ]
( ' materia__ementa ' , ' ' , ' observacao ' ) ,
' resultado ' ]
class ListView ( MasterDetailCrud . ListView ) :
paginate_by = None
@ -544,7 +549,6 @@ class OradorExpedienteCrud(OradorCrud):
return reverse ( ' sapl.sessao:oradorexpediente_list ' ,
kwargs = { ' pk ' : self . kwargs [ ' pk ' ] } )
class UpdateView ( MasterDetailCrud . UpdateView ) :
form_class = OradorExpedienteForm
@ -778,7 +782,8 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
cronometro_discurso = AppsAppConfig . attr ( ' cronometro_discurso ' )
cronometro_aparte = AppsAppConfig . attr ( ' cronometro_aparte ' )
cronometro_ordem = AppsAppConfig . attr ( ' cronometro_ordem ' )
cronometro_consideracoes = AppsAppConfig . attr ( ' cronometro_consideracoes ' )
cronometro_consideracoes = AppsAppConfig . attr (
' cronometro_consideracoes ' )
if ( not cronometro_discurso or not cronometro_aparte
or not cronometro_ordem or not cronometro_consideracoes ) :
@ -999,15 +1004,18 @@ class MesaView(FormMixin, DetailView):
cargos_vagos = list ( set ( cargos ) - set ( cargos_ocupados ) )
# FIX-ME: tem formas melhores de fazer isso, poupando linhas.
parlamentares = Legislatura . objects . get ( id = sessao . legislatura_id ) . mandato_set . all ( )
parlamentares = Legislatura . objects . get (
id = sessao . legislatura_id ) . mandato_set . all ( )
parlamentares_ocupados = [ m . parlamentar for m in mesa ]
parlamentares_vagos = list (
set (
[ p . parlamentar for p in parlamentares ] ) - set (
parlamentares_ocupados ) )
org_parlamentares_vagos = parlamentares_vagos
org_parlamentares_vagos . sort ( key = lambda x : remover_acentos ( x . nome_parlamentar ) )
org_parlamentares_vagos = [ p for p in org_parlamentares_vagos if p . ativo ]
org_parlamentares_vagos . sort (
key = lambda x : remover_acentos ( x . nome_parlamentar ) )
org_parlamentares_vagos = [
p for p in org_parlamentares_vagos if p . ativo ]
# Se todos os cargos estiverem ocupados, a listagem de parlamentares
# deve ser renderizada vazia
if not cargos_vagos :
@ -1328,7 +1336,7 @@ class ResumoView(DetailView):
ora = { ' numero_ordem ' : numero_ordem ,
' url_discurso ' : url_discurso ,
' parlamentar ' : parlamentar ,
' observacao ' : observacao
' observacao ' : observacao
}
oradores . append ( ora )
@ -1825,7 +1833,8 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
elif self . expediente :
expediente_id = kwargs [ ' oid ' ]
try :
materia_votacao = ExpedienteMateria . objects . get ( id = expediente_id )
materia_votacao = ExpedienteMateria . objects . get (
id = expediente_id )
except ObjectDoesNotExist :
raise Http404 ( )
@ -1923,7 +1932,8 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
return self . form_invalid ( form )
def form_invalid ( self , form ) :
errors_tuple = [ ( form [ e ] . label , form . errors [ e ] ) for e in form . errors if e in form . fields ]
errors_tuple = [ ( form [ e ] . label , form . errors [ e ] )
for e in form . errors if e in form . fields ]
error_message = ''' <ul> '''
for e in errors_tuple :
error_message + = ''' <li><b> %s </b>: %s </li> ''' % ( e [ 0 ] , e [ 1 ] [ 0 ] )
@ -2000,8 +2010,10 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin):
elif self . expediente :
expediente_id = kwargs [ ' oid ' ]
expediente = ExpedienteMateria . objects . filter ( id = expediente_id ) . last ( )
votacao = RegistroVotacao . objects . filter ( expediente_id = expediente_id ) . last ( )
expediente = ExpedienteMateria . objects . filter (
id = expediente_id ) . last ( )
votacao = RegistroVotacao . objects . filter (
expediente_id = expediente_id ) . last ( )
if not expediente or not votacao :
raise Http404 ( )
@ -2120,9 +2132,11 @@ class VotacaoNominalTransparenciaDetailView(TemplateView):
materia_votacao = self . request . GET . get ( ' materia ' , None )
if materia_votacao == ' ordem ' :
votacao = RegistroVotacao . objects . filter ( ordem = self . kwargs [ ' oid ' ] ) . last ( )
votacao = RegistroVotacao . objects . filter (
ordem = self . kwargs [ ' oid ' ] ) . last ( )
elif materia_votacao == ' expediente ' :
votacao = RegistroVotacao . objects . filter ( expediente = self . kwargs [ ' oid ' ] ) . last ( )
votacao = RegistroVotacao . objects . filter (
expediente = self . kwargs [ ' oid ' ] ) . last ( )
else :
raise Http404 ( )
@ -2203,9 +2217,11 @@ class VotacaoSimbolicaTransparenciaDetailView(TemplateView):
materia_votacao = self . request . GET . get ( ' materia ' , None )
if materia_votacao == ' ordem ' :
votacao = RegistroVotacao . objects . filter ( ordem = self . kwargs [ ' oid ' ] ) . last ( )
votacao = RegistroVotacao . objects . filter (
ordem = self . kwargs [ ' oid ' ] ) . last ( )
elif materia_votacao == ' expediente ' :
votacao = RegistroVotacao . objects . filter ( expediente = self . kwargs [ ' oid ' ] ) . last ( )
votacao = RegistroVotacao . objects . filter (
expediente = self . kwargs [ ' oid ' ] ) . last ( )
else :
raise Http404 ( )
@ -2214,7 +2230,7 @@ class VotacaoSimbolicaTransparenciaDetailView(TemplateView):
registro_votacao = { ' numero_votos_sim ' : votacao . numero_votos_sim ,
' numero_votos_nao ' : votacao . numero_votos_nao ,
' numero_abstencoes ' : votacao . numero_abstencoes }
context . update ( { ' registro_votacao ' : registro_votacao } )
context . update ( { ' registro_votacao ' : registro_votacao } )
votacao_existente = { ' observacao ' : sub (
' ' , ' ' , strip_tags ( votacao . observacao ) ) ,
@ -2230,6 +2246,7 @@ class VotacaoSimbolicaTransparenciaDetailView(TemplateView):
for tipo in TipoResultadoVotacao . objects . all ( ) :
yield tipo
class VotacaoExpedienteView ( SessaoPermissionMixin ) :
"""
@ -2413,7 +2430,8 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
expediente_id = kwargs [ ' oid ' ]
if int ( request . POST [ ' anular_votacao ' ] ) == 1 :
RegistroVotacao . objects . filter ( expediente_id = expediente_id ) . delete ( )
RegistroVotacao . objects . filter (
expediente_id = expediente_id ) . delete ( )
expediente = ExpedienteMateria . objects . get (
sessao_plenaria_id = self . object . id ,