From 53013f0d629eca97401846296bd166ccb04d2399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Cantu=C3=A1ria?= Date: Wed, 3 Apr 2019 11:39:09 -0300 Subject: [PATCH] =?UTF-8?q?Separa=20cria=C3=A7=C3=A3o=20de=20mandato=20e?= =?UTF-8?q?=20parlamentar=20(#2579)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #2536 Adiciona cadastro de parlamentar na tabelas auxiliares Remoção de mandato na criação do parlamentar Corrige testes Corrige título no CRUD de parlamentar Corrige identação Adiciona botão de criação de parlamentar após pesquisa Corrige botões em parlamentares Altera nomes Remove intermediário para vinculação de parlamentar Arruma bug Altera redirecionamento para detales de parlamentar Início da criação do form e view de vincular parlamentar Corrige VincularParlamentarForm Corrige VincularParlamentarView Adiciona html de vincular parlamentar Mostrar somente parlamentares ativos Cria variável data_expedicao_diploma Compara mandato por legislatura invés de data Corrige verificação de existencia de chave no dicionário Adiciona data fim do mandato na criação do mandato Adiciona restrição para usuário não logado Co-authored-by: UlyssesBML Co-authored-by: Ricardo Lima Canela --- sapl/parlamentares/forms.py | 62 +++++++++++++++++++ sapl/parlamentares/urls.py | 5 +- sapl/parlamentares/views.py | 30 ++++++++- sapl/templates/parlamentares/layouts.yaml | 6 +- .../parlamentares/parlamentar_filter.html | 44 ++++++------- .../parlamentares/parlamentares_list.html | 20 +++--- .../parlamentares/vincular_parlamentar.html | 8 +++ 7 files changed, 135 insertions(+), 40 deletions(-) create mode 100644 sapl/templates/parlamentares/vincular_parlamentar.html diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 2aa316953..f52cea871 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -506,3 +506,65 @@ class VotanteForm(ModelForm): votante.user = u votante.save() return votante + + +class VincularParlamentarForm(forms.Form): + logger = logging.getLogger(__name__) + + parlamentar = forms.ModelChoiceField( + label=Parlamentar._meta.verbose_name, + queryset=Parlamentar.objects.filter(ativo=True), + required=True, + empty_label='Selecione' + ) + + legislatura = forms.ModelChoiceField( + label=Legislatura._meta.verbose_name, + queryset=Legislatura.objects.all(), + required=True, + empty_label='Selecione' + ) + + data_expedicao_diploma = forms.DateField( + label='Data de Expedição do Diploma', + required=False, + widget=forms.DateInput(format='%d/%m/%Y') + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + row1 = to_row([ + ('parlamentar', 6), + ('legislatura', 3), + ('data_expedicao_diploma', 3) + ]) + + self.helper = SaplFormHelper() + self.helper.layout = Layout( + Fieldset( + 'Vincular Parlamentar', + row1, + form_actions(label='Vincular') + ) + ) + + def clean(self): + super().clean() + + if not self.is_valid(): + return self.cleaned_data + + cleaned_data = self.cleaned_data + parlamentar = cleaned_data['parlamentar'] + legislatura = cleaned_data['legislatura'] + data_expedicao_diploma = cleaned_data['data_expedicao_diploma'] + + if parlamentar.mandato_set.filter(legislatura=legislatura): + self.logger.error('Parlamentar já está vinculado a legislatura informada.') + raise ValidationError(_('Parlamentar já está vinculado a legislatura informada.')) + elif data_expedicao_diploma and legislatura.data_inicio <= data_expedicao_diploma: + self.logger.error('Data da Expedição do Diploma deve ser anterior a data de início da Legislatura.') + raise ValidationError(_('Data da Expedição do Diploma deve ser anterior a data de início da Legislatura.')) + + return cleaned_data diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index ce6af679b..5baf91979 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -20,7 +20,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, remove_parlamentar_composicao, lista_parlamentares, parlamentares_filiados, - PesquisarParlamentarView) + PesquisarParlamentarView, VincularParlamentarView) from .apps import AppConfig @@ -44,6 +44,9 @@ urlpatterns = [ url(r'^parlamentar/(?P\d+)/materias$', ParlamentarMateriasView.as_view(), name='parlamentar_materias'), + url(r'^parlamentar/vincular-parlamentar/$', + VincularParlamentarView.as_view(), name='vincular_parlamentar'), + url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + ComposicaoColigacaoCrud.get_urls())), diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 4efc7c012..4d844dd13 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -3,6 +3,7 @@ import json import logging from django.contrib import messages +from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.contenttypes.models import ContentType from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.core.urlresolvers import reverse, reverse_lazy @@ -33,7 +34,7 @@ from sapl.parlamentares.apps import AppConfig from sapl.utils import (parlamentares_ativos, show_results_filter_set) from .forms import (FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, - ParlamentarCreateForm, ParlamentarForm, VotanteForm, ParlamentarFilterSet) + ParlamentarCreateForm, ParlamentarForm, VotanteForm, ParlamentarFilterSet, VincularParlamentarForm) from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, Dependente, Filiacao, Frente, Legislatura, Mandato, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, @@ -1138,3 +1139,30 @@ def altera_field_mesa_public_view(request): 'lista_fotos': lista_fotos, 'sessao_selecionada': sessao_selecionada, 'msg': ('', 1)}) + + +class VincularParlamentarView(PermissionRequiredMixin, FormView): + logger = logging.getLogger(__name__) + form_class = VincularParlamentarForm + template_name = 'parlamentares/vincular_parlamentar.html' + permission_required = ('parlamentares.add_parlamentar', ) + + def get_success_url(self): + return reverse('sapl.parlamentares:parlamentar_list') + + def form_valid(self, form): + kwargs = { + 'parlamentar': form.cleaned_data['parlamentar'], + 'legislatura': form.cleaned_data['legislatura'], + 'data_inicio_mandato': form.cleaned_data['legislatura'].data_inicio, + 'data_fim_mandato': form.cleaned_data['legislatura'].data_fim + } + + data_expedicao_diploma = form.cleaned_data.get('data_expedicao_diploma') + if data_expedicao_diploma: + kwargs.update({'data_expedicao_diploma': data_expedicao_diploma}) + + mandato = Mandato.objects.create(**kwargs) + mandato.save() + + return HttpResponseRedirect(self.get_success_url()) diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 0b419ef80..030e32758 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -30,7 +30,7 @@ SessaoLegislativa: - data_inicio_intervalo data_fim_intervalo Parlamentar: - {% trans 'Cadastro do Parlamentar' %}: + {% trans 'Dados do Parlamentar' %}: - nome_parlamentar:8 ativo - nome_completo - nivel_instrucao sexo data_nascimento @@ -47,7 +47,7 @@ Parlamentar: - biografia ParlamentarUpdate: - {% trans 'Cadastro do Parlamentar' %}: + {% trans 'Dados do Parlamentar' %}: - nome_parlamentar:8 ativo - nome_completo - nivel_instrucao sexo data_nascimento @@ -64,7 +64,7 @@ ParlamentarUpdate: - biografia ParlamentarCreate: - {% trans 'Cadastro do Parlamentar' %}: + {% trans 'Dados do Parlamentar' %}: - nome_parlamentar:8 ativo - nome_completo - nivel_instrucao sexo data_nascimento diff --git a/sapl/templates/parlamentares/parlamentar_filter.html b/sapl/templates/parlamentares/parlamentar_filter.html index 9a3ea54f7..dd6af7034 100644 --- a/sapl/templates/parlamentares/parlamentar_filter.html +++ b/sapl/templates/parlamentares/parlamentar_filter.html @@ -5,44 +5,44 @@ {% block base_content %} {% if not show_results %} {% crispy filter.form %} - {% endif %} - - {% if show_results %} -
+ {% else %} + -

+ {% if not request.user.is_anonymous %} + Cadastrar Parlamentar + {% endif %} +
+
{% if numero_res > 0 %} {% if numero_res == 1 %}

Foi encontrado {{ numero_res }} resultado

{% else %}

Foram encontrados {{ numero_res }} resultados

{% endif %} - - - - +
Nome do Parlamentar
+ + + - - - - {% for usuario in page_obj %} - - + + + {% for usuario in page_obj %} + + - - {% endfor %} - -
Nome do Parlamentar Nome Completo Ativo
+
{{usuario.nome_parlamentar}} {{ usuario.nome_completo }} {% if usuario.ativo %} Sim {% else %} Não {% endif %}
+ + {% endfor %} + + {% else %}

{{ NO_ENTRIES_MSG }}

- {% endif %} + {% endif %} {% endif %} -
{% include 'paginacao.html'%}


diff --git a/sapl/templates/parlamentares/parlamentares_list.html b/sapl/templates/parlamentares/parlamentares_list.html index 2b45bdb34..a91d50da9 100644 --- a/sapl/templates/parlamentares/parlamentares_list.html +++ b/sapl/templates/parlamentares/parlamentares_list.html @@ -1,21 +1,15 @@ {% extends "crud/list.html" %} {% load i18n %} {% load crispy_forms_tags cropping%} - {% block actions %} -
- {% if view.create_url %} - - {% blocktrans with verbose_name=view.verbose_name %} Adicionar {{ verbose_name }} {% endblocktrans %} - - {% endif %} - {% block more_buttons %}{% endblock more_buttons %} -
- +
+ Pesquisar Parlamentar + {% if not request.user.is_anonymous %} + Vincular Parlamentar + {% endif %} + {% block more_buttons %}{% endblock more_buttons %} +
{% endblock actions %} - {% block extra_content %}
Selecione o Período diff --git a/sapl/templates/parlamentares/vincular_parlamentar.html b/sapl/templates/parlamentares/vincular_parlamentar.html new file mode 100644 index 000000000..6ba8948dd --- /dev/null +++ b/sapl/templates/parlamentares/vincular_parlamentar.html @@ -0,0 +1,8 @@ +{% extends "crud/form.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% load common_tags %} + +{% block detail_content %} + {% crispy form %} +{% endblock detail_content %} \ No newline at end of file