Browse Source

Merge pull request #2134 from interlegis/2123-correcao-sessao-leg

#2123 Verificação na criação de Sessões Legislativas
pull/2241/head
João Pedro Sconetto 6 years ago
committed by GitHub
parent
commit
32a6f0d2d7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      sapl/audiencia/forms.py
  2. 64
      sapl/base/forms.py
  3. 87
      sapl/sessao/forms.py
  4. 2
      sapl/sessao/tests/test_sessao.py
  5. 2
      sapl/sessao/tests/test_sessao_view.py

2
sapl/audiencia/forms.py

@ -98,7 +98,7 @@ class AudienciaForm(forms.ModelForm):
if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']:
if (self.cleaned_data['hora_fim'] < if (self.cleaned_data['hora_fim'] <
self.cleaned_data['hora_inicio']): self.cleaned_data['hora_inicio']):
msg = _('A hora de fim não pode ser anterior a hora de ínicio') msg = _('A hora de fim não pode ser anterior a hora de icio')
raise ValidationError(msg) raise ValidationError(msg)
return cleaned_data return cleaned_data

64
sapl/base/forms.py

@ -10,6 +10,7 @@ from django.contrib.auth.forms import (AuthenticationForm, PasswordResetForm,
from django.contrib.auth.models import Group, User from django.contrib.auth.models import Group, User
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models, transaction from django.db import models, transaction
from django.db.models import Q
from django.forms import Form, ModelForm from django.forms import Form, ModelForm
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat from django.utils.translation import string_concat
@ -170,6 +171,52 @@ class SessaoLegislativaForm(ModelForm):
data_inicio = cleaned_data['data_inicio'] data_inicio = cleaned_data['data_inicio']
data_fim = cleaned_data['data_fim'] data_fim = cleaned_data['data_fim']
legislatura = cleaned_data['legislatura']
numero = cleaned_data['numero']
data_inicio_leg = legislatura.data_inicio
data_fim_leg = legislatura.data_fim
pk = self.initial['id']
# Querys para verificar se existem Sessões Legislativas no período selecionado no form
# Caso onde a data_inicio e data_fim são iguais a de alguma sessão já criada
primeiro_caso = Q(data_inicio=data_inicio, data_fim=data_fim)
# Caso onde a data_inicio está entre o início e o fim de uma Sessão já existente
segundo_caso = Q(data_inicio__lt=data_inicio, data_fim__range=(data_inicio, data_fim))
# Caso onde a data_fim está entre o início e o fim de uma Sessão já existente
terceiro_caso = Q(data_inicio__range=(data_inicio, data_fim), data_fim__gt=data_fim)
sessoes_existentes = SessaoLegislativa.objects.filter(primeiro_caso|segundo_caso|terceiro_caso).\
exclude(pk=pk)
if sessoes_existentes:
raise ValidationError('Já existe registrado uma Sessão Legislativa que coincide com a data '
'inserida, favor verificar as Sessões existentes antes de criar uma '
'nova Sessão Legislativa')
sessoes_legislativas = SessaoLegislativa.objects.filter(legislatura=legislatura).exclude(pk=pk)
if sessoes_legislativas:
numeracoes = [n.numero for n in sessoes_legislativas]
numeracoes = sorted(numeracoes)
ult = max(numeracoes)
else:
ult = SessaoLegislativa.objects.latest('data_fim')
ult = ult.numero
if numero <= ult:
raise ValidationError('O número da Sessão Legislativa não pode ser menor ou igual '
'que o de Sessões Legislativas passadas')
if data_inicio < data_inicio_leg or \
data_inicio > data_fim_leg:
raise ValidationError('A data de início da Sessão Legislativa deve estar compreendida '
'entre a data início e fim da Legislatura selecionada')
if data_fim > data_fim_leg or \
data_fim < data_inicio_leg:
raise ValidationError('A data de fim da Sessão Legislativa deve estar compreendida '
'entre a data início e fim da Legislatura selecionada')
if data_inicio > data_fim: if data_inicio > data_fim:
raise ValidationError('Data início não pode ser superior à data fim') raise ValidationError('Data início não pode ser superior à data fim')
@ -182,6 +229,23 @@ class SessaoLegislativaForm(ModelForm):
raise ValidationError('Data início de intervalo não pode ser ' raise ValidationError('Data início de intervalo não pode ser '
'superior à data fim de intervalo') 'superior à data fim de intervalo')
if data_inicio_intervalo:
if data_inicio_intervalo < data_inicio or \
data_inicio_intervalo < data_inicio_leg or \
data_inicio_intervalo > data_fim or \
data_inicio_intervalo > data_inicio_leg:
raise ValidationError('A data de início do intervalo deve estar compreendida entre '
'as datas de início e fim tanto da Legislatura quanto da '
'própria Sessão Legislativa')
if data_fim_intervalo:
if data_fim_intervalo > data_fim or \
data_fim_intervalo > data_fim_leg or \
data_fim_intervalo < data_inicio or \
data_fim_intervalo < data_inicio_leg:
raise ValidationError('A data de fim do intervalo deve estar compreendida entre '
'as datas de início e fim tanto da Legislatura quanto da '
'própria Sessão Legislativa')
return cleaned_data return cleaned_data

87
sapl/sessao/forms.py

@ -75,6 +75,8 @@ class SessaoPlenariaForm(ModelForm):
sl = self.cleaned_data['sessao_legislativa'] sl = self.cleaned_data['sessao_legislativa']
leg = self.cleaned_data['legislatura'] leg = self.cleaned_data['legislatura']
tipo = self.cleaned_data['tipo'] tipo = self.cleaned_data['tipo']
abertura = self.cleaned_data['data_inicio']
encerramento = self.cleaned_data['data_fim']
error = ValidationError( error = ValidationError(
"Número de Sessão Plenária já existente " "Número de Sessão Plenária já existente "
@ -96,6 +98,91 @@ class SessaoPlenariaForm(ModelForm):
else: # create else: # create
raise error raise error
# Condições da verificação
abertura_entre_leg = leg.data_inicio <= abertura <= leg.data_fim
abertura_entre_sl = sl.data_inicio <= abertura <= sl.data_fim
if encerramento is not None:
encerramento_entre_leg = leg.data_inicio < encerramento < leg.data_fim
encerramento_entre_sl = sl.data_inicio < encerramento < sl.data_fim
# Verificação das datas de abertura e encerramento da Sessão
# Verificações com a data de encerramento preenchidas
if encerramento is not None:
# Verifica se a data de encerramento é anterior a data de abertura
if encerramento < abertura:
raise ValidationError("A data de encerramento não pode ser "
"anterior a data de abertura.")
# Verifica se a data de abertura está entre a data de início e fim da legislatura
if abertura_entre_leg and encerramento_entre_leg:
if abertura_entre_sl and encerramento_entre_sl:
pass
elif abertura_entre_sl and not encerramento_entre_sl:
raise ValidationError("A data de encerramento deve estar entre "
"as datas de início e fim da Sessão Legislativa.")
elif not abertura_entre_sl and encerramento_entre_sl:
raise ValidationError("A data de abertura deve estar entre as "
"datas de início e fim da Sessão Legislativa.")
elif not abertura_entre_sl and not encerramento_entre_sl:
raise ValidationError("A data de abertura e de encerramento devem estar "
"entre as datas de início e fim da Sessão Legislativa.")
elif abertura_entre_leg and not encerramento_entre_leg:
if abertura_entre_sl and encerramento_entre_sl:
raise ValidationError("A data de encerramento deve estar entre "
"as datas de início e fim da Legislatura.")
elif abertura_entre_sl and not encerramento_entre_sl:
raise ValidationError("A data de encerramento deve estar entre "
"as datas de início e fim tanto da "
"Legislatura quanto da Sessão Legislativa.")
elif not abertura_entre_sl and encerramento_entre_sl:
raise ValidationError("As datas de abertura e encerramento devem "
"estar entre as "
"datas de início e fim tanto Legislatura "
"quanto da Sessão Legislativa.")
elif not abertura_entre_sl and not encerramento_entre_sl:
raise ValidationError("As datas de abertura e encerramento devem "
"estar entre as "
"datas de início e fim tanto Legislatura "
"quanto da Sessão Legislativa.")
elif not abertura_entre_leg and not encerramento_entre_leg:
if abertura_entre_sl and encerramento_entre_sl:
raise ValidationError("As datas de abertura e encerramento devem "
"estar entre as "
"datas de início e fim da Legislatura.")
elif abertura_entre_sl and not encerramento_entre_sl:
raise ValidationError("As datas de abertura e encerramento devem "
"estar entre as "
"datas de início e fim tanto Legislatura "
"quanto da Sessão Legislativa.")
elif not abertura_entre_sl and encerramento_entre_sl:
raise ValidationError("As datas de abertura e encerramento devem "
"estar entre as "
"datas de início e fim tanto Legislatura "
"quanto da Sessão Legislativa.")
elif not abertura_entre_sl and not encerramento_entre_sl:
raise ValidationError("As datas de abertura e encerramento devem "
"estar entre as "
"datas de início e fim tanto Legislatura "
"quanto da Sessão Legislativa.")
# Verificações com a data de encerramento vazia
else:
if abertura_entre_leg:
if abertura_entre_sl:
pass
else:
raise ValidationError("A data de abertura da sessão deve estar "
"entre a data de início e fim da Sessão Legislativa.")
else:
if abertura_entre_sl:
raise ValidationError("A data de abertura da sessão deve estar "
"entre a data de início e fim da Legislatura.")
else:
raise ValidationError("A data de abertura da sessão deve estar "
"entre a data de início e fim tanto da "
"Legislatura quanto da Sessão Legislativa.")
return self.cleaned_data return self.cleaned_data

2
sapl/sessao/tests/test_sessao.py

@ -38,7 +38,7 @@ def test_sessao_plenaria_form_valido():
'numero': '1', 'numero': '1',
'tipo': str(tipo.pk), 'tipo': str(tipo.pk),
'sessao_legislativa': str(sessao.pk), 'sessao_legislativa': str(sessao.pk),
'data_inicio': '10/11/2017', 'data_inicio': str(sessao.data_inicio),
'hora_inicio': '10:10', 'hora_inicio': '10:10',
'painel_aberto': False 'painel_aberto': False
}) })

2
sapl/sessao/tests/test_sessao_view.py

@ -18,7 +18,7 @@ def test_incluir_sessao_plenaria_submit(admin_client):
'numero': '1', 'numero': '1',
'tipo': str(tipo.pk), 'tipo': str(tipo.pk),
'sessao_legislativa': str(sessao.pk), 'sessao_legislativa': str(sessao.pk),
'data_inicio': '10/11/2017', 'data_inicio': str(sessao.data_inicio),
'hora_inicio': '10:10' 'hora_inicio': '10:10'
}, follow=True) }, follow=True)

Loading…
Cancel
Save