diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index b09c054ec..975ed7621 100644 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -16,27 +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 = [] + +class LegislaturaCreateForm(LegislaturaForm): + def clean(self): cleaned_data = self.cleaned_data - numero = cleaned_data['numero'] - 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')) - if Legislatura.objects.filter(numero=numero).exists(): - raise ValidationError( - _('Já cadastrada uma legislatura com este número')) + 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 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'] + + 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 55733dc22..6ee5a1e81 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -11,7 +11,8 @@ 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, ParlamentarCreateForm, +from .forms import (FiliacaoForm, LegislaturaCreateForm, + LegislaturaUpdateForm, ParlamentarCreateForm, ParlamentarForm) from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, Dependente, Filiacao, Frente, Legislatura, Mandato, @@ -149,8 +150,19 @@ class LegislaturaCrud(CrudAux): model = Legislatura help_path = 'tabelas_auxiliares#legislatura' - class BaseMixin(CrudAux.BaseMixin): - form_class = LegislaturaForm + class CreateView(CrudAux.CreateView): + form_class = LegislaturaCreateForm + + def get_initial(self): + try: + ultima_legislatura = Legislatura.objects.latest('numero') + numero = ultima_legislatura.numero + 1 + except Legislatura.DoesNotExist: + numero = 1 + return {'numero': numero} + + class UpdateView(CrudAux.UpdateView): + form_class = LegislaturaUpdateForm class FiliacaoCrud(MasterDetailCrud): diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 9948256bd..98119cf06 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -5,7 +5,7 @@ CargoMesa: Legislatura: {% trans 'Legislatura' %}: - - numero:2 data_inicio data_fim data_eleicao + - numero data_eleicao data_inicio data_fim Coligacao: {% trans 'Coligação' %}: