diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 806e635eb..975ed7621 100644 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -16,42 +16,65 @@ class ImageThumbnailFileInput(ClearableFileInput): template_name = 'floppyforms/image_thumbnail.html' +def validar_datas_legislatura(eleicao, inicio, fim, pk=None): + + # Verifica se data de eleição < inicio < fim + if inicio >= fim or eleicao >= inicio: + msg_error = _('A data início deve ser menor que a ' + + 'data fim, e a data eleição deve ser ' + + 'menor que a data início') + return [False, msg_error] + + # Verifica se há alguma data cadastrada no intervalo de tempo desejado + if Legislatura.objects.filter( + data_inicio__range=[inicio, fim]).exclude(pk=pk).exists()\ + or Legislatura.objects.filter( + data_fim__range=[inicio, fim]).exclude(pk=pk).exists(): + msg_error = _('Já existe uma legislatura neste intervalo de datas') + return [False, msg_error] + + # Verifica se há alguma outra data de eleição cadastrada + if Legislatura.objects.filter( + data_eleicao=eleicao).exclude(pk=pk).exists(): + msg_error = _('Esta data de eleição já foi cadastrada') + return [False, msg_error] + + return [True, ''] + + class LegislaturaForm(ModelForm): class Meta: model = Legislatura exclude = [] - widgets = {'numero': forms.HiddenInput(), } + + +class LegislaturaCreateForm(LegislaturaForm): def clean(self): cleaned_data = self.cleaned_data - data_inicio = cleaned_data['data_inicio'] - data_fim = cleaned_data['data_fim'] - data_eleicao = cleaned_data['data_eleicao'] - - if data_inicio >= data_fim or data_eleicao >= data_inicio: - raise ValidationError(_('A data início deve ser menor que a ' + - 'data fim, e a data eleição deve ser ' + - 'menor que a data início')) + eleicao = cleaned_data['data_eleicao'] + inicio = cleaned_data['data_inicio'] + fim = cleaned_data['data_fim'] + + valida_datas = validar_datas_legislatura(eleicao, inicio, fim) + if not valida_datas[0]: + raise ValidationError(valida_datas[1]) return cleaned_data -class LegislaturaCreateForm(LegislaturaForm): +class LegislaturaUpdateForm(LegislaturaCreateForm): def clean(self): cleaned_data = super(LegislaturaCreateForm, self).clean() + eleicao = cleaned_data['data_eleicao'] inicio = cleaned_data['data_inicio'] fim = cleaned_data['data_fim'] - eleicao = cleaned_data['data_eleicao'] - if Legislatura.objects.filter( - data_inicio__range=[inicio, fim]).exists() or \ - Legislatura.objects.filter( - data_fim__range=[inicio, fim]).exists(): - raise ValidationError( - _('Já existe uma legislatura neste intervalo de datas')) - if Legislatura.objects.filter(data_eleicao=eleicao): - raise ValidationError( - _('Esta data de eleição já foi cadastrada')) + + valida_datas = validar_datas_legislatura( + eleicao, inicio, fim, pk=self.instance.pk) + if not valida_datas[0]: + raise ValidationError(valida_datas[1]) return cleaned_data diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 3254d8c90..6ee5a1e81 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -3,7 +3,6 @@ from django.contrib import messages from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.views.generic import FormView -from django.views.generic.edit import ModelFormMixin from sapl.comissoes.models import Participacao from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, @@ -12,8 +11,9 @@ from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, from sapl.materia.models import Proposicao, Relatoria from sapl.parlamentares.apps import AppConfig -from .forms import (FiliacaoForm, LegislaturaForm, LegislaturaCreateForm, - ParlamentarCreateForm, ParlamentarForm) +from .forms import (FiliacaoForm, LegislaturaCreateForm, + LegislaturaUpdateForm, ParlamentarCreateForm, + ParlamentarForm) from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, Dependente, Filiacao, Frente, Legislatura, Mandato, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, @@ -161,17 +161,8 @@ class LegislaturaCrud(CrudAux): numero = 1 return {'numero': numero} - def form_valid(self, form): - self.object = form.save() - queryset = Legislatura.objects.all().order_by('data_inicio') - for i, obj in enumerate(queryset): - obj.numero = i + 1 - obj.save() - - return super(ModelFormMixin, self).form_valid(form) - class UpdateView(CrudAux.UpdateView): - form_class = LegislaturaForm + form_class = LegislaturaUpdateForm class FiliacaoCrud(MasterDetailCrud): diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 8b7306922..98119cf06 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -5,8 +5,7 @@ CargoMesa: Legislatura: {% trans 'Legislatura' %}: - - numero:12 - - data_eleicao data_inicio data_fim + - numero data_eleicao data_inicio data_fim Coligacao: {% trans 'Coligação' %}: