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 () {