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. 118
      norma/views.py
  3. 19
      parlamentares/forms.py
  4. 631
      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.layout import Fieldset, Layout
from django import forms
from django.core.exceptions import ValidationError
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.forms import ModelForm
from django.utils.safestring import mark_safe
import crispy_layout_mixin
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
@ -89,16 +90,18 @@ class NormaJuridicaPesquisaForm(ModelForm):
class NormaJuridicaForm(ModelForm):
# Campos de MateriaLegislativa
tipo_materia = forms.ModelChoiceField(
label='Matéria Legislativa',
required=False,
queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione'
)
numero_materia = forms.CharField(label='Número', required=False)
ano_materia = forms.CharField(label='Ano', required=False)
numero_materia = forms.CharField(label='Número',
required=False)
ano_materia = forms.ChoiceField(label='Ano',
required=False,
choices=RANGE_ANOS)
def clean_texto_integral(self):
texto_integral = self.cleaned_data.get('texto_integral', False)
@ -130,6 +133,21 @@ class NormaJuridicaForm(ModelForm):
'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):
row1 = crispy_layout_mixin.to_row(

118
norma/views.py

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

19
parlamentares/forms.py

@ -1,6 +1,7 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Fieldset, Layout, Submit
from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
@ -8,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _
import crispy_layout_mixin
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):
@ -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:
model = Parlamentar
fields = ['nome_parlamentar',
@ -163,6 +173,13 @@ class ParlamentaresEditForm(ParlamentaresForm):
class MandatoForm(ModelForm):
legislatura = forms.ModelChoiceField(
label=_('Legislatura'),
required=False,
queryset=Legislatura.objects.all().order_by('-data_inicio'),
empty_label='----------',
)
class Meta:
model = Mandato
fields = ['legislatura',

631
parlamentares/views.py

@ -1,9 +1,11 @@
import os
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.views.generic import FormView
from django.views.generic import CreateView, FormView, UpdateView
from crud.base import Crud
@ -31,6 +33,68 @@ TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
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):
template_name = "parlamentares/parlamentares_list.html"
@ -105,171 +169,117 @@ class ParlamentaresView(FormView):
'parlamentares': parlamentares})
class ParlamentaresCadastroView(FormView):
class ParlamentaresCadastroView(CreateView):
template_name = "parlamentares/parlamentares_cadastro.html"
form_class = ParlamentaresForm
model = Parlamentar
def get_success_url(self):
return reverse('parlamentares')
def get(self, request, *args, **kwargs):
form = ParlamentaresForm()
pk = kwargs['pk']
return self.render_to_response({'form': form, 'legislatura_id': pk})
def post(self, request, *args, **kwargs):
form = ParlamentaresForm(request.POST)
def get_context_data(self, **kwargs):
context = super(ParlamentaresCadastroView, self).get_context_data(
**kwargs)
legislatura_id = self.kwargs['pk']
context.update({'legislatura_id': legislatura_id})
return context
pk = kwargs['pk']
def form_valid(self, form):
form.save()
mandato = Mandato()
mandato.parlamentar = form.instance
mandato.legislatura = Legislatura.objects.get(id=self.kwargs['pk'])
mandato.save()
return redirect(self.get_success_url())
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()
mandato = Mandato()
mandato.parlamentar = parlamentar
mandato.legislatura = Legislatura.objects.get(id=pk)
mandato.save()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form, 'legislatura_id': pk})
class ParlamentaresEditarView(FormView):
class ParlamentaresEditarView(UpdateView):
template_name = "parlamentares/parlamentares_cadastro.html"
form_class = ParlamentaresEditForm
model = Parlamentar
success_url = reverse_lazy('parlamentares')
def form_valid(self, form):
parlamentar = form.instance
if 'salvar' in self.request.POST:
form.save()
elif 'excluir' in self.request.POST:
Mandato.objects.get(parlamentar=parlamentar).delete()
parlamentar.delete()
elif "remover" in self.request.POST:
try:
os.unlink(parlamentar.fotografia.path)
except OSError:
pass # Should log this error!!!!!
parlamentar.fotografia = None
parlamentar.save()
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('parlamentares')
def get(self, request, *args, **kwargs):
pk = kwargs['pk']
parlamentar = Parlamentar.objects.get(pk=pk)
form = ParlamentaresEditForm(instance=parlamentar)
return self.render_to_response(
{'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()
parlamentar.delete()
elif "remover" in request.POST:
try:
os.unlink(parlamentar.fotografia.path)
except OSError:
pass # Should log this error!!!!!
parlamentar = form.save(commit=False)
parlamentar.fotografia = None
parlamentar.save()
return self.form_valid(form)
else:
return self.render_to_response({'form': form})
class ParlamentaresDependentesView(FormView):
class ParlamentaresDependentesView(CreateView):
template_name = "parlamentares/parlamentares_dependentes.html"
form_class = DependenteForm
model = Dependente
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_dependentes', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
def get_context_data(self, **kwargs):
context = super(ParlamentaresDependentesView, self).\
get_context_data(**kwargs)
pk = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(pk=pk)
dependentes = Dependente.objects.filter(
parlamentar=parlamentar).order_by('nome', 'tipo')
form = DependenteForm()
return self.render_to_response(
{'object': parlamentar,
'dependentes': dependentes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
def post(self, request, *args, **kwargs):
form = DependenteForm(request.POST)
if form.is_valid():
dependente = form.save(commit=False)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
dependente.parlamentar = parlamentar
dependente.save()
return self.form_valid(form)
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):
context.update({'object': parlamentar,
'dependentes': dependentes,
# precisa de legislatura_id???
'legislatura_id':
parlamentar.mandato_set.last().legislatura.id})
return context
def form_valid(self, form):
parlamentar_id = self.kwargs['pk']
dependente = form.save(commit=False)
parlamentar = Parlamentar.objects.get(id=parlamentar_id)
dependente.parlamentar = parlamentar
dependente.save()
return HttpResponseRedirect(self.get_success_url())
class ParlamentaresDependentesEditView(UpdateView):
template_name = "parlamentares/parlamentares_dependentes_edit.html"
form_class = DependenteEditForm
model = Dependente
pk_url_kwarg = 'dk'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_dependentes', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
dependente = Dependente.objects.get(id=kwargs['dk'])
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
form = DependenteEditForm(instance=dependente)
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': dependente.parlamentar.mandato_set.last(
).legislatura_id})
def post(self, request, *args, **kwargs):
dependente = Dependente.objects.get(id=kwargs['dk'])
form = DependenteEditForm(request.POST, instance=dependente)
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
if form.is_valid():
if 'salvar' in request.POST:
dependente.save()
elif 'excluir' in request.POST:
dependente.delete()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': dependente.parlamentar.mandato_set.last(
).legislatura_id})
def get_context_data(self, **kwargs):
context = super(ParlamentaresDependentesEditView, self).\
get_context_data(**kwargs)
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
context.update({
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
return context
def form_valid(self, form):
if 'salvar' in self.request.POST:
form.save()
elif 'excluir' in self.request.POST:
dependente = form.instance
dependente.delete()
return HttpResponseRedirect(self.get_success_url())
class MesaDiretoraView(FormView):
template_name = "mesa_diretora/mesa_diretora.html"
def get_success_url(self):
return reverse('mesa_diretora')
success_url = reverse_lazy('mesa_diretora')
# Essa função avisa quando se pode compor uma Mesa Legislativa)
def validation(self, request):
@ -335,6 +345,7 @@ class MesaDiretoraView(FormView):
composicao.save()
return self.form_valid(form=None)
elif 'Excluir' in request.POST:
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"
form_class = FiliacaoForm
model = Filiacao
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_filiacao', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
pid = kwargs['pk']
def get_context_data(self, **kwargs):
context = super(FiliacaoView, self).get_context_data(**kwargs)
pid = self.kwargs['pk']
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)
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
context.update(
{'object': parlamentar,
'filiacoes': filiacoes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).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']
'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
return context
def form_valid(self, form):
if 'salvar' in self.request.POST:
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, request)
# 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 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)
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
filiacao.parlamentar = parlamentar
if (data_desfiliacao and
data_desfiliacao < data_fim and
data_desfiliacao > data_init):
if not validate(form, parlamentar, filiacao, self.request):
return self.form_invalid(form)
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)
filiacao.save()
return HttpResponseRedirect(self.get_success_url())
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()
return self.form_valid(form)
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"
form_class = FiliacaoEditForm
model = Filiacao
pk_url_kwarg = 'dk'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_filiacao', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
filiacao = Filiacao.objects.get(id=kwargs['dk'])
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
form = FiliacaoEditForm(instance=filiacao)
return self.render_to_response(
{'form': form,
'object': parlamentar,
def get_context_data(self, **kwargs):
context = super(FiliacaoEditView, self).get_context_data(**kwargs)
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
context.update(
{'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
return context
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})
def form_valid(self, form):
filiacao = form.save(commit=False)
if 'excluir' in self.request.POST:
filiacao.delete()
elif 'salvar' in self.request.POST:
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
filiacao.parlamentar = parlamentar
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 not validate(form, parlamentar, filiacao, self.request):
return self.form_invalid(form)
if form.is_valid():
filiacao.save()
return HttpResponseRedirect(self.get_success_url())
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)
if 'excluir' in request.POST:
filiacao.delete()
return self.form_valid(form)
# 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 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
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)
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,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
class MandatoView(FormView):
class MandatoView(CreateView):
template_name = "parlamentares/parlamentares_mandato.html"
model = Mandato
form_class = MandatoForm
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_mandato', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
pid = kwargs['pk']
def get_context_data(self, **kwargs):
context = super(MandatoView, self).get_context_data(**kwargs)
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandatos = Mandato.objects.filter(
parlamentar=parlamentar)
form = MandatoForm()
return self.render_to_response(
context.update(
{'object': parlamentar,
'mandatos': mandatos,
'form': form,
'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
'legislatura_id': parlamentar.mandato_set.last().legislatura.id
}
)
return context
def post(self, request, *args, **kwargs):
form = MandatoForm(request.POST)
if form.is_valid():
mandato = form.save(commit=False)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandato.parlamentar = parlamentar
mandato.save()
return self.form_valid(form)
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})
def form_valid(self, form):
pid = self.kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandato = form.save(commit=False)
mandato.parlamentar = parlamentar
mandato.save()
return HttpResponseRedirect(self.get_success_url())
class MandatoEditView(FormView):
class MandatoEditView(UpdateView):
template_name = "parlamentares/parlamentares_mandato_edit.html"
model = Mandato
form_class = MandatoEditForm
pk_url_kwarg = 'dk'
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_mandato', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
mandato = Mandato.objects.get(id=kwargs['dk'])
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
form = MandatoEditForm(instance=mandato)
return self.render_to_response(
{'form': form,
'object': parlamentar,
def get_context_data(self, **kwargs):
context = super(MandatoEditView, self).get_context_data(**kwargs)
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
context.update(
{'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
).legislatura_id})
return context
def post(self, request, *args, **kwargs):
mandato = Mandato.objects.get(id=kwargs['dk'])
form = MandatoEditForm(request.POST, instance=mandato)
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
if form.is_valid():
if 'salvar' in request.POST:
mandato.save()
elif 'excluir' in request.POST:
mandato.delete()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
def form_valid(self, form):
form = self.get_form()
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk'])
if 'salvar' in self.request.POST:
mandato = form.save(commit=False)
mandato.parlamentar = parlamentar
mandato.save()
elif 'excluir' in self.request.POST:
form.instance.delete()
return HttpResponseRedirect(self.get_success_url())

1
sessao/views.py

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

Loading…
Cancel
Save