@ -38,10 +38,10 @@ from sapl.materia.models import (Autoria, TipoMateriaLegislativa,
from sapl . materia . views import MateriaLegislativaPesquisaView
from sapl . parlamentares . models import ( Filiacao , Legislatura , Mandato ,
Parlamentar , SessaoLegislativa )
from sapl . protocoloadm . models import TipoDocumentoAdministrativo , \
from sapl . protocoloadm . models import TipoDocumentoAdministrativo , \
DocumentoAdministrativo
from sapl . sessao . apps import AppConfig
from sapl . sessao . forms import ExpedienteMateriaForm , OrdemDiaForm , OrdemExpedienteLeituraForm , \
from sapl . sessao . forms import ExpedienteMateriaForm , OrdemDiaForm , OrdemExpedienteLeituraForm , \
CorrespondenciaForm , CorrespondenciaEmLoteFilterSet
from sapl . sessao . models import Correspondencia
from sapl . settings import TIME_ZONE
@ -62,7 +62,6 @@ from .models import (Bancada, CargoBancada, CargoMesa,
RetiradaPauta , TipoJustificativa , JustificativaAusencia , OradorOrdemDia ,
ORDENACAO_RESUMO , RegistroLeitura )
TipoSessaoCrud = CrudAux . build ( TipoSessaoPlenaria , ' tipo_sessao_plenaria ' )
TipoJustificativaCrud = CrudAux . build ( TipoJustificativa , ' tipo_justificativa ' )
CargoBancadaCrud = CrudAux . build ( CargoBancada , ' ' )
@ -167,7 +166,8 @@ def verifica_sessao_iniciada(request, spk, is_leitura=False):
username = request . user . username
aux_text = ' leitura ' if is_leitura else ' votação '
logger . info ( ' user= ' + username + ' . Não é possível abrir matérias para {} . '
' Esta SessaoPlenaria (id= {} ) não foi iniciada ou está finalizada. ' . format ( aux_text , spk ) )
' Esta SessaoPlenaria (id= {} ) não foi iniciada ou está finalizada. ' . format (
aux_text , spk ) )
msg = _ ( ' Não é possível abrir matérias para {} . '
' Esta Sessão Plenária não foi iniciada ou está finalizada. '
' Vá em " Abertura " -> " Dados Básicos " e altere os valores dos campos necessários. ' . format ( aux_text ) )
@ -235,11 +235,11 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
num_protocolo = materia . numero_protocolo if materia . numero_protocolo else " - "
sessao_plenaria = SessaoPlenaria . objects . get ( id = pk )
data_sessao = sessao_plenaria . data_fim if sessao_plenaria . data_fim else sessao_plenaria . data_inicio
tramitacao = Tramitacao . objects \
. select_related ( ' materia ' , ' status ' , ' materia__tipo ' ) \
. filter ( materia = materia , turno__isnull = False , data_tramitacao__lte = data_sessao ) \
. exclude ( turno__exact = ' ' ) \
. order_by ( ' -data_tramitacao ' , ' -id ' ) \
tramitacao = Tramitacao . objects \
. select_related ( ' materia ' , ' status ' , ' materia__tipo ' ) \
. filter ( materia = materia , turno__isnull = False , data_tramitacao__lte = data_sessao ) \
. exclude ( turno__exact = ' ' ) \
. order_by ( ' -data_tramitacao ' , ' -id ' ) \
. first ( )
turno = ' - '
if tramitacao :
@ -247,9 +247,9 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
if t [ 0 ] == tramitacao . turno :
turno = t [ 1 ]
break
materia_em_tramitacao = MateriaEmTramitacao . objects \
. select_related ( " materia " , " tramitacao " ) \
. filter ( materia = materia ) \
materia_em_tramitacao = MateriaEmTramitacao . objects \
. select_related ( " materia " , " tramitacao " ) \
. filter ( materia = materia ) \
. first ( )
# idUnica para cada materia
idAutor = " autor " + str ( i )
@ -274,8 +274,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
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 ) :
if ( obj . tipo_votacao != LEITURA and not exist_resultado and not exist_retirada ) or \
( obj . tipo_votacao == LEITURA and not exist_leitura ) :
if obj . votacao_aberta :
url = ' '
if is_expediente :
@ -1815,7 +1815,8 @@ def insere_parlamentar_composicao(request):
cargo_id = composicao . cargo . id ) . exists ( )
if parlamentar_ja_inserido :
logger . debug ( " user= " + username + " . Parlamentar (id= {} ) já inserido na sessao_plenaria(id= {} ) e cargo(ìd= {} ). "
logger . debug (
" user= " + username + " . Parlamentar (id= {} ) já inserido na sessao_plenaria(id= {} ) e cargo(ìd= {} ). "
. format ( request . POST [ ' parlamentar ' ] , composicao . sessao_plenaria . id , composicao . cargo . id ) )
return JsonResponse ( { ' msg ' : ( ' Parlamentar já inserido! ' , 0 ) } )
@ -1968,7 +1969,6 @@ def get_mesa_diretora(sessao_plenaria):
def get_presenca_sessao ( sessao_plenaria ) :
parlamentares_sessao = [ p . parlamentar for p in SessaoPlenariaPresenca . objects . filter (
sessao_plenaria_id = sessao_plenaria . id
) . order_by ( ' parlamentar__nome_parlamentar ' ) . distinct ( ) ]
@ -2029,7 +2029,8 @@ def get_materias_expediente(sessao_plenaria):
for m in ExpedienteMateria . objects . select_related ( " materia " ) . filter ( sessao_plenaria_id = sessao_plenaria . id ) :
tramitacao = ' '
data_sessao = sessao_plenaria . data_fim if sessao_plenaria . data_fim else sessao_plenaria . data_inicio
for aux_tramitacao in Tramitacao . objects . filter ( materia = m . materia , data_tramitacao__lte = data_sessao ) . order_by ( ' -data_tramitacao ' , ' -id ' ) :
for aux_tramitacao in Tramitacao . objects . filter ( materia = m . materia , data_tramitacao__lte = data_sessao ) . order_by (
' -data_tramitacao ' , ' -id ' ) :
if aux_tramitacao . turno :
tramitacao = aux_tramitacao
break
@ -2175,7 +2176,8 @@ def get_materias_ordem_do_dia(sessao_plenaria):
for o in OrdemDia . objects . filter ( sessao_plenaria_id = sessao_plenaria . id ) :
tramitacao = ' '
data_sessao = sessao_plenaria . data_fim if sessao_plenaria . data_fim else sessao_plenaria . data_inicio
for aux_tramitacao in Tramitacao . objects . filter ( materia = o . materia , data_tramitacao__lte = data_sessao ) . order_by ( ' -data_tramitacao ' , ' -id ' ) :
for aux_tramitacao in Tramitacao . objects . filter ( materia = o . materia , data_tramitacao__lte = data_sessao ) . order_by (
' -data_tramitacao ' , ' -id ' ) :
if aux_tramitacao . turno :
tramitacao = aux_tramitacao
break
@ -2316,7 +2318,7 @@ class ResumoView(DetailView):
# Votos de Votação Nominal de Matérias Expediente
votacoes = [ ]
for mevn in ExpedienteMateria . objects . filter ( sessao_plenaria_id = self . object . id , tipo_votacao = 2 ) \
for mevn in ExpedienteMateria . objects . filter ( sessao_plenaria_id = self . object . id , tipo_votacao = 2 ) \
. order_by ( ' -materia ' ) :
votos_materia = [ ]
titulo_materia = mevn . materia
@ -2510,7 +2512,6 @@ class ExpedienteView(FormMixin, DetailView):
list_conteudo = request . POST . getlist ( ' conteudo ' )
for tipo , conteudo in zip ( list_tipo , list_conteudo ) :
ExpedienteSessao . objects . filter (
sessao_plenaria_id = self . object . id ,
tipo_id = tipo ) . delete ( )
@ -2523,7 +2524,8 @@ class ExpedienteView(FormMixin, DetailView):
msg = _ ( ' Registro salvo com sucesso ' )
messages . add_message ( self . request , messages . SUCCESS , msg )
self . logger . info ( ' user= ' + username + ' . ExpedienteSessao(sessao_plenaria_id= {} e tipo_id= {} ) salvo com sucesso. '
self . logger . info (
' user= ' + username + ' . ExpedienteSessao(sessao_plenaria_id= {} e tipo_id= {} ) salvo com sucesso. '
. format ( self . object . id , tipo ) )
return self . form_valid ( form )
@ -2609,7 +2611,8 @@ class OcorrenciaSessaoView(FormMixin, DetailView):
username = self . request . user . username
self . logger . info (
' user= ' + username + ' . OcorrenciaSessao de sessao_plenaria_id= {} atualizada com sucesso. ' . format ( self . object . id ) )
' user= ' + username + ' . OcorrenciaSessao de sessao_plenaria_id= {} atualizada com sucesso. ' . format (
self . object . id ) )
@method_decorator ( permission_required ( ' sessao.add_ocorrenciasessao ' ) )
def post ( self , request , * args , * * kwargs ) :
@ -2677,7 +2680,8 @@ class ConsideracoesFinaisView(FormMixin, DetailView):
username = self . request . user . username
self . logger . info (
' user= ' + username + ' . consideracoesFinais de sessao_plenaria_id= {} atualizada com sucesso. ' . format ( self . object . id ) )
' user= ' + username + ' . consideracoesFinais de sessao_plenaria_id= {} atualizada com sucesso. ' . format (
self . object . id ) )
@method_decorator ( permission_required ( ' sessao.add_consideracoesfinais ' ) )
def post ( self , request , * args , * * kwargs ) :
@ -2701,7 +2705,6 @@ class ConsideracoesFinaisView(FormMixin, DetailView):
class VotacaoEditView ( SessaoPermissionMixin ) :
'''
Votação Simbólica e Secreta
'''
@ -2716,7 +2719,7 @@ class VotacaoEditView(SessaoPermissionMixin):
materia_id = kwargs [ ' mid ' ]
ordem_id = kwargs [ ' oid ' ]
if ( int ( request . POST [ ' anular_votacao ' ] ) == 1 ) :
if ( int ( request . POST [ ' anular_votacao ' ] ) == 1 ) :
RegistroVotacao . objects . filter ( ordem_id = ordem_id ) . delete ( )
ordem = OrdemDia . objects . get ( id = ordem_id )
@ -2774,7 +2777,6 @@ class VotacaoEditView(SessaoPermissionMixin):
class VotacaoView ( SessaoPermissionMixin ) :
"""
Votação Simbólica e Secreta
"""
@ -2895,7 +2897,8 @@ class VotacaoView(SessaoPermissionMixin):
except Exception as e :
username = request . user . username
self . logger . error ( ' user= ' + username + ' . Problemas ao salvar RegistroVotacao da materia de id= {} '
' e da ordem de id= {} . ' . format ( materia_id , ordem_id ) + str ( e ) )
' e da ordem de id= {} . ' . format ( materia_id , ordem_id ) + str (
e ) )
return self . form_invalid ( form )
else :
ordem = OrdemDia . objects . get ( id = ordem_id )
@ -3266,7 +3269,8 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin):
if not ordem or not votacao :
self . logger . error (
' user= ' + username + ' . Objeto OrdemDia com id= {} ou RegistroVotacao de OrdemDia não existe. ' . format ( ordem_id ) )
' user= ' + username + ' . Objeto OrdemDia com id= {} ou RegistroVotacao de OrdemDia não existe. ' . format (
ordem_id ) )
raise Http404 ( )
materia = ordem . materia
@ -3354,7 +3358,7 @@ class VotacaoNominalEditAbstract(SessaoPermissionMixin):
' user= ' + username + ' . Objeto ExpedienteMateria com id= {} não existe. ' . format ( expediente_id ) )
raise Http404 ( )
if ( int ( request . POST [ ' anular_votacao ' ] ) == 1 ) :
if ( int ( request . POST [ ' anular_votacao ' ] ) == 1 ) :
fechar_votacao_materia ( materia_votacao )
return self . form_valid ( form )
@ -3530,7 +3534,6 @@ class VotacaoSimbolicaTransparenciaDetailView(TemplateView):
class VotacaoExpedienteView ( SessaoPermissionMixin ) :
"""
Votação Simbólica e Secreta
"""
@ -3683,7 +3686,6 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
class VotacaoExpedienteEditView ( SessaoPermissionMixin ) :
"""
Votação Simbólica e Secreta
"""
@ -3887,7 +3889,7 @@ class PautaSessaoDetailView(DetailView):
# =====================================================================
# Expedientes
expedientes = [ ]
for e in ExpedienteSessao . objects . select_related ( " tipo " ) . filter ( sessao_plenaria_id = self . object . id ) \
for e in ExpedienteSessao . objects . select_related ( " tipo " ) . filter ( sessao_plenaria_id = self . object . id ) \
. order_by ( ' tipo__ordenacao ' ) :
conteudo = e . conteudo
from sapl . relatorios . views import is_empty
@ -4070,7 +4072,8 @@ def verifica_materia_sessao_plenaria_ajax(request):
materia = id_materia_selecionada
) . exists ( )
return JsonResponse ( { ' is_materia_presente ' : is_materia_presente , ' is_materia_presente_any_sessao ' : is_materia_presente_any_sessao } )
return JsonResponse (
{ ' is_materia_presente ' : is_materia_presente , ' is_materia_presente_any_sessao ' : is_materia_presente_any_sessao } )
class AdicionarVariasMateriasExpediente ( PermissionRequiredForAppCrudMixin ,
@ -4316,7 +4319,6 @@ class JustificativaAusenciaCrud(MasterDetailCrud):
@property
def layout_display ( self ) :
layout = super ( ) . layout_display
if self . object . ausencia == 2 :
@ -4335,7 +4337,6 @@ class JustificativaAusenciaCrud(MasterDetailCrud):
layout_key = None
def get_context_data_old ( self , * * kwargs ) :
context = super ( ) . get_context_data ( * * kwargs )
presencas = SessaoPlenariaPresenca . objects . filter (
@ -4371,7 +4372,6 @@ class JustificativaAusenciaCrud(MasterDetailCrud):
kwargs = { ' pk ' : self . kwargs [ ' pk ' ] } )
class UpdateView ( MasterDetailCrud . UpdateView ) :
form_class = JustificativaAusenciaForm
layout_key = None
@ -4384,6 +4384,97 @@ class JustificativaAusenciaCrud(MasterDetailCrud):
pass
class LeituraEmBloco ( PermissionRequiredForAppCrudMixin , ListView ) :
template_name = ' sessao/leitura/leitura_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 ' ] ,
retiradapauta = None , tipo_votacao = LEITURA , registroleitura__materia = None )
def get_context_data ( self , * * kwargs ) :
context = super ( ) . get_context_data ( * * kwargs )
context [ ' pk ' ] = self . kwargs [ ' pk ' ]
context [ ' root_pk ' ] = self . kwargs [ ' pk ' ]
if not verifica_sessao_iniciada ( self . request , self . kwargs [ ' pk ' ] ) :
context [ ' sessao_iniciada ' ] = False
return context
context [ ' sessao_iniciada ' ] = True
context [ ' turno_choices ' ] = Tramitacao . TURNO_CHOICES
context [ ' title ' ] = SessaoPlenaria . objects . get ( id = self . kwargs [ ' pk ' ] )
if self . expediente :
context [ ' expediente ' ] = True
else :
context [ ' expediente ' ] = False
return context
def post ( self , request , * args , * * kwargs ) :
if ' marcadas_4 ' in request . POST :
models = None
selectedlist = request . POST . getlist ( ' marcadas_4 ' )
if request . POST [ ' origem ' ] == ' ordem ' :
models = OrdemDia . objects . filter ( id__in = selectedlist )
elif request . POST [ ' origem ' ] == ' expediente ' :
models = ExpedienteMateria . objects . filter ( id__in = selectedlist )
if not models :
messages . add_message ( self . request , messages . ERROR ,
_ ( ' Impossível localizar as matérias selecionadas ' ) )
return self . get ( request , self . kwargs )
materias = [ m . materia for m in models ]
RegistroLeitura . objects . filter ( materia__in = materias ) . delete ( )
leituras = [ ]
for m in models :
obj = None
if isinstance ( m , ExpedienteMateria ) :
obj = RegistroLeitura ( expediente = m , materia = m . materia ,
observacao = request . POST [ ' observacao ' ] ,
user = self . request . user ,
ip = get_client_ip ( self . request ) )
elif isinstance ( m , OrdemDia ) :
obj = RegistroLeitura ( ordem = m , materia = m . materia ,
observacao = request . POST [ ' observacao ' ] ,
user = self . request . user ,
ip = get_client_ip ( self . request ) )
leituras . append ( obj )
RegistroLeitura . objects . bulk_create ( leituras )
else :
messages . add_message ( self . request , messages . ERROR , _ ( ' Nenhuma matéria selecionada para leitura em Bloco ' ) )
return self . get ( request , self . kwargs )
return HttpResponseRedirect ( self . get_success_url ( ) )
def get_success_url ( self ) :
if self . request . POST [ ' origem ' ] == ' ordem ' :
return reverse ( ' sapl.sessao:ordemdia_list ' ,
kwargs = { ' pk ' : self . kwargs [ ' pk ' ] } )
else :
return reverse ( ' sapl.sessao:expedientemateria_list ' ,
kwargs = { ' pk ' : self . kwargs [ ' pk ' ] } )
class LeituraEmBlocoExpediente ( LeituraEmBloco ) :
expediente = True
paginate_by = 100
def get_queryset ( self ) :
return ExpedienteMateria . objects . filter ( sessao_plenaria_id = self . kwargs [ ' pk ' ] ,
retiradapauta = None , tipo_votacao = LEITURA , registroleitura__materia = None )
class LeituraEmBlocoOrdemDia ( LeituraEmBloco ) :
expediente = False
paginate_by = 100
def get_queryset ( self ) :
return OrdemDia . objects . filter ( sessao_plenaria_id = self . kwargs [ ' pk ' ] ,
retiradapauta = None , tipo_votacao = LEITURA , registroleitura__materia = None )
class VotacaoEmBlocoExpediente ( PermissionRequiredForAppCrudMixin , ListView ) :
template_name = ' sessao/votacao/votacao_bloco.html '
app_label = AppConfig . label
@ -4423,7 +4514,6 @@ class VotacaoEmBlocoOrdemDia(VotacaoEmBlocoExpediente):
class VotacaoEmBlocoSimbolicaView ( PermissionRequiredForAppCrudMixin , TemplateView ) :
"""
Votação Simbólica
"""
@ -4551,8 +4641,10 @@ class VotacaoEmBlocoSimbolicaView(PermissionRequiredForAppCrudMixin, TemplateVie
votacao . save ( )
except Exception as e :
username = request . user . username
self . logger . error ( ' user= ' + username + ' . Problemas ao salvar RegistroVotacao da materia de id= {} '
' e da ordem de id= {} . ' . format ( expediente . materia . id , expediente . id ) + str ( e ) )
self . logger . error (
' user= ' + username + ' . Problemas ao salvar RegistroVotacao da materia de id= {} '
' e da ordem de id= {} . ' . format ( expediente . materia . id ,
expediente . id ) + str ( e ) )
return self . form_invalid ( form , context )
else :
expediente . resultado = resultado . nome