diff --git a/norma/forms.py b/norma/forms.py index 4b4c850d3..2d16da2fb 100644 --- a/norma/forms.py +++ b/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( diff --git a/norma/views.py b/norma/views.py index 32f5eb9a5..8f97224f1 100644 --- a/norma/views.py +++ b/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): diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 9faa5df27..be49aab6a 100644 --- a/parlamentares/forms.py +++ b/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', diff --git a/parlamentares/views.py b/parlamentares/views.py index bc612d0a6..deacb89b2 100644 --- a/parlamentares/views.py +++ b/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()) diff --git a/sessao/views.py b/sessao/views.py index 70dc2aef2..9fdf858a8 100644 --- a/sessao/views.py +++ b/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)