From bd504987ba45aa4e6e0084a706f0baaf3d2078d4 Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Tue, 19 Dec 2017 18:09:10 -0200 Subject: [PATCH] =?UTF-8?q?trata=20form=5Finvalid=20para=20conf=20de=20rec?= =?UTF-8?q?eb=20de=20proposi=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/forms.py | 18 ++++-------------- sapl/materia/views.py | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 0ea81f1a8..bf700de71 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -156,14 +156,14 @@ class MateriaLegislativaForm(ModelForm): data_origem_externa = cleaned_data['data_origem_externa'] if ano_origem_externa and data_origem_externa and \ - ano_origem_externa != data_origem_externa.year: + ano_origem_externa != data_origem_externa.year: raise ValidationError("O ano de origem externa da matéria não " "pode ser diferente do ano na data de " "origem externa") - return cleaned_data + class UnidadeTramitacaoForm(ModelForm): class Meta: @@ -1228,7 +1228,7 @@ class ProposicaoForm(forms.ModelForm): return inst -class DevolverProposicaoForm(ProposicaoForm): +class DevolverProposicaoForm(forms.ModelForm): justificativa_devolucao = forms.CharField( required=False, widget=widgets.Textarea(attrs={'rows': 5})) @@ -1242,7 +1242,7 @@ class DevolverProposicaoForm(ProposicaoForm): def __init__(self, *args, **kwargs): # esta chamada isola o __init__ de ProposicaoForm - super(ProposicaoForm, self).__init__(*args, **kwargs) + super(DevolverProposicaoForm, self).__init__(*args, **kwargs) fields = [] fields.append( @@ -1263,15 +1263,6 @@ class DevolverProposicaoForm(ProposicaoForm): def clean(self): super(DevolverProposicaoForm, self).clean() - numeracao = sapl.base.models.AppConfig.attr('sequencia_numeracao') - - if not numeracao: - raise ValidationError("A sequência de numeração (por ano ou geral)" - " não foi configurada para a aplicação em " - "tabelas auxiliares") - - cd = ProposicaoForm.clean(self) - cd = self.cleaned_data if 'justificativa_devolucao' not in cd or\ @@ -1283,7 +1274,6 @@ class DevolverProposicaoForm(ProposicaoForm): @transaction.atomic def save(self, commit=False): - # TODO Implementar workflow entre protocolo e autores cd = self.cleaned_data self.instance.data_devolucao = timezone.now() diff --git a/sapl/materia/views.py b/sapl/materia/views.py index a6d11235e..cdd77cb07 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -9,6 +9,8 @@ from django.contrib.auth.decorators import permission_required from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse +from django.forms.forms import Form +from django.forms.utils import ErrorDict from django.http import HttpResponse, JsonResponse from django.http.response import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect @@ -533,6 +535,27 @@ class ConfirmarProposicao(PermissionRequiredForAppCrudMixin, UpdateView): forms.append(form(**self.get_form_kwargs())) return forms + def form_invalid(self, form): + # Só um form é enviado por vez mas podem existir invalidade em ambos. + # em caso de um form ser inválido e retornar para a tela dos + # formulários, o outro precisa ser renderizado, mas neste ponto por ser + # um POST só chega um form dada lógica no método acima get_form, + # assim o form_invalid cria o form alternativo e o insere para + # renderização do template_name definido nesta classe + + kwargs = { + 'initial': self.get_initial(), + 'prefix': self.get_prefix(), + 'instance': form.instance + } + + if isinstance(form, self.form_class[0]): + forms = [form, DevolverProposicaoForm(**kwargs)] + else: + forms = [ConfirmarProposicaoForm(**kwargs), form] + + return self.render_to_response(self.get_context_data(form=forms)) + class UnidadeTramitacaoCrud(CrudAux): model = UnidadeTramitacao @@ -830,7 +853,6 @@ class ReciboProposicaoView(TemplateView): base64_data = create_barcode(_hash, 100, 200) barcode = 'data:image/png;base64,{0}'.format(base64_data) - context.update({'proposicao': proposicao, 'hash': _hash, 'barcode': barcode})