diff --git a/sapl/api/forms.py b/sapl/api/forms.py index 30c25f5a0..d1445f7df 100644 --- a/sapl/api/forms.py +++ b/sapl/api/forms.py @@ -175,9 +175,9 @@ class AutoresPossiveisFilterSet(FilterSet): if not data_relativa: data_relativa = timezone.now() - data_relativa_na_legislatura_atual = Legislatura.objects.filter( - data_inicio__lte=timezone.now(), - data_fim__gte=timezone.now()).exists() + legislatura_relativa = Legislatura.objects.filter( + data_inicio__lte=data_relativa, + data_fim__gte=data_relativa).first() params = { 'parlamentar_set__mandato__data_inicio_mandato__lte': @@ -185,7 +185,7 @@ class AutoresPossiveisFilterSet(FilterSet): 'parlamentar_set__mandato__data_fim_mandato__gte': data_relativa } - if data_relativa_na_legislatura_atual: + if legislatura_relativa.atual(): params['parlamentar_set__ativo'] = True qs = queryset.filter(**params).distinct() diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index a8cf6cb66..a125c6f84 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -14,16 +14,15 @@ from django.core.urlresolvers import reverse from django.db import models, transaction from django.db.models import Max from django.forms import ModelForm, ModelChoiceField, widgets +from django.forms.fields import BooleanField from django.forms.forms import Form -from django.forms.widgets import Select +from django.forms.widgets import Select, HiddenInput from django.utils import six from django.utils.encoding import force_text from django.utils.html import format_html from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ - from django_filters.filterset import STRICTNESS - import django_filters from sapl.base.models import Autor, TipoAutor @@ -693,10 +692,13 @@ class AutoriaForm(ModelForm): tipo_autor = ModelChoiceField(label=_('Tipo Autor'), required=False, - queryset= - TipoAutor.objects.all().order_by('descricao'), + queryset=TipoAutor.objects.all().order_by( + 'descricao'), empty_label='Selecione',) + data_relativa = forms.DateField( + widget=forms.HiddenInput()) + def __init__(self, *args, **kwargs): super(AutoriaForm, self).__init__(*args, **kwargs) @@ -707,11 +709,14 @@ class AutoriaForm(ModelForm): self.helper = FormHelper() self.helper.layout = Layout( Fieldset(_('Autoria'), - row1, form_actions(save_label='Salvar'))) + row1, 'data_relativa', form_actions(save_label='Salvar'))) + + if not kwargs['instance']: + self.fields['autor'].choices = [] class Meta: model = Autoria - fields = ['tipo_autor', 'autor', 'primeiro_autor'] + fields = ['tipo_autor', 'autor', 'primeiro_autor', 'data_relativa'] def clean(self): super(AutoriaForm, self).clean() diff --git a/sapl/materia/views.py b/sapl/materia/views.py index bc2478d49..5b5d0e9f8 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -2,23 +2,6 @@ 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 @@ -39,7 +22,7 @@ from django.views.generic import CreateView, ListView, TemplateView, UpdateView 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 @@ -62,7 +45,25 @@ 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') @@ -93,8 +94,8 @@ def proposicao_texto(request, pk): if proposicao.texto_original: if (not proposicao.data_recebimento and - proposicao.autor.user_id != request.user.id): - raise Http404 + proposicao.autor.user_id != request.user.id): + raise Http404 arquivo = proposicao.texto_original @@ -1093,24 +1094,27 @@ class AutoriaCrud(MasterDetailCrud): def layout_key(self): return 'AutoriaCreate' - def get_context_data(self, **kwargs): - context = super(CreateView, self).get_context_data(**kwargs) - autores_ativos = self.autores_ativos() - - autores = [] - - context['form'].fields['autor'].choices = autores - return context + def get_initial(self): + initial = super().get_initial() + materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) + initial['data_relativa'] = materia.data_apresentacao + initial['autor'] = [] + return initial def autores_ativos(self): - lista_parlamentares = Parlamentar.objects.filter(ativo=True).values_list('id', flat=True) + 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) + 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) + 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]) + 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 @@ -1516,9 +1520,9 @@ class AcompanhamentoMateriaView(CreateView): base_url = get_base_url(request) destinatario = AcompanhamentoMateria.objects.get( - materia=materia, - email=email, - confirmado=False) + materia=materia, + email=email, + confirmado=False) casa = CasaLegislativa.objects.first() do_envia_email_confirmacao(base_url, @@ -1699,10 +1703,10 @@ class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView): context['primeira_tramitacao'] = False if ('tramitacao__status' in qr and - 'tramitacao__unidade_tramitacao_destino' in qr and - qr['tramitacao__status'] and - qr['tramitacao__unidade_tramitacao_destino'] - ): + 'tramitacao__unidade_tramitacao_destino' in qr and + qr['tramitacao__status'] and + qr['tramitacao__unidade_tramitacao_destino'] + ): lista = filtra_tramitacao_destino_and_status( qr['tramitacao__status'], qr['tramitacao__unidade_tramitacao_destino']) diff --git a/sapl/templates/materia/autoria_form.html b/sapl/templates/materia/autoria_form.html index e3b194fdb..9c51912ac 100644 --- a/sapl/templates/materia/autoria_form.html +++ b/sapl/templates/materia/autoria_form.html @@ -19,9 +19,13 @@ $("#id_autor option").remove() var selected = $("#id_tipo_autor").val(); if (selected !== undefined && selected !== null) { - $.getJSON("/api/autor?tipo=" + selected, function(data){ + var json_data = { + tipo : selected, + data_relativa : $("#id_data_relativa").val() + } + $.getJSON("/api/autor/possiveis", json_data, function(data){ if (data) { - var results = data.results.sort(compare); + var results = data.sort(compare); if (results.length > 1) { $("#id_autor").append(""); }