Browse Source

Merge pull request #269 from interlegis/267-refatoracao-2

267 - Refatoração de Parlamentares e Norma
pull/272/head
Edward 9 years ago
parent
commit
04d5cc9c7e
  1. 30
      norma/forms.py
  2. 86
      norma/views.py
  3. 19
      parlamentares/forms.py
  4. 567
      parlamentares/views.py
  5. 1
      sessao/views.py

30
norma/forms.py

@ -1,13 +1,14 @@
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Fieldset, Layout from crispy_forms.layout import Fieldset, Layout
from django import forms from django import forms
from django.core.exceptions import ValidationError from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
import crispy_layout_mixin import crispy_layout_mixin
from crispy_layout_mixin import form_actions from crispy_layout_mixin import form_actions
from materia.models import TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import RANGE_ANOS
from .models import NormaJuridica from .models import NormaJuridica
@ -89,16 +90,18 @@ class NormaJuridicaPesquisaForm(ModelForm):
class NormaJuridicaForm(ModelForm): class NormaJuridicaForm(ModelForm):
# Campos de MateriaLegislativa
tipo_materia = forms.ModelChoiceField( tipo_materia = forms.ModelChoiceField(
label='Matéria Legislativa', label='Matéria Legislativa',
required=False, required=False,
queryset=TipoMateriaLegislativa.objects.all(), queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione' empty_label='Selecione'
) )
numero_materia = forms.CharField(label='Número',
numero_materia = forms.CharField(label='Número', required=False) required=False)
ano_materia = forms.ChoiceField(label='Ano',
ano_materia = forms.CharField(label='Ano', required=False) required=False,
choices=RANGE_ANOS)
def clean_texto_integral(self): def clean_texto_integral(self):
texto_integral = self.cleaned_data.get('texto_integral', False) texto_integral = self.cleaned_data.get('texto_integral', False)
@ -130,6 +133,21 @@ class NormaJuridicaForm(ModelForm):
'texto_integral', 'texto_integral',
] ]
def clean(self):
data = super(NormaJuridicaForm, self).clean()
if self.cleaned_data['tipo_materia']:
try:
MateriaLegislativa.objects.get(
tipo=self.cleaned_data['tipo_materia'],
numero=self.cleaned_data['numero_materia'],
ano=self.cleaned_data['ano_materia'])
except ObjectDoesNotExist:
msg = 'Matéria adicionada não existe!'
raise forms.ValidationError(msg)
return data
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row( row1 = crispy_layout_mixin.to_row(

86
norma/views.py

@ -1,11 +1,9 @@
from datetime import datetime from datetime import datetime
from django.contrib import messages from django.core.urlresolvers import reverse_lazy
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import redirect from django.shortcuts import redirect
from django.views.generic import CreateView, FormView, ListView from django.views.generic import CreateView, FormView, ListView, UpdateView
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud.base import Crud, make_pagination from crud.base import Crud, make_pagination
@ -24,13 +22,8 @@ LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '')
class NormaPesquisaView(FormView): class NormaPesquisaView(FormView):
template_name = "norma/pesquisa.html" template_name = "norma/pesquisa.html"
success_url = "normajuridica:norma_pesquisa"
def get_success_url(self): form_class = NormaJuridicaPesquisaForm
return reverse('normajuridica:norma_pesquisa')
def get(self, request, *args, **kwargs):
form = NormaJuridicaPesquisaForm()
return self.render_to_response({'form': form})
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
form = NormaJuridicaPesquisaForm(request.POST) form = NormaJuridicaPesquisaForm(request.POST)
@ -120,74 +113,49 @@ class PesquisaNormaListView(ListView):
class NormaIncluirView(CreateView): class NormaIncluirView(CreateView):
template_name = "norma/normajuridica_incluir.html" template_name = "norma/normajuridica_incluir.html"
form_class = NormaJuridicaForm form_class = NormaJuridicaForm
success_url = reverse_lazy('normajuridica:list')
def get_success_url(self): def form_valid(self, form):
return reverse('normajuridica:list')
def get(self, request, *args, **kwargs):
form = NormaJuridicaForm()
return self.render_to_response({'form': form})
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
norma = form.save(commit=False) norma = form.save(commit=False)
norma.timestamp = datetime.now()
if form.cleaned_data['tipo_materia']: if form.cleaned_data['tipo_materia']:
try:
materia = MateriaLegislativa.objects.get( materia = MateriaLegislativa.objects.get(
tipo_id=form.cleaned_data['tipo_materia'], tipo_id=form.data['tipo_materia'],
numero=form.cleaned_data['numero_materia'], numero=form.data['numero_materia'],
ano=form.cleaned_data['ano_materia']) ano=form.data['ano_materia'])
except ObjectDoesNotExist:
msg = 'Matéria adicionada não existe!'
messages.add_message(request, messages.INFO, msg)
return self.render_to_response({'form': form})
else:
norma.materia = materia norma.materia = materia
norma.timestamp = datetime.now()
norma.save() norma.save()
return HttpResponseRedirect(self.get_success_url()) return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response({'form': form})
class NormaEditView(CreateView): class NormaEditView(UpdateView):
template_name = "norma/normajuridica_incluir.html" template_name = "norma/normajuridica_incluir.html"
form_class = NormaJuridicaForm form_class = NormaJuridicaForm
model = NormaJuridica
success_url = reverse_lazy('normajuridica:list')
def get(self, request, *args, **kwargs): def get_initial(self):
norma = NormaJuridica.objects.get(id=self.kwargs['pk']) data = super(NormaEditView, self).get_initial()
form = NormaJuridicaForm(instance=norma)
return self.render_to_response({'form': form})
def post(self, request, *args, **kwargs):
norma = NormaJuridica.objects.get(id=self.kwargs['pk']) norma = NormaJuridica.objects.get(id=self.kwargs['pk'])
form = NormaJuridicaForm(instance=norma, data=request.POST) if norma.materia:
data.update({
if form.is_valid(): 'tipo_materia': norma.materia.tipo,
if form.data['tipo_materia']: 'numero_materia': norma.materia.numero,
try: 'ano_materia': norma.materia.ano,
})
return data
def form_valid(self, form):
norma = form.save(commit=False)
norma.timestamp = datetime.now()
if form.cleaned_data['tipo_materia']:
materia = MateriaLegislativa.objects.get( materia = MateriaLegislativa.objects.get(
tipo_id=form.data['tipo_materia'], tipo_id=form.data['tipo_materia'],
numero=form.data['numero_materia'], numero=form.data['numero_materia'],
ano=form.data['ano_materia']) ano=form.data['ano_materia'])
except ObjectDoesNotExist:
msg = 'Matéria adicionada não existe!'
messages.add_message(request, messages.INFO, msg)
return self.render_to_response({'form': form})
else:
norma.materia = materia norma.materia = materia
norma = form.save(commit=False)
norma.timestamp = datetime.now()
norma.save() norma.save()
return HttpResponseRedirect(self.get_success_url()) return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response({'form': form})
def get_success_url(self):
return reverse('normajuridica:list')
class NormaTaView(IntegracaoTaView): class NormaTaView(IntegracaoTaView):

19
parlamentares/forms.py

@ -1,6 +1,7 @@
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Fieldset, Layout, Submit from crispy_forms.layout import HTML, Fieldset, Layout, Submit
from django import forms from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -8,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _
import crispy_layout_mixin import crispy_layout_mixin
from crispy_layout_mixin import form_actions from crispy_layout_mixin import form_actions
from .models import Dependente, Filiacao, Mandato, Parlamentar from .models import Dependente, Filiacao, Legislatura, Mandato, Parlamentar
class ParlamentaresListForm(forms.Form): class ParlamentaresListForm(forms.Form):
@ -30,6 +31,15 @@ class ParlamentaresForm (ModelForm):
) )
) )
def clean_fotografia(self):
fotografia = self.cleaned_data.get('fotografia', False)
if fotografia:
if fotografia.size > 2*1024*1024:
raise ValidationError('Imagem muito grande. ( > 2mb )')
return fotografia
else:
raise ValidationError('Não foi possível salvar a imagem.')
class Meta: class Meta:
model = Parlamentar model = Parlamentar
fields = ['nome_parlamentar', fields = ['nome_parlamentar',
@ -163,6 +173,13 @@ class ParlamentaresEditForm(ParlamentaresForm):
class MandatoForm(ModelForm): class MandatoForm(ModelForm):
legislatura = forms.ModelChoiceField(
label=_('Legislatura'),
required=False,
queryset=Legislatura.objects.all().order_by('-data_inicio'),
empty_label='----------',
)
class Meta: class Meta:
model = Mandato model = Mandato
fields = ['legislatura', fields = ['legislatura',

567
parlamentares/views.py

@ -1,9 +1,11 @@
import os import os
from django.contrib import messages from django.contrib import messages
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView from django.views.generic import CreateView, FormView, UpdateView
from crud.base import Crud from crud.base import Crud
@ -31,6 +33,68 @@ TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar') TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
def validate(form, parlamentar, filiacao, request):
data_filiacao = form.cleaned_data['data']
data_desfiliacao = form.cleaned_data['data_desfiliacao']
# Dá erro caso a data de desfiliação seja anterior a de filiação
if data_desfiliacao and data_desfiliacao < data_filiacao:
error_msg = _("A data de filiação não pode anterior \
à data de desfiliação")
messages.add_message(request, messages.ERROR, error_msg)
return False
# Esse bloco garante que não haverá intersecção entre os
# períodos de filiação
id_filiacao_atual = filiacao.pk
todas_filiacoes = parlamentar.filiacao_set.all()
for filiacoes in todas_filiacoes:
if (not filiacoes.data_desfiliacao and
filiacoes.id != id_filiacao_atual):
error_msg = _("O parlamentar não pode se filiar a algum partido \
sem antes se desfiliar do partido anterior")
messages.add_message(request, messages.ERROR, error_msg)
return False
error_msg = None
for filiacoes in todas_filiacoes:
if filiacoes.id != id_filiacao_atual:
data_init = filiacoes.data
data_fim = filiacoes.data_desfiliacao
if data_init <= data_filiacao < data_fim:
error_msg = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
break
if (data_desfiliacao and
data_init < data_desfiliacao < data_fim):
error_msg = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
break
if (data_desfiliacao and
data_filiacao <= data_init and
data_desfiliacao >= data_fim):
error_msg = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
break
if error_msg:
messages.add_message(request, messages.ERROR, error_msg)
return False
else:
return True
class ParlamentaresView(FormView): class ParlamentaresView(FormView):
template_name = "parlamentares/parlamentares_list.html" template_name = "parlamentares/parlamentares_list.html"
@ -105,171 +169,117 @@ class ParlamentaresView(FormView):
'parlamentares': parlamentares}) 'parlamentares': parlamentares})
class ParlamentaresCadastroView(FormView): class ParlamentaresCadastroView(CreateView):
template_name = "parlamentares/parlamentares_cadastro.html" template_name = "parlamentares/parlamentares_cadastro.html"
form_class = ParlamentaresForm
model = Parlamentar
def get_success_url(self): def get_success_url(self):
return reverse('parlamentares') return reverse('parlamentares')
def get(self, request, *args, **kwargs): def get_context_data(self, **kwargs):
form = ParlamentaresForm() context = super(ParlamentaresCadastroView, self).get_context_data(
**kwargs)
pk = kwargs['pk'] legislatura_id = self.kwargs['pk']
return self.render_to_response({'form': form, 'legislatura_id': pk}) context.update({'legislatura_id': legislatura_id})
return context
def post(self, request, *args, **kwargs):
form = ParlamentaresForm(request.POST)
pk = kwargs['pk']
if form.is_valid():
parlamentar = form.save(commit=False)
if 'fotografia' in request.FILES:
parlamentar.fotografia = request.FILES['fotografia']
parlamentar.biografia = form.data['biografia']
parlamentar.save()
def form_valid(self, form):
form.save()
mandato = Mandato() mandato = Mandato()
mandato.parlamentar = parlamentar mandato.parlamentar = form.instance
mandato.legislatura = Legislatura.objects.get(id=pk) mandato.legislatura = Legislatura.objects.get(id=self.kwargs['pk'])
mandato.save() mandato.save()
return self.form_valid(form) return redirect(self.get_success_url())
else:
return self.render_to_response(
{'form': form, 'legislatura_id': pk})
class ParlamentaresEditarView(FormView): class ParlamentaresEditarView(UpdateView):
template_name = "parlamentares/parlamentares_cadastro.html" template_name = "parlamentares/parlamentares_cadastro.html"
form_class = ParlamentaresEditForm
def get_success_url(self): model = Parlamentar
return reverse('parlamentares') success_url = reverse_lazy('parlamentares')
def get(self, request, *args, **kwargs): def form_valid(self, form):
pk = kwargs['pk'] parlamentar = form.instance
parlamentar = Parlamentar.objects.get(pk=pk) if 'salvar' in self.request.POST:
form = ParlamentaresEditForm(instance=parlamentar) form.save()
return self.render_to_response( elif 'excluir' in self.request.POST:
{'form': form, 'object': parlamentar})
def post(self, request, *args, **kwargs):
pk = kwargs['pk']
parlamentar = Parlamentar.objects.get(pk=pk)
form = ParlamentaresEditForm(request.POST, instance=parlamentar)
if form.is_valid():
if 'salvar' in request.POST:
parlamentar = form.save(commit=False)
if 'fotografia' in request.FILES:
parlamentar.fotografia = request.FILES['fotografia']
parlamentar.biografia = form.data['biografia']
parlamentar.save()
elif 'excluir' in request.POST:
Mandato.objects.get(parlamentar=parlamentar).delete() Mandato.objects.get(parlamentar=parlamentar).delete()
parlamentar.delete() parlamentar.delete()
elif "remover" in request.POST: elif "remover" in self.request.POST:
try: try:
os.unlink(parlamentar.fotografia.path) os.unlink(parlamentar.fotografia.path)
except OSError: except OSError:
pass # Should log this error!!!!! pass # Should log this error!!!!!
parlamentar = form.save(commit=False)
parlamentar.fotografia = None parlamentar.fotografia = None
parlamentar.save() parlamentar.save()
return self.form_valid(form) return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response({'form': form})
class ParlamentaresDependentesView(FormView): class ParlamentaresDependentesView(CreateView):
template_name = "parlamentares/parlamentares_dependentes.html" template_name = "parlamentares/parlamentares_dependentes.html"
form_class = DependenteForm
model = Dependente
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('parlamentares_dependentes', kwargs={'pk': pk}) return reverse('parlamentares_dependentes', kwargs={'pk': pk})
def get(self, request, *args, **kwargs): def get_context_data(self, **kwargs):
pid = kwargs['pk'] context = super(ParlamentaresDependentesView, self).\
parlamentar = Parlamentar.objects.get(id=pid) get_context_data(**kwargs)
pk = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(pk=pk)
dependentes = Dependente.objects.filter( dependentes = Dependente.objects.filter(
parlamentar=parlamentar).order_by('nome', 'tipo') parlamentar=parlamentar).order_by('nome', 'tipo')
context.update({'object': parlamentar,
form = DependenteForm()
return self.render_to_response(
{'object': parlamentar,
'dependentes': dependentes, 'dependentes': dependentes,
'form': form, # precisa de legislatura_id???
'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) 'legislatura_id':
parlamentar.mandato_set.last().legislatura.id})
def post(self, request, *args, **kwargs): return context
form = DependenteForm(request.POST)
if form.is_valid(): def form_valid(self, form):
parlamentar_id = self.kwargs['pk']
dependente = form.save(commit=False) dependente = form.save(commit=False)
parlamentar = Parlamentar.objects.get(id=parlamentar_id)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
dependente.parlamentar = parlamentar dependente.parlamentar = parlamentar
dependente.save() dependente.save()
return self.form_valid(form) return HttpResponseRedirect(self.get_success_url())
else:
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
dependentes = Dependente.objects.filter(
parlamentar=parlamentar).order_by('nome', 'tipo')
return self.render_to_response(
{'object': parlamentar,
'dependentes': dependentes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id})
class ParlamentaresDependentesEditView(FormView): class ParlamentaresDependentesEditView(UpdateView):
template_name = "parlamentares/parlamentares_dependentes_edit.html" template_name = "parlamentares/parlamentares_dependentes_edit.html"
form_class = DependenteEditForm
model = Dependente
pk_url_kwarg = 'dk'
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('parlamentares_dependentes', kwargs={'pk': pk}) return reverse('parlamentares_dependentes', kwargs={'pk': pk})
def get(self, request, *args, **kwargs): def get_context_data(self, **kwargs):
dependente = Dependente.objects.get(id=kwargs['dk']) context = super(ParlamentaresDependentesEditView, self).\
parlamentar = Parlamentar.objects.get(id=kwargs['pk']) get_context_data(**kwargs)
form = DependenteEditForm(instance=dependente) parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
return self.render_to_response( context.update({
{'form': form,
'object': parlamentar, 'object': parlamentar,
'legislatura_id': dependente.parlamentar.mandato_set.last( 'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id}) ).legislatura_id})
return context
def post(self, request, *args, **kwargs): def form_valid(self, form):
dependente = Dependente.objects.get(id=kwargs['dk']) if 'salvar' in self.request.POST:
form = DependenteEditForm(request.POST, instance=dependente) form.save()
parlamentar = Parlamentar.objects.get(id=kwargs['pk']) elif 'excluir' in self.request.POST:
dependente = form.instance
if form.is_valid():
if 'salvar' in request.POST:
dependente.save()
elif 'excluir' in request.POST:
dependente.delete() dependente.delete()
return self.form_valid(form) return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': dependente.parlamentar.mandato_set.last(
).legislatura_id})
class MesaDiretoraView(FormView): class MesaDiretoraView(FormView):
template_name = "mesa_diretora/mesa_diretora.html" template_name = "mesa_diretora/mesa_diretora.html"
success_url = reverse_lazy('mesa_diretora')
def get_success_url(self):
return reverse('mesa_diretora')
# Essa função avisa quando se pode compor uma Mesa Legislativa) # Essa função avisa quando se pode compor uma Mesa Legislativa)
def validation(self, request): def validation(self, request):
@ -335,6 +345,7 @@ class MesaDiretoraView(FormView):
composicao.save() composicao.save()
return self.form_valid(form=None) return self.form_valid(form=None)
elif 'Excluir' in request.POST: elif 'Excluir' in request.POST:
if (not Legislatura.objects.all() or if (not Legislatura.objects.all() or
@ -380,320 +391,132 @@ class MesaDiretoraView(FormView):
}) })
class FiliacaoView(FormView): class FiliacaoView(CreateView):
template_name = "parlamentares/parlamentares_filiacao.html" template_name = "parlamentares/parlamentares_filiacao.html"
form_class = FiliacaoForm
model = Filiacao
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('parlamentares_filiacao', kwargs={'pk': pk}) return reverse('parlamentares_filiacao', kwargs={'pk': pk})
def get(self, request, *args, **kwargs): def get_context_data(self, **kwargs):
pid = kwargs['pk'] context = super(FiliacaoView, self).get_context_data(**kwargs)
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid) parlamentar = Parlamentar.objects.get(id=pid)
filiacoes = Filiacao.objects.filter(
parlamentar=parlamentar)
form = FiliacaoForm()
return self.render_to_response(
{'object': parlamentar,
'filiacoes': filiacoes,
'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, request):
filiacoes = Filiacao.objects.filter(parlamentar=parlamentar) filiacoes = Filiacao.objects.filter(parlamentar=parlamentar)
messages.add_message(request, messages.INFO, mensagem) context.update(
return self.render_to_response(
{'object': parlamentar, {'object': parlamentar,
'filiacoes': filiacoes, 'filiacoes': filiacoes,
'form': form, 'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
'legislatura_id': parlamentar.mandato_set.last( return context
).legislatura.id})
def post(self, request, *args, **kwargs):
form = FiliacaoForm(request.POST)
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 def form_valid(self, form):
if not candidato_filiado: if 'salvar' in self.request.POST:
filiacao = form.save(commit=False) filiacao = form.save(commit=False)
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
filiacao.parlamentar = parlamentar 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, request)
# Dá erro caso a data de desfiliação seja anterior a de if not validate(form, parlamentar, filiacao, self.request):
# filiação return self.form_invalid(form)
if data_desfiliacao and data_desfiliacao < data_filiacao:
mensagem = _("A data de filiação não pode ser \
anterior à data de desfiliação")
return self.error_message(
parlamentar, form, mensagem, request)
# 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, request)
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, request)
if (data_desfiliacao and
data_filiacao <= data_init and
data_desfiliacao >= 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, request)
# Salva a nova filiação caso tudo esteja correto
else:
filiacao = form.save(commit=False)
filiacao.parlamentar = parlamentar
filiacao.save() filiacao.save()
return self.form_valid(form) return HttpResponseRedirect(self.get_success_url())
else:
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mensagem = ""
return self.error_message(
parlamentar, form, mensagem, request)
class FiliacaoEditView(FormView): class FiliacaoEditView(UpdateView):
template_name = "parlamentares/parlamentares_filiacao_edit.html" template_name = "parlamentares/parlamentares_filiacao_edit.html"
form_class = FiliacaoEditForm
model = Filiacao
pk_url_kwarg = 'dk'
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('parlamentares_filiacao', kwargs={'pk': pk}) return reverse('parlamentares_filiacao', kwargs={'pk': pk})
def get(self, request, *args, **kwargs): def get_context_data(self, **kwargs):
filiacao = Filiacao.objects.get(id=kwargs['dk']) context = super(FiliacaoEditView, self).get_context_data(**kwargs)
parlamentar = Parlamentar.objects.get(id=kwargs['pk']) parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
form = FiliacaoEditForm(instance=filiacao) context.update(
return self.render_to_response( {'object': parlamentar,
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
def error_message(self, parlamentar, form, mensagem, request):
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last( 'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id}) ).legislatura_id})
return context
def post(self, request, *args, **kwargs): def form_valid(self, form):
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) filiacao = form.save(commit=False)
pid = kwargs['pk'] if 'excluir' in self.request.POST:
parlamentar = Parlamentar.objects.get(id=pid)
candidato_filiado = Filiacao.objects.filter(
parlamentar=parlamentar)
if 'excluir' in request.POST:
filiacao.delete() filiacao.delete()
return self.form_valid(form) elif 'salvar' in self.request.POST:
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
# 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.parlamentar = parlamentar
filiacao.save()
return self.form_valid(form)
else:
# 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, request)
# 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,
request)
if (data_desfiliacao and if not validate(form, parlamentar, filiacao, self.request):
data_desfiliacao < data_fim and return self.form_invalid(form)
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,
request)
if (data_desfiliacao and
data_filiacao <= data_init and
data_desfiliacao >= 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,
request)
if 'salvar' in request.POST:
filiacao.save() filiacao.save()
elif 'excluir' in request.POST: return HttpResponseRedirect(self.get_success_url())
filiacao.delete()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
class MandatoView(CreateView):
class MandatoView(FormView):
template_name = "parlamentares/parlamentares_mandato.html" template_name = "parlamentares/parlamentares_mandato.html"
model = Mandato
form_class = MandatoForm
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('parlamentares_mandato', kwargs={'pk': pk}) return reverse('parlamentares_mandato', kwargs={'pk': pk})
def get(self, request, *args, **kwargs): def get_context_data(self, **kwargs):
pid = kwargs['pk'] context = super(MandatoView, self).get_context_data(**kwargs)
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid) parlamentar = Parlamentar.objects.get(id=pid)
mandatos = Mandato.objects.filter( mandatos = Mandato.objects.filter(
parlamentar=parlamentar) parlamentar=parlamentar)
context.update(
form = MandatoForm()
return self.render_to_response(
{'object': parlamentar, {'object': parlamentar,
'mandatos': mandatos, 'mandatos': mandatos,
'form': form, 'legislatura_id': parlamentar.mandato_set.last().legislatura.id
'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) }
)
def post(self, request, *args, **kwargs): return context
form = MandatoForm(request.POST)
if form.is_valid():
mandato = form.save(commit=False)
pid = kwargs['pk'] def form_valid(self, form):
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid) parlamentar = Parlamentar.objects.get(id=pid)
mandato = form.save(commit=False)
mandato.parlamentar = parlamentar mandato.parlamentar = parlamentar
mandato.save() mandato.save()
return self.form_valid(form) return HttpResponseRedirect(self.get_success_url())
else:
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandatos = Mandato.objects.filter(
parlamentar=parlamentar)
return self.render_to_response(
{'object': parlamentar,
'mandatos': mandatos,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id})
class MandatoEditView(FormView): class MandatoEditView(UpdateView):
template_name = "parlamentares/parlamentares_mandato_edit.html" template_name = "parlamentares/parlamentares_mandato_edit.html"
model = Mandato
form_class = MandatoEditForm
pk_url_kwarg = 'dk'
def get_success_url(self): def get_success_url(self):
pk = self.kwargs['pk'] pk = self.kwargs['pk']
return reverse('parlamentares_mandato', kwargs={'pk': pk}) return reverse('parlamentares_mandato', kwargs={'pk': pk})
def get(self, request, *args, **kwargs): def get_context_data(self, **kwargs):
mandato = Mandato.objects.get(id=kwargs['dk']) context = super(MandatoEditView, self).get_context_data(**kwargs)
parlamentar = Parlamentar.objects.get(id=kwargs['pk']) parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
form = MandatoEditForm(instance=mandato) context.update(
return self.render_to_response( {'object': parlamentar,
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last( 'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id}) ).legislatura_id})
return context
def post(self, request, *args, **kwargs): def form_valid(self, form):
mandato = Mandato.objects.get(id=kwargs['dk']) form = self.get_form()
form = MandatoEditForm(request.POST, instance=mandato) parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
parlamentar = Parlamentar.objects.get(id=kwargs['pk']) if 'salvar' in self.request.POST:
mandato = form.save(commit=False)
if form.is_valid(): mandato.parlamentar = parlamentar
if 'salvar' in request.POST:
mandato.save() mandato.save()
elif 'excluir' in request.POST: elif 'excluir' in self.request.POST:
mandato.delete() form.instance.delete()
return self.form_valid(form)
else: return HttpResponseRedirect(self.get_success_url())
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})

1
sessao/views.py

@ -2053,7 +2053,6 @@ class VotacaoExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView):
yield tipo yield tipo
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
# import ipdb; ipdb.set_trace()
self.object = self.get_object() self.object = self.get_object()
context = self.get_context_data(object=self.object) context = self.get_context_data(object=self.object)

Loading…
Cancel
Save