From e977250157101d1116a2eda5fb1a2aa89a1837cf Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 15 Mar 2016 16:18:01 -0300 Subject: [PATCH 1/7] Refatora parlamentares --- parlamentares/forms.py | 126 ++++++++ parlamentares/views.py | 642 +++++++++++++++-------------------------- 2 files changed, 361 insertions(+), 407 deletions(-) diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 9faa5df27..58b68bf05 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -266,6 +266,66 @@ class FiliacaoForm(ModelForm): 'data', 'data_desfiliacao'] + # def clean(self): + # cleaned_data = super(FiliacaoForm, self).clean() + # + # data_filiacao = cleaned_data['data'] + # data_desfiliacao = 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") + # raise forms.ValidationError(error_msg) + # return cleaned_data + # + # filiacao = self.instance + # parlamentar = filiacao.parlamentar + # + # # 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() + # + # # Nenhuma filiacao + # if not todas_filiacoes: + # return cleaned_data + # + # 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: + # raise forms.ValidationError(error_msg) + # + def __init__(self, *args, **kwargs): row1 = crispy_layout_mixin.to_row( @@ -293,3 +353,69 @@ class FiliacaoEditForm(FiliacaoForm): HTML(' '), Submit('excluir', 'Excluir', css_class='btn btn-primary')]) + + # def clean(self): + # cleaned_data = super(FiliacaoEditForm, self).clean() + # + # data_filiacao = cleaned_data['data'] + # data_desfiliacao = 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") + # raise forms.ValidationError(error_msg) + # + # return cleaned_data + # + # filiacao = self.instance + # parlamentar = Parlamentar.objects.get(pk=self.kwargs['pk']) + # + # # 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() + # + # # ainda filiado + # for f in todas_filiacoes: + # if not f.data_desfiliacao: + # error_msg = _("O parlamentar não pode se filiar a algum partido \ + # sem antes se desfiliar do partido anterior") + # raise forms.ValidationError(error_msg) + # + # # Esse bloco garante que não haverá intersecção entre os + # # períodos de filiação + # 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: + # raise forms.ValidationError(error_msg) + # diff --git a/parlamentares/views.py b/parlamentares/views.py index bc612d0a6..2adf2e223 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -1,9 +1,10 @@ import os from django.contrib import messages -from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ -from django.views.generic import FormView +from django.views.generic import CreateView, FormView, UpdateView +from django.http import HttpResponseRedirect from crud.base import Crud @@ -105,171 +106,115 @@ class ParlamentaresView(FormView): 'parlamentares': parlamentares}) -class ParlamentaresCadastroView(FormView): +class ParlamentaresCadastroView(CreateView): template_name = "parlamentares/parlamentares_cadastro.html" - - 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) - - 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() - - 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): + form_class = ParlamentaresForm + model = Parlamentar + success_url = reverse_lazy('parlamentares') + + def get_context_data(self, **kwargs): + context = super(ParlamentaresCadastroView, self).get_context_data(**kwargs) + legislatura_id = self.kwargs['pk'] + # precisa de legislatura id? + context.update({'legislatura_id': legislatura_id}) + return context + + 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 HttpResponseRedirect(self.get_success_url()) + + +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-foto" 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 +280,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 +326,202 @@ 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}) + # precisa???? + 'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) + return context - def post(self, request, *args, **kwargs): - form = FiliacaoForm(request.POST) + def validate(self, form, parlamentar, filiacao): + from django.core.exceptions import ValidationError - if form.is_valid(): + data_filiacao = form.cleaned_data['data'] + data_desfiliacao = form.cleaned_data['data_desfiliacao'] - 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 - 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) - - 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() - return self.form_valid(form) - else: - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - mensagem = "" - return self.error_message( - parlamentar, form, mensagem, request) + # 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() -class FiliacaoEditView(FormView): - template_name = "parlamentares/parlamentares_filiacao_edit.html" + # # Nenhuma filiacao + # if not todas_filiacoes: + # return None - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('parlamentares_filiacao', kwargs={'pk': pk}) + for f in todas_filiacoes: + if not f.data_desfiliacao: + 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 - 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, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura_id}) + error_msg = None + for filiacoes in todas_filiacoes: + if filiacoes.id != id_filiacao_atual: - 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}) + data_init = filiacoes.data + data_fim = filiacoes.data_desfiliacao - def post(self, request, *args, **kwargs): - filiacao = Filiacao.objects.get(id=kwargs['dk']) - form = FiliacaoEditForm(request.POST, instance=filiacao) - parlamentar = Parlamentar.objects.get(id=kwargs['pk']) - - if form.is_valid(): - - data_filiacao = form.cleaned_data['data'] - data_desfiliacao = form.cleaned_data['data_desfiliacao'] + if data_init <= data_filiacao < data_fim: - 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 \ + error_msg = _("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) + break - if (data_desfiliacao and - data_desfiliacao < data_fim and - data_desfiliacao > data_init): + if (data_desfiliacao and + data_init < data_desfiliacao < data_fim): - mensagem = _("A data de filiação e \ + error_msg = _("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 \ + 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") - 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) + break + if error_msg: + messages.add_message(request, messages.ERROR, error_msg) + return False else: - return self.render_to_response( - {'form': form, - 'object': parlamentar, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura_id}) + return True + + + + def form_valid(self, form): + + if 'salvar' in self.request.POST: + filiacao = form.save(commit=False) + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + filiacao.parlamentar = parlamentar + + if not self.validate(form, parlamentar, filiacao): + return self.form_invalid(form) + + filiacao.save() + + return HttpResponseRedirect(self.get_success_url()) +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}) -class MandatoView(FormView): + 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, + # precisa de legislatura???? + 'legislatura_id': parlamentar.mandato_set.last( + ).legislatura_id}) + return context + + 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 + filiacao.save() + return HttpResponseRedirect(self.get_success_url()) + +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}) - - 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}) + # precisa de legislatura ? + #'legislatura_id': parlamentar.mandato_set.last().legislatura.id + } + ) + return context + + 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) + mandato = Mandato.objects.get(id=self.kwargs['dk']) + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + context.update( + {'object': parlamentar, + # precisa de legislatura_id ??? 'legislatura_id': parlamentar.mandato_set.last( ).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()) From 8140633b3091133387682a6c2aaf4c3709998fc2 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 16 Mar 2016 08:59:49 -0300 Subject: [PATCH 2/7] Refatora parlamentar --- parlamentares/forms.py | 126 ------------------------------- parlamentares/views.py | 163 ++++++++++++++++++++--------------------- 2 files changed, 79 insertions(+), 210 deletions(-) diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 58b68bf05..9faa5df27 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -266,66 +266,6 @@ class FiliacaoForm(ModelForm): 'data', 'data_desfiliacao'] - # def clean(self): - # cleaned_data = super(FiliacaoForm, self).clean() - # - # data_filiacao = cleaned_data['data'] - # data_desfiliacao = 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") - # raise forms.ValidationError(error_msg) - # return cleaned_data - # - # filiacao = self.instance - # parlamentar = filiacao.parlamentar - # - # # 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() - # - # # Nenhuma filiacao - # if not todas_filiacoes: - # return cleaned_data - # - # 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: - # raise forms.ValidationError(error_msg) - # - def __init__(self, *args, **kwargs): row1 = crispy_layout_mixin.to_row( @@ -353,69 +293,3 @@ class FiliacaoEditForm(FiliacaoForm): HTML(' '), Submit('excluir', 'Excluir', css_class='btn btn-primary')]) - - # def clean(self): - # cleaned_data = super(FiliacaoEditForm, self).clean() - # - # data_filiacao = cleaned_data['data'] - # data_desfiliacao = 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") - # raise forms.ValidationError(error_msg) - # - # return cleaned_data - # - # filiacao = self.instance - # parlamentar = Parlamentar.objects.get(pk=self.kwargs['pk']) - # - # # 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() - # - # # ainda filiado - # for f in todas_filiacoes: - # if not f.data_desfiliacao: - # error_msg = _("O parlamentar não pode se filiar a algum partido \ - # sem antes se desfiliar do partido anterior") - # raise forms.ValidationError(error_msg) - # - # # Esse bloco garante que não haverá intersecção entre os - # # períodos de filiação - # 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: - # raise forms.ValidationError(error_msg) - # diff --git a/parlamentares/views.py b/parlamentares/views.py index 2adf2e223..6eaf43373 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -2,9 +2,10 @@ import os from django.contrib import messages 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 CreateView, FormView, UpdateView -from django.http import HttpResponseRedirect from crud.base import Crud @@ -32,6 +33,67 @@ 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 f in todas_filiacoes: + if not f.data_desfiliacao: + 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" @@ -110,12 +172,14 @@ class ParlamentaresCadastroView(CreateView): template_name = "parlamentares/parlamentares_cadastro.html" form_class = ParlamentaresForm model = Parlamentar - success_url = reverse_lazy('parlamentares') + + def get_success_url(self): + return reverse('parlamentares') def get_context_data(self, **kwargs): - context = super(ParlamentaresCadastroView, self).get_context_data(**kwargs) + context = super(ParlamentaresCadastroView, self).get_context_data( + **kwargs) legislatura_id = self.kwargs['pk'] - # precisa de legislatura id? context.update({'legislatura_id': legislatura_id}) return context @@ -125,7 +189,7 @@ class ParlamentaresCadastroView(CreateView): mandato.parlamentar = form.instance mandato.legislatura = Legislatura.objects.get(id=self.kwargs['pk']) mandato.save() - return HttpResponseRedirect(self.get_success_url()) + return redirect(self.get_success_url()) class ParlamentaresEditarView(UpdateView): @@ -141,7 +205,7 @@ class ParlamentaresEditarView(UpdateView): elif 'excluir' in self.request.POST: Mandato.objects.get(parlamentar=parlamentar).delete() parlamentar.delete() - elif "remover-foto" in self.request.POST: + elif "remover" in self.request.POST: try: os.unlink(parlamentar.fotografia.path) except OSError: @@ -343,93 +407,22 @@ class FiliacaoView(CreateView): context.update( {'object': parlamentar, 'filiacoes': filiacoes, - # precisa???? 'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) return context - def validate(self, form, parlamentar, filiacao): - from django.core.exceptions import ValidationError - - 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() - - # # Nenhuma filiacao - # if not todas_filiacoes: - # return None - - for f in todas_filiacoes: - if not f.data_desfiliacao: - 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 - - - def form_valid(self, form): - if 'salvar' in self.request.POST: filiacao = form.save(commit=False) parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) filiacao.parlamentar = parlamentar - if not self.validate(form, parlamentar, filiacao): + if not validate(form, parlamentar, filiacao, self.request): return self.form_invalid(form) filiacao.save() - return HttpResponseRedirect(self.get_success_url()) + class FiliacaoEditView(UpdateView): template_name = "parlamentares/parlamentares_filiacao_edit.html" form_class = FiliacaoEditForm @@ -445,7 +438,6 @@ class FiliacaoEditView(UpdateView): parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) context.update( {'object': parlamentar, - # precisa de legislatura???? 'legislatura_id': parlamentar.mandato_set.last( ).legislatura_id}) return context @@ -457,9 +449,14 @@ class FiliacaoEditView(UpdateView): elif 'salvar' in self.request.POST: parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) filiacao.parlamentar = parlamentar + + if not validate(form, parlamentar, filiacao, self.request): + return self.form_invalid(form) + filiacao.save() return HttpResponseRedirect(self.get_success_url()) + class MandatoView(CreateView): template_name = "parlamentares/parlamentares_mandato.html" model = Mandato @@ -478,8 +475,7 @@ class MandatoView(CreateView): context.update( {'object': parlamentar, 'mandatos': mandatos, - # precisa de legislatura ? - #'legislatura_id': parlamentar.mandato_set.last().legislatura.id + 'legislatura_id': parlamentar.mandato_set.last().legislatura.id } ) return context @@ -509,9 +505,8 @@ class MandatoEditView(UpdateView): parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) context.update( {'object': parlamentar, - # precisa de legislatura_id ??? 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura_id}) + ).legislatura_id}) return context def form_valid(self, form): From eadbeb27f38ebe874ae4b37ed1aab72a67d6ae42 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 16 Mar 2016 09:14:41 -0300 Subject: [PATCH 3/7] =?UTF-8?q?Altera=20condi=C3=A7=C3=A3o=20de=20erro=20e?= =?UTF-8?q?m=20filia=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parlamentares/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/parlamentares/views.py b/parlamentares/views.py index 6eaf43373..d246425dc 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -49,8 +49,9 @@ def validate(form, parlamentar, filiacao, request): id_filiacao_atual = filiacao.pk todas_filiacoes = parlamentar.filiacao_set.all() - for f in todas_filiacoes: - if not f.data_desfiliacao: + 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) From 0439645a2116536c354cc0ef19db2fad270ad711 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 16 Mar 2016 09:19:52 -0300 Subject: [PATCH 4/7] Ordena legislatura em mandato --- parlamentares/forms.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 9faa5df27..786e2a1c3 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -8,7 +8,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, Mandato, Parlamentar, Legislatura class ParlamentaresListForm(forms.Form): @@ -163,6 +163,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', From 52514bbbc4b9bbb8502628b9067bcc76a10ec2e9 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 16 Mar 2016 09:27:41 -0300 Subject: [PATCH 5/7] Fix qa --- parlamentares/forms.py | 2 +- parlamentares/views.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 786e2a1c3..92bd3ae64 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -8,7 +8,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, Legislatura +from .models import Dependente, Filiacao, Legislatura, Mandato, Parlamentar class ParlamentaresListForm(forms.Form): diff --git a/parlamentares/views.py b/parlamentares/views.py index d246425dc..deacb89b2 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -502,7 +502,6 @@ class MandatoEditView(UpdateView): def get_context_data(self, **kwargs): context = super(MandatoEditView, self).get_context_data(**kwargs) - mandato = Mandato.objects.get(id=self.kwargs['dk']) parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) context.update( {'object': parlamentar, From e91b7e7c1a785a1675ad2227b8315b3947c30c3e Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 16 Mar 2016 09:43:02 -0300 Subject: [PATCH 6/7] Limite o tamanho da foto para 2mb --- parlamentares/forms.py | 10 ++++++++++ parlamentares/views.py | 1 + 2 files changed, 11 insertions(+) diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 92bd3ae64..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 _ @@ -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', diff --git a/parlamentares/views.py b/parlamentares/views.py index deacb89b2..1a5ab7c80 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -185,6 +185,7 @@ class ParlamentaresCadastroView(CreateView): return context def form_valid(self, form): + import ipdb; ipdb.set_trace() form.save() mandato = Mandato() mandato.parlamentar = form.instance From 55df6c2e5a051155a2fed42c3bd45fc119edbfc3 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Wed, 16 Mar 2016 10:51:38 -0300 Subject: [PATCH 7/7] Refatora parlamentares e norma --- norma/forms.py | 30 ++++++++--- norma/views.py | 118 +++++++++++++++-------------------------- parlamentares/views.py | 1 - sessao/views.py | 1 - 4 files changed, 67 insertions(+), 83 deletions(-) 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/views.py b/parlamentares/views.py index 1a5ab7c80..deacb89b2 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -185,7 +185,6 @@ class ParlamentaresCadastroView(CreateView): return context def form_valid(self, form): - import ipdb; ipdb.set_trace() form.save() mandato = Mandato() mandato.parlamentar = form.instance 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)