Browse Source

Verify all dates conflicts in Filiação de Parlamentares a Partidos

pull/153/head
Eduardo Calil 9 years ago
parent
commit
f88fd60d77
  1. 155
      parlamentares/views.py
  2. 2
      templates/parlamentares/parlamentares_filiacao_edit.html

155
parlamentares/views.py

@ -11,6 +11,7 @@ from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin
from vanilla import GenericView
from django.core.exceptions import ObjectDoesNotExist
import sapl
from sapl.crud import build_crud
@ -780,6 +781,17 @@ class FiliacaoView(FormMixin, GenericView):
'form': form,
'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
# Função usada para todos os caso de erro na filiação
def error_message(self, parlamentar, form, mensagem):
filiacoes = Filiacao.objects.filter(parlamentar=parlamentar)
return self.render_to_response(
{'parlamentar': parlamentar,
'filiacoes': filiacoes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id,
'mensagem_erro': mensagem})
def post(self, request, *args, **kwargs):
form = FiliacaoForm(request.POST)
@ -796,40 +808,51 @@ class FiliacaoView(FormMixin, GenericView):
parlamentar=parlamentar)
candidato_nao_desfiliou = Filiacao.objects.filter(
parlamentar=parlamentar,
data_desfiliacao=None)
parlamentar=parlamentar,
data_desfiliacao=None)
# Vê se o candidato já se filiou alguma vez a algum partido
if not candidato_filiado:
filiacao = form.save(commit=False)
filiacao.parlamentar = parlamentar
filiacao.save()
return self.form_valid(form)
else:
# Dá erro caso não tenha se desfiliado do anterior
if candidato_nao_desfiliou:
filiacoes = Filiacao.objects.filter(
parlamentar=parlamentar)
return self.render_to_response(
{'parlamentar': parlamentar,
'filiacoes': filiacoes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id,
'mensagem_erro': "Você não pode se filiar a algum partido\
sem antes se desfiliar do partido anterior"})
mensagem = "Você não pode se filiar a algum partido\
sem antes se desfiliar do partido anterior"
return self.error_message(parlamentar, form, mensagem)
# Dá erro caso a data de desfiliação seja anterior a de
# filiação
if data_desfiliacao and data_desfiliacao < data_filiacao:
filiacoes = Filiacao.objects.filter(
parlamentar=parlamentar)
return self.render_to_response(
{'parlamentar': parlamentar,
'filiacoes': filiacoes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id,
'mensagem_erro': "A data de filiação não pode\
anterior à data de desfiliação"})
mensagem = "A data de filiação não pode\
anterior à data de desfiliação"
return self.error_message(parlamentar, form, mensagem)
# Esse bloco garante que não haverá intersecção entre os
# períodos de filiação
todas_filiacoes = candidato_filiado
for i in range(len(todas_filiacoes)):
data_init = todas_filiacoes[i].data
data_fim = todas_filiacoes[i].data_desfiliacao
if data_filiacao >= data_init and data_filiacao < data_fim:
mensagem = "A data de filiação e\
desfiliação não podem estar no intervalo\
de outro período de filiação"
return self.error_message(parlamentar, form, mensagem)
if (data_desfiliacao and
data_desfiliacao < data_fim and
data_desfiliacao > data_init):
mensagem = "A data de filiação e\
desfiliação não podem estar no intervalo\
de outro período de filiação"
return self.error_message(parlamentar, form, mensagem)
# Salva a nova filiação caso tudo esteja correto
else:
filiacao = form.save(commit=False)
filiacao.parlamentar = parlamentar
@ -838,15 +861,8 @@ class FiliacaoView(FormMixin, GenericView):
else:
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
filiacoes = Filiacao.objects.filter(
parlamentar=parlamentar)
return self.render_to_response(
{'parlamentar': parlamentar,
'filiacoes': filiacoes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id})
mensagem = ""
return self.error_message(parlamentar, form, mensagem)
class FiliacaoEditView(FormMixin, GenericView):
@ -866,17 +882,90 @@ class FiliacaoEditView(FormMixin, GenericView):
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
def error_message(self, parlamentar, form, mensagem):
return self.render_to_response(
{'form': form,
'parlamentar': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id,
'mensagem_erro': mensagem})
def post(self, request, *args, **kwargs):
filiacao = Filiacao.objects.get(id=kwargs['dk'])
form = FiliacaoEditForm(request.POST, instance=filiacao)
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
if form.is_valid():
data_filiacao = form.cleaned_data['data']
data_desfiliacao = form.cleaned_data['data_desfiliacao']
filiacao = form.save(commit=False)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
candidato_filiado = Filiacao.objects.filter(
parlamentar=parlamentar)
candidato_nao_desfiliou = Filiacao.objects.filter(
parlamentar=parlamentar,
data_desfiliacao=None)
# Vê se o candidato já se filiou alguma vez a algum partido
if not candidato_filiado:
filiacao = form.save(commit=False)
filiacao.parlamentar = parlamentar
filiacao.save()
return self.form_valid(form)
else:
# Dá erro caso não tenha se desfiliado do anterior
if candidato_nao_desfiliou:
mensagem = "Você não pode se filiar a algum partido\
sem antes se desfiliar do partido anterior"
return self.error_message(parlamentar, form, mensagem)
# Dá erro caso a data de desfiliação seja anterior a de
# filiação
if data_desfiliacao and data_desfiliacao < data_filiacao:
mensagem = "A data de filiação não pode\
anterior à data de desfiliação"
return self.error_message(parlamentar, form, mensagem)
# Esse bloco garante que não haverá intersecção entre os
# períodos de filiação
todas_filiacoes = candidato_filiado
id_filiacao_atual = int(kwargs['dk'])
for i in range(len(todas_filiacoes)):
if todas_filiacoes[i].id != id_filiacao_atual:
data_init = todas_filiacoes[i].data
data_fim = todas_filiacoes[i].data_desfiliacao
if (data_filiacao >= data_init and
data_filiacao < data_fim):
mensagem = "A data de filiação e\
desfiliação não podem estar no intervalo\
de outro período de filiação"
return self.error_message(parlamentar,
form,
mensagem)
if (data_desfiliacao and
data_desfiliacao < data_fim and
data_desfiliacao > data_init):
mensagem = "A data de filiação e\
desfiliação não podem estar no intervalo\
de outro período de filiação"
return self.error_message(parlamentar,
form,
mensagem)
if 'Salvar' in request.POST:
filiacao.save()
elif 'Excluir' in request.POST:
filiacao.delete()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,

2
templates/parlamentares/parlamentares_filiacao_edit.html

@ -16,6 +16,8 @@
{% endblock %}
{% block detail_content %}
{% if mensagem_erro %} <h5 align="center"><font color="#FF0000">{{ mensagem_erro }}</font></h5> {% endif %}
{% crispy form %}
{% endblock detail_content %}

Loading…
Cancel
Save