Browse Source

Fix #2653 (#2677)

Implementa chamada REST

Remove ipdb

Atualiza testes

Atualiza formatação de estilo do jquery

Co-authored-by: Edward Ribeiro <eribeiro@interlegis.leg.br>
Co-authored-by: Victor Fabre <victorfabre@me.com>
pull/2683/head
Vinícius Cantuária 6 years ago
committed by Cesar Carvalho
parent
commit
00430ced4a
  1. 3
      sapl/comissoes/urls.py
  2. 16
      sapl/comissoes/views.py
  3. 61
      sapl/materia/forms.py
  4. 13
      sapl/materia/tests/test_materia_form.py
  5. 86
      sapl/materia/views.py
  6. 19
      sapl/templates/materia/relatoria_form.html

3
sapl/comissoes/urls.py

@ -1,7 +1,7 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sapl.comissoes.views import (CargoCrud, ComissaoCrud, ComposicaoCrud, from sapl.comissoes.views import (CargoCrud, ComissaoCrud, ComposicaoCrud,
DocumentoAcessorioCrud, MateriasTramitacaoListView, ParticipacaoCrud, DocumentoAcessorioCrud, MateriasTramitacaoListView, ParticipacaoCrud,
PeriodoComposicaoCrud, ReuniaoCrud, TipoComissaoCrud) PeriodoComposicaoCrud, ReuniaoCrud, TipoComissaoCrud, get_participacoes_comissao)
from .apps import AppConfig from .apps import AppConfig
@ -21,4 +21,5 @@ urlpatterns = [
url(r'^sistema/comissao/periodo-composicao/', url(r'^sistema/comissao/periodo-composicao/',
include(PeriodoComposicaoCrud.get_urls())), include(PeriodoComposicaoCrud.get_urls())),
url(r'^sistema/comissao/tipo/', include(TipoComissaoCrud.get_urls())), url(r'^sistema/comissao/tipo/', include(TipoComissaoCrud.get_urls())),
url(r'^sistema/comissao/recupera-participacoes', get_participacoes_comissao),
] ]

16
sapl/comissoes/views.py

@ -2,7 +2,7 @@ import logging
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import F from django.db.models import F
from django.http.response import HttpResponseRedirect from django.http.response import HttpResponseRedirect, JsonResponse
from django.views.decorators.clickjacking import xframe_options_exempt from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.generic import ListView from django.views.generic import ListView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
@ -108,7 +108,7 @@ class ComposicaoCrud(MasterDetailCrud):
paginate_by = None paginate_by = None
def take_composicao_pk(self): def take_composicao_pk(self):
username = self.request.user.username username = self.request.user.username
try: try:
self.logger.debug('user=' + username + '. Tentando obter pk da composição.') self.logger.debug('user=' + username + '. Tentando obter pk da composição.')
@ -278,3 +278,15 @@ class DocumentoAcessorioCrud(MasterDetailCrud):
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('sapl.comissoes:reuniao_detail', reverse('sapl.comissoes:reuniao_detail',
kwargs={'pk': obj.reuniao.pk})) kwargs={'pk': obj.reuniao.pk}))
def get_participacoes_comissao(request):
parlamentares = []
composicao_id = request.GET.get('composicao_id')
if composicao_id:
parlamentares = [{'nome': p.parlamentar.nome_parlamentar, 'id': p.parlamentar.id} for p in
Participacao.objects.filter(composicao_id=composicao_id).order_by(
'parlamentar__nome_parlamentar')]
return JsonResponse(parlamentares, safe=False)

61
sapl/materia/forms.py

@ -26,7 +26,7 @@ import django_filters
import sapl import sapl
from sapl.base.models import AppConfig, Autor, TipoAutor from sapl.base.models import AppConfig, Autor, TipoAutor
from sapl.comissoes.models import Comissao, Participacao from sapl.comissoes.models import Comissao, Participacao, Composicao
from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC, from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC,
STATUS_TA_PRIVATE) STATUS_TA_PRIVATE)
from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column, from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column,
@ -37,7 +37,7 @@ from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto,
UnidadeTramitacao) UnidadeTramitacao)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
from sapl.parlamentares.models import Legislatura, Partido from sapl.parlamentares.models import Legislatura, Partido, Parlamentar
from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo
from sapl.settings import MAX_DOC_UPLOAD_SIZE from sapl.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import (YES_NO_CHOICES, SEPARADOR_HASH_PROPOSICAO, from sapl.utils import (YES_NO_CHOICES, SEPARADOR_HASH_PROPOSICAO,
@ -345,7 +345,7 @@ class AcompanhamentoMateriaForm(ModelForm):
self.helper = SaplFormHelper() self.helper = SaplFormHelper()
self.helper.layout = Layout( self.helper.layout = Layout(
Fieldset( Fieldset(
_('Acompanhamento de Matéria por e-mail'), _('Acompanhamento de Matéria por e-mail'),
row1, row1,
form_actions(label='Cadastrar') form_actions(label='Cadastrar')
) )
@ -362,34 +362,63 @@ class DocumentoAcessorioForm(FileFieldCheckMixin, ModelForm):
class RelatoriaForm(ModelForm): class RelatoriaForm(ModelForm):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
composicao = forms.ModelChoiceField(
required=True,
empty_label='---------',
queryset=Composicao.objects.all(),
label=_('Composição')
)
class Meta: class Meta:
model = Relatoria model = Relatoria
fields = ['data_designacao_relator', 'comissao', 'parlamentar', fields = [
'data_destituicao_relator', 'tipo_fim_relatoria'] 'comissao',
'data_designacao_relator',
'data_destituicao_relator',
'tipo_fim_relatoria',
'composicao',
'parlamentar'
]
widgets = {'comissao': forms.Select(attrs={'disabled': 'disabled'})} widgets = {'comissao': forms.Select(attrs={'disabled': 'disabled'})}
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = to_row([('comissao', 12)])
row2 = to_row([('data_designacao_relator', 4),
('data_destituicao_relator', 4),
('tipo_fim_relatoria', 4)])
row3 = to_row([('composicao', 4),
('parlamentar', 8)])
self.helper = SaplFormHelper()
self.helper.layout = SaplFormLayout(
Fieldset(_('Relatoria'), row1, row2, row3))
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
comissao_pk = kwargs['initial']['comissao']
composicoes = Composicao.objects.filter(comissao_id=comissao_pk)
self.fields['composicao'].choices = [('', '---------')] + \
[(c.pk, c) for c in composicoes]
def clean(self): self.fields['parlamentar'].choices = [('', '---------')]
super(RelatoriaForm, self).clean()
if not self.is_valid(): def clean(self):
return self.cleaned_data super().clean()
cleaned_data = self.cleaned_data cleaned_data = self.cleaned_data
if not self.is_valid():
return cleaned_data
try: try:
self.logger.debug("Tentando obter objeto Comissao.") self.logger.debug("Tentando obter objeto Comissao.")
comissao = Comissao.objects.get(id=self.initial['comissao']) comissao = Comissao.objects.get(id=self.initial['comissao'])
except ObjectDoesNotExist as e: except ObjectDoesNotExist as e:
self.logger.error("Objeto Comissao não encontrado com id={} " self.logger.error(
".A localização atual deve ser uma comissão. " "Objeto Comissao não encontrado com id={}. A localização atual deve ser uma comissão. ".format(
.format(self.initial['comissao']) + str(e)) self.initial['comissao']) + str(e))
msg = _('A localização atual deve ser uma comissão.') msg = _('A localização atual deve ser uma comissão.')
raise ValidationError(msg) raise ValidationError(msg)
else: else:
@ -1537,7 +1566,7 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm):
tm, am, nm = (cd.get('tipo_materia', ''), tm, am, nm = (cd.get('tipo_materia', ''),
cd.get('ano_materia', ''), cd.get('ano_materia', ''),
cd.get('numero_materia', '')) cd.get('numero_materia', ''))
if cd['numero_materia_futuro'] and \ if cd['numero_materia_futuro'] and \
'tipo' in cd and \ 'tipo' in cd and \
MateriaLegislativa.objects.filter(tipo=cd['tipo'].tipo_conteudo_related, MateriaLegislativa.objects.filter(tipo=cd['tipo'].tipo_conteudo_related,
@ -1755,7 +1784,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
self._meta.fields.remove('regime_tramitacao') self._meta.fields.remove('regime_tramitacao')
# esta chamada isola o __init__ de ProposicaoForm # esta chamada isola o __init__ de ProposicaoForm
super(ProposicaoForm, self).__init__(*args, **kwargs) super(ProposicaoForm, self).__init__(*args, **kwargs)
fields = [ fields = [
Fieldset( Fieldset(
@ -1831,7 +1860,7 @@ class ConfirmarProposicaoForm(ProposicaoForm):
self.fields['tipo_readonly'].initial = self.instance.tipo.descricao self.fields['tipo_readonly'].initial = self.instance.tipo.descricao
self.fields['autor_readonly'].initial = str(self.instance.autor) self.fields['autor_readonly'].initial = str(self.instance.autor)
if self.instance.numero_materia_futuro: if self.instance.numero_materia_futuro:
self.fields['numero_materia_futuro'].initial = self.instance.numero_materia_futuro self.fields['numero_materia_futuro'].initial = self.instance.numero_materia_futuro
if self.instance.materia_de_vinculo: if self.instance.materia_de_vinculo:
self.fields[ self.fields[

13
sapl/materia/tests/test_materia_form.py

@ -2,6 +2,7 @@ import pytest
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from model_mommy import mommy from model_mommy import mommy
from sapl.comissoes.models import Comissao, TipoComissao
from sapl.materia import forms from sapl.materia import forms
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
@ -172,15 +173,23 @@ def test_valida_campos_obrigatorios_devolver_proposicao_form():
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)
def test_valida_campos_obrigatorios_relatoria_form(): def test_valida_campos_obrigatorios_relatoria_form():
form = forms.RelatoriaForm(data={}) tipo_comissao = mommy.make(TipoComissao)
comissao = mommy.make(Comissao,
tipo=tipo_comissao,
nome='Comissao Teste',
sigla='T',
data_criacao='2016-03-21')
form = forms.RelatoriaForm(initial={'comissao':comissao}, data={})
assert not form.is_valid() assert not form.is_valid()
errors = form.errors errors = form.errors
assert errors['parlamentar'] == [_('Este campo é obrigatório.')] assert errors['parlamentar'] == [_('Este campo é obrigatório.')]
assert errors['data_designacao_relator'] == [_('Este campo é obrigatório.')] assert errors['data_designacao_relator'] == [_('Este campo é obrigatório.')]
assert errors['composicao'] == [_('Este campo é obrigatório.')]
assert len(errors) == 2 assert len(errors) == 3
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)

86
sapl/materia/views.py

@ -1111,55 +1111,13 @@ class RelatoriaCrud(MasterDetailCrud):
class CreateView(MasterDetailCrud.CreateView): class CreateView(MasterDetailCrud.CreateView):
form_class = RelatoriaForm form_class = RelatoriaForm
layout_key = None
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
username = self.request.user.username
try:
self.logger.debug("user=" + username + ". Tentando obter objeto Comissao de pk={}.".format(
context['form'].initial['comissao']))
comissao = Comissao.objects.get(
pk=context['form'].initial['comissao'])
except:
self.logger.error("user=" + username + ". Objeto Comissão de pk={} não encontrado.".format(
context['form'].initial['comissao']))
pass
else:
self.logger.info("user=" + username + ". Objeto Comissao de pk={} obtido com sucesso.".format(
context['form'].initial['comissao']))
materia = MateriaLegislativa.objects.get(
pk=self.kwargs.get('pk'))
data_materia = materia.data_apresentacao
comissao = Comissao.objects.get(
pk=context['form'].initial['comissao'])
composicao = comissao.composicao_set.filter(
Q(periodo__data_fim__isnull=False,
periodo__data_inicio__lte=data_materia,
periodo__data_fim__gte=data_materia) |
Q(periodo__data_fim__isnull=True,
periodo__data_inicio__lte=data_materia)
)
participacoes = Participacao.objects.select_related().filter(composicao=composicao)
parlamentares = [('', '---------')] + [
(participacao.parlamentar.id, participacao.parlamentar.nome_parlamentar) for participacao in
participacoes if participacao.titular]
context['form'].fields['parlamentar'].choices = parlamentares
return context
def get_initial(self): def get_initial(self):
materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) materia = MateriaLegislativa.objects.get(id=self.kwargs['pk'])
loc_atual = Tramitacao.objects.filter( loc_atual = Tramitacao.objects.filter(materia=materia).last()
materia=materia).last()
if loc_atual is None: if loc_atual is None:
localizacao = 0 localizacao = 0
@ -1174,47 +1132,9 @@ class RelatoriaCrud(MasterDetailCrud):
class UpdateView(MasterDetailCrud.UpdateView): class UpdateView(MasterDetailCrud.UpdateView):
form_class = RelatoriaForm form_class = RelatoriaForm
layout_key = None
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
username = self.request.user.username
try:
self.logger.debug("user=" + username + ". Tentando obter objeto Comissao de pk={}.".format(
context['form'].initial['comissao']))
comissao = Comissao.objects.get(
pk=context['form'].initial['comissao'])
except ObjectDoesNotExist:
self.logger.error("user=" + username + ". Objeto Comissão de pk={} não encontrado.".format(
context['form'].initial['comissao']))
pass
else:
self.logger.info("user=" + username + ". Objeto Comissao de pk={} obtido com sucesso.".format(
context['form'].initial['comissao']))
relatoria = Relatoria.objects.select_related(
'materia').get(pk=self.kwargs.get('pk'))
ano_materia = relatoria.materia.ano
comissao = Comissao.objects.get(
pk=context['form'].initial['comissao'])
composicoes = comissao.composicao_set.all()
composicao = comissao.composicao_set.filter(
periodo__data_inicio__year=ano_materia)
participacoes = Participacao.objects.select_related().filter(composicao=composicao)
parlamentares = [('', '---------')] + [
(participacao.parlamentar.id, participacao.parlamentar.nome_parlamentar) for participacao in
participacoes if participacao.titular]
context['form'].fields['parlamentar'].choices = parlamentares
return context
class TramitacaoCrud(MasterDetailCrud): class TramitacaoCrud(MasterDetailCrud):
model = Tramitacao model = Tramitacao

19
sapl/templates/materia/relatoria_form.html

@ -16,5 +16,24 @@
{% block extra_js %} {% block extra_js %}
<script language="Javascript"> <script language="Javascript">
$("#id_comissao").attr("disabled", true); $("#id_comissao").attr("disabled", true);
$(document).ready(function() {
$("#id_composicao").change(function() {
var composicao_id = $("#id_composicao").val();
var json_data = { composicao_id: composicao_id };
var parlamentar_field = $("#id_parlamentar");
$.getJSON("/sistema/comissao/recupera-participacoes", json_data, function(data) {
parlamentar_field.children().remove();
parlamentar_field.append($("<option></option>").attr("value", '').text('---------'));
if (data) {
$.each(data, function(idx, parlamentar) {
parlamentar_field.append($("<option></option>").attr("value", parlamentar.id).text(parlamentar.nome));
});
}
});
});
});
</script> </script>
{% endblock extra_js %} {% endblock extra_js %}

Loading…
Cancel
Save