Repository: interlegis/sapl

Issue:
Todos os autores disponíveis para seleção
Estão sendo mostrados para seleção em protocolo e matérias, todos os autores, inclusive os inativos no sistema


Discussion:
Mas se for uma matéria ou protocolo antigo? De uma época na qual o autor, que se encontra inativo no momento, estava ativo?
Devem ser listados apenas os parlamentares ativos. Para registrar uma matéria antiga, deve-se ativar seu autor.

Resolving patch:
diff --git a/sapl/materia/views.py b/sapl/materia/views.py
--- a/sapl/materia/views.py
+++ b/sapl/materia/views.py
@@ -1,16 +1,35 @@
-from datetime import datetime
+from datetime import datetime, date
 from random import choice
 from string import ascii_letters, digits
 
+from .email_utils import do_envia_email_confirmacao
+from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm,
+                    AdicionarVariasAutoriasFilterSet, DespachoInicialForm,
+                    DocumentoAcessorioForm, MateriaAssuntoForm,
+                    MateriaLegislativaFilterSet, MateriaSimplificadaForm,
+                    PrimeiraTramitacaoEmLoteFilterSet, ReceberProposicaoForm,
+                    RelatoriaForm, TramitacaoEmLoteFilterSet,
+                    filtra_tramitacao_destino,
+                    filtra_tramitacao_destino_and_status,
+                    filtra_tramitacao_status)
+from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria,
+                     DespachoInicial, DocumentoAcessorio, MateriaAssunto,
+                     MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao,
+                     RegimeTramitacao, Relatoria, StatusTramitacao,
+                     TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa,
+                     TipoProposicao, Tramitacao, UnidadeTramitacao)
+from .signals import tramitacao_signal
 from crispy_forms.helper import FormHelper
 from crispy_forms.layout import HTML
 from django import forms
 from django.contrib import messages
 from django.contrib.auth.decorators import permission_required
 from django.contrib.auth.mixins import PermissionRequiredMixin
+from django.contrib.contenttypes.models import ContentType
 from django.core.exceptions import (ObjectDoesNotExist,
                                     MultipleObjectsReturned)
 from django.core.urlresolvers import reverse
+from django.db.models import Q
 from django.http import HttpResponse, JsonResponse
 from django.http.response import Http404, HttpResponseRedirect
 from django.shortcuts import get_object_or_404, redirect
@@ -20,8 +39,9 @@
 from django.views.generic.base import RedirectView
 from django.views.generic.edit import FormView
 from django_filters.views import FilterView
-
+import sapl
 from sapl.base.models import Autor, CasaLegislativa
+from sapl.comissoes.models import Comissao
 from sapl.comissoes.models import Comissao, Participacao
 from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_RESTRICT,
                                     STATUS_TA_PRIVATE)
@@ -32,35 +52,17 @@
                             Crud, CrudAux, MasterDetailCrud,
                             PermissionRequiredForAppCrudMixin, make_pagination)
 from sapl.materia.forms import (AnexadaForm, ConfirmarProposicaoForm,
-                                LegislacaoCitadaForm, ProposicaoForm,
+                                LegislacaoCitadaForm, AutoriaForm, ProposicaoForm,
                                 TipoProposicaoForm, TramitacaoForm,
                                 TramitacaoUpdateForm)
+from sapl.materia.models import Autor
 from sapl.norma.models import LegislacaoCitada
+from sapl.parlamentares.models import Parlamentar
 from sapl.protocoloadm.models import Protocolo
 from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label,
                         autor_modal, gerar_hash_arquivo, get_base_url,
                         montar_row_autor)
-import sapl
 
-from .email_utils import do_envia_email_confirmacao
-
-from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm,
-                    AdicionarVariasAutoriasFilterSet, DespachoInicialForm,
-                    DocumentoAcessorioForm, MateriaAssuntoForm,
-                    MateriaLegislativaFilterSet, MateriaSimplificadaForm,
-                    PrimeiraTramitacaoEmLoteFilterSet, ReceberProposicaoForm,
-                    RelatoriaForm, TramitacaoEmLoteFilterSet,
-                    filtra_tramitacao_destino,
-                    filtra_tramitacao_destino_and_status,
-                    filtra_tramitacao_status)
-from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria,
-                     DespachoInicial, DocumentoAcessorio, MateriaAssunto,
-                     MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao,
-                     RegimeTramitacao, Relatoria, StatusTramitacao,
-                     TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa,
-                     TipoProposicao, Tramitacao, UnidadeTramitacao)
-
-from .signals import tramitacao_signal
 
 
 AssuntoMateriaCrud = Crud.build(AssuntoMateria, 'assunto_materia')
@@ -1072,6 +1074,32 @@ class AutoriaCrud(MasterDetailCrud):
     help_path = ''
     public = [RP_LIST, RP_DETAIL]
 
+    class CreateView(MasterDetailCrud.CreateView):
+        form_class = AutoriaForm
+
+        def get_context_data(self, **kwargs):
+            context = super(CreateView, self).get_context_data(**kwargs)
+            autores_ativos = self.autores_ativos()
+
+            autores = []
+            for a in autores_ativos:
+                autores.append([a.id, a.__str__()])
+
+            context['form'].fields['autor'].choices = autores
+            return context
+
+        def autores_ativos(self):
+            lista_parlamentares = Parlamentar.objects.filter(ativo=True).values_list('id', flat=True)
+            model_parlamentar = ContentType.objects.get_for_model(Parlamentar)
+            autor_parlamentar = Autor.objects.filter(content_type=model_parlamentar, object_id__in=lista_parlamentares)
+
+            lista_comissoes = Comissao.objects.filter(Q(data_extincao__isnull=True)|Q(data_extincao__gt=date.today())).values_list('id', flat=True)
+            model_comissao = ContentType.objects.get_for_model(Comissao)
+            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
+
 
 class DespachoInicialCrud(MasterDetailCrud):
     model = DespachoInicial


Test patch: