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 Parlamentares -
+
+ 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