Browse Source

Finaliza a filtragem por tipo de autor

pull/1323/head
Eduardo Calil 9 years ago
parent
commit
9d2a42c49c
  1. 5
      sapl/materia/urls.py
  2. 69
      sapl/materia/views.py
  3. 14
      sapl/templates/materia/autoria_form.html

5
sapl/materia/urls.py

@ -21,6 +21,7 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
TipoFimRelatoriaCrud, TipoMateriaCrud,
TipoProposicaoCrud, TramitacaoCrud,
TramitacaoEmLoteView, UnidadeTramitacaoCrud,
atualizar_autores,
proposicao_texto, recuperar_materia)
from .apps import AppConfig
@ -41,6 +42,10 @@ urlpatterns_materia = [
RelatoriaCrud.get_urls() +
DocumentoAcessorioCrud.get_urls())),
url(r'^materia/autoria/atualizar-autores$',
atualizar_autores,
name='atualizar_autores'),
url(r'^materia/(?P<pk>[0-9]+)/create_simplificado$',
CriarProtocoloMateriaView.as_view(),
name='materia_create_simplificado'),

69
sapl/materia/views.py

@ -1147,33 +1147,63 @@ def filtra_ativos(content_type, materia):
def autores_ativos(materia, tipo=None):
"""
:param materia: é a matéria para na qual a Autoria será inserida
:param tipo: é o tipo de autor que foi selecionado
:return: Lista dos autores ativos disponíveis para serem inseridos
na matéria em questão.
Primeiramente são inseridos em uma lista uma tupla relacionando
cada TipoAutor ao seu ContentType. Posteriormente, para cada elemento
dessa lista são filtrados os autores ativos para aquele ContentType e,
por convêniencia, inseridos em um dicionário no qual a chave é o id
do TipoAutor. Após isso, com a chave 'others' são inseridos os Autores
os quais seu TipoAutor não possui ContentType.
"""
content_types_list = []
for ta in TipoAutor.objects.all():
if ta.content_type:
content_types_list.append(ta.content_type)
content_types_list.append((ta.content_type, ta))
autores_by_ct = {}
for ct in content_types_list:
autores_by_ct[str(ct.id)] = filtra_ativos(ct, materia)
for ct, ta in content_types_list:
autores_by_ct[str(ta.id)] = filtra_ativos(ct, materia)
if not tipo:
autor_qs = Autor.objects.none()
for key in autores_by_ct:
autor_qs = autor_qs | autores_by_ct[key]
autor_qs = Autor.objects.none()
for key in autores_by_ct:
autor_qs = autor_qs | autores_by_ct[key]
autores_by_ct['others'] = Autor.objects.exclude(
content_type__in=content_types_list).order_by(
'nome'
)
ct_list = [c[0] for c in content_types_list]
autores_by_ct['others'] = Autor.objects.exclude(
content_type__in=ct_list).order_by(
'nome'
)
if not tipo:
return (autor_qs | autores_by_ct['others']).order_by('nome')
else:
if not tipo in autores_by_ct:
tipo = 'others'
return autores_by_ct[tipo].order_by('nome')
def atualizar_autores(request):
pass
if ('tipo_autor' in request.GET and 'materia_id' in request.GET and
request.GET['tipo_autor'] and request.GET['materia_id']):
tipo_autor = request.GET['tipo_autor']
materia_id = int(request.GET['materia_id'])
try:
materia = MateriaLegislativa.objects.get(id=materia_id)
except ObjectDoesNotExist:
autores = []
else:
autores = autores_ativos(materia, tipo=tipo_autor)
autores_list = [(a.id, a.__str__()) for a in autores]
return JsonResponse({'lista_autores': autores_list})
class AutoriaCrud(MasterDetailCrud):
@ -1211,6 +1241,21 @@ class AutoriaCrud(MasterDetailCrud):
def layout_key(self):
return 'AutoriaUpdate'
def get_context_data(self, **kwargs):
context = super(UpdateView, self).get_context_data(**kwargs)
materia = MateriaLegislativa.objects.get(
id=int(kwargs['root_pk']))
autores_ativos_list = autores_ativos(materia)
autores = []
for a in autores_ativos_list:
autores.append([a.id, a.__str__()])
context['form'].fields['autor'].choices = autores
return context
class DespachoInicialCrud(MasterDetailCrud):
model = DespachoInicial

14
sapl/templates/materia/autoria_form.html

@ -11,10 +11,24 @@
var tipo_autor = $("#id_tipo_autor").val();
var materia_id = {{ root_pk }}
// Limpa a listagem para atualizar
$("#id_autor").find("option").remove();
$.get("/materia/autoria/atualizar-autores",
{tipo_autor: tipo_autor, materia_id: materia_id},
function(data) {
// Caso não venha nenhum dado da requisição, retorna null
if ($.isEmptyObject(data)){
return null
}
lista_autores = data['lista_autores'];
// Atualiza a listagem de autores
for (i = 0; i < lista_autores.length; i++) {
$('#id_autor').append(
'<option value="' + lista_autores[i][0] + '">' +
lista_autores[i][1] + '</option>');
}
});
}
$("#id_tipo_autor").change(function () {

Loading…
Cancel
Save