From b92fc979895f54215d6e0e532fa566951e2cf6a8 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Thu, 3 Aug 2017 11:46:17 -0300 Subject: [PATCH] =?UTF-8?q?Mudan=C3=A7as=20significativas=20no=20c=C3=B3di?= =?UTF-8?q?go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/forms.py | 17 ++++++--- sapl/materia/views.py | 47 +++++++++++++----------- sapl/templates/materia/autoria_form.html | 14 +++---- 3 files changed, 43 insertions(+), 35 deletions(-) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index af8a82630..4a3018735 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -719,13 +719,20 @@ class AutoriaForm(ModelForm): if self.errors: return self.errors - if not self.instance.pk: - if Autoria.objects.filter( - materia=self.instance.materia, - autor=self.cleaned_data['autor'], - ).exists(): + if Autoria.objects.filter( + materia=self.instance.materia, + autor=self.cleaned_data['autor'], + ).exists(): + if not self.instance.pk: msg = _('Esse Autor já foi cadastrado.') raise ValidationError(msg) + else: + autoria = Autoria.objects.get( + materia=self.instance.materia, + autor=self.cleaned_data['autor']) + if autoria != self.instance: + msg = _('Esse Autor já foi cadastrado.') + raise ValidationError(msg) return self.cleaned_data diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 5c15fae38..52d6891b1 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1211,32 +1211,17 @@ def atualizar_autores(request): except ObjectDoesNotExist: pass else: - manter_autor = False if 'tipo_autor' in request.GET and request.GET['tipo_autor']: tipo_autor = request.GET['tipo_autor'] autores = autores_ativos(materia, tipo=tipo_autor) - # Se já houver algum autor selecionado (ex: view de update) - # no campo correspondente e caso o TipoAutor selecionado - # seja o mesmo do autor que está aualmente marcado - # deve ser enviado um sinal (manter autor) para que o - # javascript mantenha este selecionado - if 'autor_id' in request.GET and request.GET['autor_id']: - try: - autor = Autor.objects.get(id=request.GET['autor_id']) - except ObjectDoesNotExist: - pass - else: - if autor.tipo.id == int(tipo_autor): - manter_autor = True - else: autores = autores_ativos(materia) + empty_option = [('', '---------')] autores_list = [(a.id, a.__str__()) for a in autores] - return JsonResponse({'lista_autores': autores_list, - 'manter_autor': manter_autor}) + return JsonResponse({'lista_autores': empty_option + autores_list}) return JsonResponse({}) @@ -1260,13 +1245,20 @@ class AutoriaCrud(MasterDetailCrud): materia = MateriaLegislativa.objects.get( id=int(kwargs['root_pk'])) - autores_ativos_list = autores_ativos(materia) + if context['form']['tipo_autor'].data: + autores_ativos_list = autores_ativos( + materia, + context['form']['tipo_autor'].data + ) + else: + autores_ativos_list = autores_ativos(materia) autores = [] for a in autores_ativos_list: autores.append([a.id, a.__str__()]) - context['form'].fields['autor'].choices = autores + empty_option = [('', '---------')] + context['form'].fields['autor'].choices = empty_option + autores return context class UpdateView(MasterDetailCrud.UpdateView): @@ -1289,13 +1281,26 @@ class AutoriaCrud(MasterDetailCrud): materia = MateriaLegislativa.objects.get( id=int(kwargs['root_pk'])) - autores_ativos_list = autores_ativos(materia) + if context['form']['tipo_autor'].data is None: + autores_ativos_list = autores_ativos( + materia, + str(context['object'].autor.tipo.id)) + else: + if context['form']['tipo_autor'].data == '': + autores_ativos_list = autores_ativos( + materia) + else: + autores_ativos_list = autores_ativos( + materia, + context['form']['tipo_autor'].data) autores = [] for a in autores_ativos_list: autores.append([a.id, a.__str__()]) - context['form'].fields['autor'].choices = autores + empty_option = [('', '---------')] + context['form'].fields['autor'].choices = empty_option + autores + return context class ListView(MasterDetailCrud.ListView): diff --git a/sapl/templates/materia/autoria_form.html b/sapl/templates/materia/autoria_form.html index 3c1f3f587..1241092db 100644 --- a/sapl/templates/materia/autoria_form.html +++ b/sapl/templates/materia/autoria_form.html @@ -10,13 +10,12 @@ function atualizar_autores() { var tipo_autor = $("#id_tipo_autor").val(); var materia_id = {{ root_pk }}; - var autor_id = $("#id_autor").val(); // Limpa a listagem para atualizar $("#id_autor").find("option").remove(); $.get("/materia/autoria/atualizar-autores", - {tipo_autor: tipo_autor, materia_id: materia_id, autor_id: autor_id}, + {tipo_autor: tipo_autor, materia_id: materia_id}, function(data) { // Caso não venha nenhum dado da requisição, retorna null if ($.isEmptyObject(data)){ @@ -26,15 +25,12 @@ lista_autores = data['lista_autores']; // Atualiza a listagem de autores - $.each(lista_autores, function(index, value) { - $('#id_autor').append( - ''); + $.each(lista_autores, function(index, obj) { + $("#id_autor").append($("") + .attr("value", obj[0]) + .text(obj[1])); }); - if (data['manter_autor'] == true){ - $('#id_autor').val(autor_id); - } }); } $("#id_tipo_autor").change(function () {