diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 9a8dd811e..bf8533718 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -1392,4 +1392,4 @@ class PartidoForm(FileFieldCheckMixin, ModelForm): if cleaned_data['data_criacao'] > cleaned_data['data_extincao']: raise ValidationError("Certifique-se de que a data de criação seja anterior à data de extinção.") - return cleaned_data \ No newline at end of file + return cleaned_data diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index c7c8c9f9d..058da6976 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -18,11 +18,11 @@ from image_cropping.widgets import CropWidget, ImageCropWidget from sapl.utils import FileFieldCheckMixin from sapl.base.models import Autor, TipoAutor -from sapl.crispy_layout_mixin import form_actions, to_row +from sapl.crispy_layout_mixin import form_actions, to_row, SaplFormLayout from sapl.rules import SAPL_GROUP_VOTANTE from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura, - Mandato, Parlamentar, Votante) + Mandato, Parlamentar, Votante, Partido) class ImageThumbnailFileInput(ClearableFileInput): @@ -501,3 +501,43 @@ class VotanteForm(ModelForm): votante.user = u votante.save() return votante + + +class EditarNomePartidoForm(forms.Form): + sigla = forms.CharField(label="Sigla") + nome = forms.CharField(label="Novo Nome") + data_alteracao = forms.DateField(label="Data de alteração") + partido_pk = forms.CharField( + widget=forms.HiddenInput(), required=False) + + def __init__(self, *args, **kwargs): + super(EditarNomePartidoForm, self).__init__(*args, **kwargs) + + row1 = to_row([('sigla', 2)]) + row2 = to_row([('nome', 8)]) + row3 = to_row([('data_alteracao', 2)]) + row4 = to_row([('partido_pk', 2)]) + + self.helper = FormHelper() + self.helper.layout = SaplFormLayout( + Fieldset(_('Alteração do nome do partido'), + row1, row2, row3, row4)) + + + def clean(self): + super(EditarNomePartidoForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + obj = Partido.objects.get(id=self.cleaned_data['partido_pk']) + + if obj.sigla == self.cleaned_data['sigla']: + raise ValidationError("Sigla do partido igual à silga atual. Formulário inválido.") + + if obj.nome == self.cleaned_data['nome']: + raise ValidationError("Nome do partido igual ao nome atual. Formulário inválido.") + + if not self.cleaned_data['data_alteracao'] <= timezone.now().date(): + raise ValidationError("Data de alteração maior que data atual. Formulário inválido.") + + return self.cleaned_data diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index e383421c4..c28299d98 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -17,7 +17,8 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, frente_atualiza_lista_parlamentares, insere_parlamentar_composicao, parlamentares_frente_selected, - remove_parlamentar_composicao) + remove_parlamentar_composicao, + EditaNomePartidoView) from .apps import AppConfig @@ -60,6 +61,8 @@ urlpatterns = [ url(r'^sistema/parlamentar/tipo-militar/', include(TipoMilitarCrud.get_urls())), url(r'^sistema/parlamentar/partido/', include(PartidoCrud.get_urls())), + url(r'^sistema/parlamentar/partido/(?P\d+)/altera-nome', + EditaNomePartidoView.as_view(), name='altera_nome_partido'), url(r'^sistema/mesa-diretora/sessao-legislativa/', include(SessaoLegislativaCrud.get_urls())), diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 3068e3779..a14ec3831 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 @@ -30,7 +31,8 @@ from sapl.parlamentares.apps import AppConfig from sapl.utils import parlamentares_ativos from .forms import (FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, - ParlamentarCreateForm, ParlamentarForm, VotanteForm) + ParlamentarCreateForm, ParlamentarForm, VotanteForm, + EditarNomePartidoForm) from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, Dependente, Filiacao, Frente, Legislatura, Mandato, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, @@ -46,7 +48,6 @@ TipoMilitarCrud = CrudAux.build(SituacaoMilitar, 'tipo_situa_militar') DependenteCrud = MasterDetailCrud.build( Dependente, 'parlamentar', 'dependente') - class SessaoLegislativaCrud(CrudAux): model = SessaoLegislativa @@ -768,6 +769,37 @@ class MesaDiretoraView(FormView): }) +class EditaNomePartidoView(PermissionRequiredMixin, FormView): + form_class = EditarNomePartidoForm + template_name = 'parlamentares/altera_nome_partido_form.html' + permission_required = ('parlamentares.change_partido',) + + def get_initial(self): + initial = super(EditaNomePartidoView, self).get_initial() + initial['partido_pk'] = self.kwargs['pk'] + return initial + + + def form_valid(self, form): + data = form.cleaned_data + obj = Partido.objects.get(id=self.kwargs['pk']) + observacao = "Este partido teve o nome alterado de " + obj.nome + \ + " (" + obj.sigla + ") para " + data['nome'] + " (" + data['sigla'] \ + + ") em " + data['data_alteracao'].strftime("%d/%m/%Y") + "." + obj.nome = data['nome'] + obj.sigla = data['sigla'] + obj.observacao += '\n\n' + observacao + obj.save() + + return HttpResponseRedirect(self.get_success_url()) + + def get_success_url(self): + url_reverse = reverse('sapl.parlamentares:partido_detail', + kwargs={'pk': self.kwargs['pk']}) + + return url_reverse + + def altera_field_mesa(request): """ Essa função lida com qualquer alteração nos campos diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 18df83b58..53a99d962 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -992,3 +992,6 @@ class VotacaoEmBlocoFilterSet(MateriaLegislativaFilterSet): row4, row5, row6, row7, row8, row9, form_actions(label='Pesquisar')) ) + +class PartidoForm(forms.ModelForm): + pass diff --git a/sapl/templates/parlamentares/altera_nome_partido_form.html b/sapl/templates/parlamentares/altera_nome_partido_form.html new file mode 100644 index 000000000..da2c6116e --- /dev/null +++ b/sapl/templates/parlamentares/altera_nome_partido_form.html @@ -0,0 +1,7 @@ +{% extends 'crud/detail.html' %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block detail_content %} + {% crispy form %} +{% endblock detail_content %} diff --git a/sapl/templates/parlamentares/partido_detail.html b/sapl/templates/parlamentares/partido_detail.html new file mode 100644 index 000000000..681e1a1eb --- /dev/null +++ b/sapl/templates/parlamentares/partido_detail.html @@ -0,0 +1,13 @@ +{% extends 'crud/detail.html' %} +{% load i18n %} + +{% block actions %} + + {{ block.super }} + +
+ {% trans 'Alterar o Nome do Partido' %} +
+ + +{% endblock actions %}