@ -13,7 +13,8 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, Validat
from django . core . mail import send_mail
from django . core . urlresolvers import reverse , reverse_lazy
from django . db import connection
from django . db . models import Count , Q , ProtectedError
from django . db . models import Count , Q , ProtectedError , Max
from django . shortcuts import render
from django . http import Http404 , HttpResponseRedirect , JsonResponse
from django . template import TemplateDoesNotExist
from django . template . loader import get_template
@ -31,23 +32,26 @@ from haystack.query import SearchQuerySet
from sapl import settings
from sapl . audiencia . models import AudienciaPublica , TipoAudienciaPublica
from sapl . base . forms import AutorForm , AutorFormForAdmin , TipoAutorForm
from sapl . base . models import Autor , TipoAutor
from sapl . comissoes . models import Reuniao , Comissao
from sapl . base . forms import AutorForm , AutorFormForAdmin , TipoAutorForm
from sapl . comissoes . models import Comissao , Reuniao
from sapl . crud . base import CrudAux , make_pagination
from sapl . materia . models import ( Autoria , MateriaLegislativa , Proposicao , Anexada ,
TipoMateriaLegislativa , StatusTramitacao , UnidadeTramitacao ,
DocumentoAcessorio , TipoDocumento )
from sapl . norma . models import ( NormaJuridica , TipoNormaJuridica , NormaEstatisticas )
from sapl . parlamentares . models import Parlamentar , Legislatura , Mandato , Filiacao , SessaoLegislativa
from sapl . protocoloadm . models import ( Protocolo , TipoDocumentoAdministrativo ,
from sapl . materia . models import ( Anexada , Autoria , DocumentoAcessorio ,
MateriaEmTramitacao , MateriaLegislativa , Proposicao ,
StatusTramitacao , TipoDocumento ,
TipoMateriaLegislativa , UnidadeTramitacao , Tramitacao )
from sapl . norma . models import NormaJuridica , TipoNormaJuridica
from sapl . parlamentares . models import ( Filiacao , Legislatura , Mandato , Parlamentar ,
SessaoLegislativa )
from sapl . protocoloadm . models import ( Anexado , DocumentoAdministrativo , Protocolo ,
StatusTramitacaoAdministrativo ,
DocumentoAdministrativo , Anexado )
from sapl . sessao . models import ( PresencaOrdemDia , SessaoPlenaria ,
SessaoPlenariaPresenca , Bancada , TipoSessaoPlenaria )
from sapl . utils import ( parlamentares_ativos , gerar_hash_arquivo , SEPARADOR_HASH_PROPOSICAO ,
show_results_filter_set , mail_service_configured ,
intervalos_tem_intersecao , remover_acentos )
TipoDocumentoAdministrativo )
from sapl . sessao . models import ( Bancada , PresencaOrdemDia , SessaoPlenaria ,
SessaoPlenariaPresenca , TipoSessaoPlenaria )
from sapl . utils import ( gerar_hash_arquivo , intervalos_tem_intersecao ,
mail_service_configured , parlamentares_ativos ,
SEPARADOR_HASH_PROPOSICAO , show_results_filter_set )
from . forms import ( AlterarSenhaForm , CasaLegislativaForm ,
ConfiguracoesAppForm , RelatorioAtasFilterSet ,
RelatorioAudienciaFilterSet ,
@ -55,7 +59,7 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm,
RelatorioHistoricoTramitacaoFilterSet ,
RelatorioMateriasPorAnoAutorTipoFilterSet ,
RelatorioMateriasPorAutorFilterSet ,
RelatorioMateriasTramitacaoilterSet ,
RelatorioMateriasTramitacaoF ilterSet ,
RelatorioPresencaSessaoFilterSet ,
RelatorioReuniaoFilterSet , UsuarioCreateForm ,
UsuarioEditForm , RelatorioNormasMesFilterSet ,
@ -67,19 +71,6 @@ from .forms import (AlterarSenhaForm, CasaLegislativaForm,
from . models import AppConfig , CasaLegislativa
def filtra_url_materias_em_tramitacao ( qr , qs , campo_url , local_ou_status ) :
id_materias = [ ]
filtro_url = qr [ campo_url ]
if local_ou_status == ' local ' :
id_materias = [ item . id for item in qs if item . tramitacao_set . order_by (
' -id ' ) . first ( ) . unidade_tramitacao_destino_id == int ( filtro_url ) ]
elif local_ou_status == ' status ' :
id_materias = [ item . id for item in qs if item . tramitacao_set . order_by (
' -id ' ) . first ( ) . status_id == int ( filtro_url ) ]
return qs . filter ( em_tramitacao = True , id__in = id_materias )
def get_casalegislativa ( ) :
return CasaLegislativa . objects . first ( )
@ -703,61 +694,108 @@ class RelatorioAudienciaView(FilterView):
class RelatorioMateriasTramitacaoView ( FilterView ) :
model = MateriaLegislativa
filterset_class = RelatorioMateriasTramitacaoilterSet
model = MateriaEmTramitacao
filterset_class = RelatorioMateriasTramitacaoF ilterSet
template_name = ' base/RelatorioMateriasPorTramitacao_filter.html '
paginate_by = 100
total_resultados_tipos = { }
def get_filterset_kwargs ( self , filterset_class ) :
data = super ( ) . get_filterset_kwargs ( filterset_class )
if data [ ' data ' ] :
qs = data [ ' queryset ' ]
ano_materia = data [ ' data ' ] [ ' materia__ano ' ]
tipo_materia = data [ ' data ' ] [ ' materia__tipo ' ]
unidade_tramitacao_destino = data [ ' data ' ] [ ' tramitacao__unidade_tramitacao_destino ' ]
status_tramitacao = data [ ' data ' ] [ ' tramitacao__status ' ]
kwargs = { }
if ano_materia :
kwargs [ ' materia__ano ' ] = ano_materia
if tipo_materia :
kwargs [ ' materia__tipo ' ] = tipo_materia
if unidade_tramitacao_destino :
kwargs [ ' tramitacao__unidade_tramitacao_destino ' ] = unidade_tramitacao_destino
if status_tramitacao :
kwargs [ ' tramitacao__status ' ] = status_tramitacao
qs = qs . filter ( * * kwargs )
data [ ' queryset ' ] = qs
qtdes = { tipo : 0 for tipo in TipoMateriaLegislativa . objects . all ( ) }
for i in qs :
qtdes [ i . materia . tipo ] + = 1
# remove as entradas de valor igual a zero
qtdes = { k : v for k , v in qtdes . items ( ) if v > 0 }
self . total_resultados_tipos = qtdes
return data
def get_queryset ( self ) :
qs = super ( ) . get_queryset ( )
qs = qs . select_related ( ' materia__tipo ' ) . filter (
materia__em_tramitacao = True
) . exclude (
tramitacao__status__indicador = ' F '
) . order_by ( ' -materia__ano ' , ' -materia__numero ' )
return qs
def get_context_data ( self , * * kwargs ) :
context = super ( RelatorioMateriasTramitacaoView ,
self ) . get_context_data ( * * kwargs )
context = super (
RelatorioMateriasTramitacaoView , self
) . get_context_data ( * * kwargs )
context [ ' title ' ] = _ ( ' Matérias em Tramitação ' )
if not self . filterset . form . is_valid ( ) :
return context
qr = self . request . GET . copy ( )
qs = context [ ' object_list ' ]
qs = qs . filter ( em_tramitacao = True )
if qr . get ( ' tramitacao__unidade_tramitacao_destino ' ) :
qs = filtra_url_materias_em_tramitacao (
qr , qs , ' tramitacao__unidade_tramitacao_destino ' , ' local ' )
if qr . get ( ' tramitacao__status ' ) :
qs = filtra_url_materias_em_tramitacao (
qr , qs , ' tramitacao__status ' , ' status ' )
li = [ li1 for li1 in qs if li1 . tramitacao_set . last ( ) and li1 . tramitacao_set . last ( ) . status . indicador != ' F ' ]
context [ ' object_list ' ] = li
context [ ' qtdes ' ] = self . total_resultados_tipos
context [ ' ano ' ] = ( self . request . GET [ ' materia__ano ' ] )
qtdes = { }
for tipo in TipoMateriaLegislativa . objects . all ( ) :
li = context [ ' object_list ' ]
qtde = sum ( 1 for i in li if i . tipo_id == tipo . id )
if qtde > 0 :
qtdes [ tipo ] = qtde
context [ ' qtdes ' ] = qtdes
context [ ' ano ' ] = ( self . request . GET [ ' ano ' ] )
if self . request . GET [ ' tipo ' ] :
tipo = self . request . GET [ ' tipo ' ]
if self . request . GET [ ' materia__tipo ' ] :
tipo = self . request . GET [ ' materia__tipo ' ]
context [ ' tipo ' ] = (
str ( TipoMateriaLegislativa . objects . get ( id = tipo ) ) )
str ( TipoMateriaLegislativa . objects . get ( id = tipo ) )
)
else :
context [ ' tipo ' ] = ' '
if self . request . GET [ ' tramitacao__status ' ] :
tramitacao_status = self . request . GET [ ' tramitacao__status ' ]
context [ ' tramitacao__status ' ] = (
str ( StatusTramitacao . objects . get ( id = tramitacao_status ) ) )
str ( StatusTramitacao . objects . get ( id = tramitacao_status ) )
)
else :
context [ ' tramitacao__status ' ] = ' '
if self . request . GET [ ' tramitacao__unidade_tramitacao_destino ' ] :
context [ ' tramitacao__unidade_tramitacao_destino ' ] = ( str ( UnidadeTramitacao . objects . get (
id = self . request . GET [ ' tramitacao__unidade_tramitacao_destino ' ] ) ) )
context [ ' tramitacao__unidade_tramitacao_destino ' ] = (
str ( UnidadeTramitacao . objects . get (
id = self . request . GET [ ' tramitacao__unidade_tramitacao_destino ' ]
) )
)
else :
context [ ' tramitacao__unidade_tramitacao_destino ' ] = ' '
context [ ' filter_url ' ] = ( ' & ' + qr . urlencode ( ) ) if len ( qr ) > 0 else ' '
context [ ' filter_url ' ] = ( ' & ' + qr . urlencode ( ) ) if len ( qr ) > 0 else ' '
context [ ' show_results ' ] = show_results_filter_set ( qr )
paginator = context [ ' paginator ' ]
page_obj = context [ ' page_obj ' ]
context [ ' page_range ' ] = make_pagination (
page_obj . number , paginator . num_pages
)
context [ ' NO_ENTRIES_MSG ' ] = ' Nenhum encontrado. '
return context