Repository: interlegis/sapl

Issue:
Cadastro de legislaturas
Erro ao cadastrar nova legislatura.

![screen shot 2016-10-06 at 09 40 59](https://cloud.githubusercontent.com/assets/19570385/19152968/e02be57c-8baa-11e6-8c5c-ef2a726f68c4.png)



Discussion:
@edwardoliveira 

Verei isso agora.


Resolving patch:
diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py
--- 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
--- a/sapl/parlamentares/views.py
+++ b/sapl/parlamentares/views.py
@@ -11,7 +11,8 @@
 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):


Test patch: