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_fim'] <
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)
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.core.exceptions import ValidationError
from django.db import models, transaction
from django.db.models import Q
from django.forms import Form, ModelForm
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat
@ -170,6 +171,52 @@ class SessaoLegislativaForm(ModelForm):
data_inicio = cleaned_data['data_inicio']
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:
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 '
'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

87
sapl/sessao/forms.py

@ -75,6 +75,8 @@ class SessaoPlenariaForm(ModelForm):
sl = self.cleaned_data['sessao_legislativa']
leg = self.cleaned_data['legislatura']
tipo = self.cleaned_data['tipo']
abertura = self.cleaned_data['data_inicio']
encerramento = self.cleaned_data['data_fim']
error = ValidationError(
"Número de Sessão Plenária já existente "
@ -96,6 +98,91 @@ class SessaoPlenariaForm(ModelForm):
else: # create
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

2
sapl/sessao/tests/test_sessao.py

@ -38,7 +38,7 @@ def test_sessao_plenaria_form_valido():
'numero': '1',
'tipo': str(tipo.pk),
'sessao_legislativa': str(sessao.pk),
'data_inicio': '10/11/2017',
'data_inicio': str(sessao.data_inicio),
'hora_inicio': '10:10',
'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',
'tipo': str(tipo.pk),
'sessao_legislativa': str(sessao.pk),
'data_inicio': '10/11/2017',
'data_inicio': str(sessao.data_inicio),
'hora_inicio': '10:10'
}, follow=True)

Loading…
Cancel
Save