Browse Source

Filtra autores por ativos

pull/1323/head
Eduardo Calil 9 years ago
parent
commit
3310df86da
  1. 145
      sapl/materia/views.py

145
sapl/materia/views.py

@ -1069,56 +1069,111 @@ class DocumentoAcessorioCrud(MasterDetailCrud):
return context return context
def filtra_ativos(content_type): def filtra_ativos(content_type, materia):
if content_type == Parlamentar: if content_type.model_class() == Parlamentar:
mandatos_ativos = Mandato.objects.filter() mandatos_ativos = Mandato.objects.filter(Q(
return data_inicio_mandato__lte=materia.data_apresentacao,
elif content_type == Comissao: data_fim_mandato__isnull=True) | Q(
return data_inicio_mandato__lte=materia.data_apresentacao,
elif content_type == Frente: data_fim_mandato__gte=materia.data_apresentacao)
return ).values_list('parlamentar_id', flat=True).distinct('parlamentar_id')
elif content_type == Bancada:
return return Autor.objects.filter(
elif content_type == Bloco: content_type=content_type,
return object_id__in=mandatos_ativos).order_by(
elif content_type == Orgao: 'autor_related__nome_completo')
return
elif content_type.model_class() == Comissao:
comissoes = Comissao.objects.filter(
def autores_ativos(tipo=None): data_criacao__lte=materia.data_apresentacao)
comissoes_id = comissoes.filter(Q(
data_extincao__isnull=True,
data_fim_comissao__isnull=True) | Q(
data_extincao__gte=materia.data_apresentacao,
data_fim_comissao__isnull=True) | Q(
data_extincao__gte=materia.data_apresentacao,
data_fim_comissao__isnull=True) | Q(
data_extincao__isnull=True,
data_fim_comissao__gte=materia.data_apresentacao) | Q(
data_extincao__gte=materia.data_apresentacao,
data_fim_comissao__gte=materia.data_apresentacao)).values_list(
'id', flat=True).distinct()
return Autor.objects.filter(
content_type=content_type,
object_id__in=comissoes_id).order_by(
'autor_related__nome')
elif content_type.model_class() == Frente:
frentes = Frente.objects.filter(
data_criacao__lte=materia.data_apresentacao)
frentes_id = frentes.filter(Q(
data_extincao__isnull=True) | Q(
data_extincao__gte=materia.data_apresentacao)).values_list(
'id', flat=True).distinct()
return Autor.objects.filter(
content_type=content_type,
object_id__in=frentes_id).order_by(
'autor_related__nome')
elif content_type.model_class() == Bancada:
bancadas = Bancada.objects.filter(
data_criacao__lte=materia.data_apresentacao)
bancadas_id = bancadas.filter(Q(
data_extincao__isnull=True) | Q(
data_extincao__gte=materia.data_apresentacao)).values_list(
'id', flat=True).distinct()
return Autor.objects.filter(
content_type=content_type,
object_id__in=bancadas_id).order_by(
'autor_related__nome')
elif content_type.model_class() == Bloco:
blocos = Bloco.objects.filter(
data_criacao__lte=materia.data_apresentacao)
blocos_id = blocos.filter(Q(
data_extincao__isnull=True) | Q(
data_extincao__gte=materia.data_apresentacao)).values_list(
'id', flat=True).distinct()
return Autor.objects.filter(
content_type=content_type,
object_id__in=blocos_id).order_by(
'autor_related__nome')
elif content_type.model_class() == Orgao:
orgaos_id = Orgao.objects.values_list('id', flat=True)
return Autor.objects.filter(
content_type=content_type,
object_id__in=orgaos_id).order_by(
'autor_related__nome')
def autores_ativos(materia, tipo=None):
content_types_list = [] content_types_list = []
for ta in TipoAutor: for ta in TipoAutor.objects.all():
if ta.content_type: if ta.content_type:
content_types_list.append(ta.content_type) content_types_list.append(ta.content_type)
autores_by_ct = {} autores_by_ct = {}
for ct in content_types_list: for ct in content_types_list:
autores_by_ct[str(ct.id)] = filtra_ativos(ct) autores_by_ct[str(ct.id)] = filtra_ativos(ct, materia)
# model_parlamentar = ContentType.objects.get_for_model( if not tipo:
# Parlamentar) autor_qs = Autor.objects.none()
# model_comissao = ContentType.objects.get_for_model(Comissao) for key in autores_by_ct:
# autor_qs = autor_qs | autores_by_ct[key]
# lista_parlamentares = Parlamentar.objects.filter(
# ativo=True).values_list( autores_by_ct['others'] = Autor.objects.exclude(
# 'id', flat=True) content_type__in=content_types_list)
# autor_parlamentar = Autor.objects.filter(
# content_type=model_parlamentar, return (autor_qs | autores_by_ct['others']).order_by('content_type')
# object_id__in=lista_parlamentares)
# else:
# lista_comissoes = Comissao.objects.filter( return autores_by_ct[tipo]
# Q(data_extincao__isnull=True)|Q(
# data_extincao__gt=date.today())).values_list(
# 'id', flat=True)
#
# autor_comissoes = Autor.objects.filter(
# content_type=model_comissao,
# object_id__in=lista_comissoes)
# autores_outros = Autor.objects.exclude(
# content_type__in=[model_parlamentar,
# model_comissao])
# q = autor_parlamentar | autor_comissoes | autores_outros
return q
def atualizar_autores(request): def atualizar_autores(request):
@ -1140,7 +1195,7 @@ class AutoriaCrud(MasterDetailCrud):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(CreateView, self).get_context_data(**kwargs) context = super(CreateView, self).get_context_data(**kwargs)
autores_ativos_list = autores_ativos() autores_ativos_list = autores_ativos(self.get_object().materia)
autores = [] autores = []
for a in autores_ativos_list: for a in autores_ativos_list:

Loading…
Cancel
Save