@ -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 , ' ' )
@ -325,9 +326,9 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
' mid ' : obj . materia_id } )
resultado = ( ' <a href= " %s " > %s <br/> %s </a> ' %
( url ,
resultado_descricao ,
resultado_observacao ) )
( url ,
resultado_descricao ,
resultado_observacao ) )
else :
if obj . tipo_votacao == 2 :
@ -338,7 +339,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
' pk ' : obj . sessao_plenaria_id ,
' oid ' : obj . pk ,
' mid ' : obj . materia_id } ) + \
' ?&materia=expediente '
' ?&materia=expediente '
else :
url = reverse (
' sapl.sessao:votacao_nominal_transparencia ' ,
@ -346,12 +347,12 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
' pk ' : obj . sessao_plenaria_id ,
' oid ' : obj . pk ,
' mid ' : obj . materia_id } ) + \
' ?&materia=ordem '
' ?&materia=ordem '
resultado = ( ' <a href= " %s " > %s <br/> %s </a> ' %
( url ,
resultado_descricao ,
resultado_observacao ) )
( url ,
resultado_descricao ,
resultado_observacao ) )
elif obj . tipo_votacao == 1 :
if is_expediente :
@ -361,7 +362,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
' pk ' : obj . sessao_plenaria_id ,
' oid ' : obj . pk ,
' mid ' : obj . materia_id } ) + \
' ?&materia=expediente '
' ?&materia=expediente '
else :
url = reverse (
' sapl.sessao:votacao_simbolica_transparencia ' ,
@ -369,7 +370,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
' pk ' : obj . sessao_plenaria_id ,
' oid ' : obj . pk ,
' mid ' : obj . materia_id } ) + \
' ?&materia=ordem '
' ?&materia=ordem '
resultado = ( ' <a href= " %s " > %s <br/> %s </a> ' %
( url ,
@ -377,8 +378,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
resultado_observacao ) )
else :
resultado = ( ' %s <br/> %s ' %
( resultado_descricao ,
resultado_observacao ) )
( resultado_descricao ,
resultado_observacao ) )
context [ ' rows ' ] [ i ] [ 3 ] = ( resultado , None )
return context
@ -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
@ -669,10 +673,10 @@ class SessaoCrud(Crud):
return {
' legislatura ' : legislatura ,
' sessao_legislativa ' : legislatura . sessaolegislativa_set . filter (
legislatura_id = legislatura . id ,
data_inicio__year = timezone . now ( ) . year
) . first ( )
}
legislatura_id = legislatura . id ,
data_inicio__year = timezone . now ( ) . year
) . first ( )
}
else :
msg = _ ( ' Cadastre alguma legislatura antes de adicionar ' +
' uma sessão plenária! ' )
@ -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 :
@ -1159,15 +1167,15 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
ordenacao = ResumoOrdenacao . objects . first ( )
if ordenacao :
initial . update ( { ' primeiro ' : ordenacao . primeiro ,
' segundo ' : ordenacao . segundo ,
' terceiro ' : ordenacao . terceiro ,
' quarto ' : ordenacao . quarto ,
' quinto ' : ordenacao . quinto ,
' sexto ' : ordenacao . sexto ,
' setimo ' : ordenacao . setimo ,
' oitavo ' : ordenacao . oitavo ,
' nono ' : ordenacao . nono ,
' decimo ' : ordenacao . decimo } )
' segundo ' : ordenacao . segundo ,
' terceiro ' : ordenacao . terceiro ,
' quarto ' : ordenacao . quarto ,
' quinto ' : ordenacao . quinto ,
' sexto ' : ordenacao . sexto ,
' setimo ' : ordenacao . setimo ,
' oitavo ' : ordenacao . oitavo ,
' nono ' : ordenacao . nono ,
' decimo ' : ordenacao . decimo } )
return initial
def form_valid ( self , form ) :
@ -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 )
@ -1478,8 +1486,8 @@ class ExpedienteView(FormMixin, DetailView):
for tipo , conteudo in zip ( list_tipo , list_conteudo ) :
ExpedienteSessao . objects . filter (
sessao_plenaria_id = self . object . id ,
tipo_id = tipo ) . delete ( )
sessao_plenaria_id = self . object . id ,
tipo_id = tipo ) . delete ( )
expediente = ExpedienteSessao ( )
expediente . sessao_plenaria_id = self . object . id
@ -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,18 +2217,20 @@ 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 ( )
context [ ' votacao ' ] = votacao
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 } )
' numero_votos_nao ' : votacao . numero_votos_nao ,
' numero_abstencoes ' : votacao . numero_abstencoes }
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 ,
@ -2452,10 +2470,10 @@ class PautaSessaoView(TemplateView):
sessao = SessaoPlenaria . objects . order_by ( " -data_inicio " ) . first ( )
if not sessao :
return self . render_to_response ( { } )
return self . render_to_response ( { } )
return HttpResponseRedirect (
reverse ( ' sapl.sessao:pauta_sessao_detail ' , kwargs = { ' pk ' : sessao . pk } ) )
reverse ( ' sapl.sessao:pauta_sessao_detail ' , kwargs = { ' pk ' : sessao . pk } ) )
class PautaSessaoDetailView ( DetailView ) :