From 37896db2dcce0fe291f89d52e8b66411e36d9974 Mon Sep 17 00:00:00 2001 From: Cesar Carvalho Date: Wed, 11 Sep 2019 17:02:49 -0300 Subject: [PATCH] =?UTF-8?q?Remove=20campo=20user=20do=20model=20Autor=20e?= =?UTF-8?q?=20retira=20refer=C3=AAncias=20a=20este=20campo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/views.py | 2 +- sapl/base/forms.py | 21 +++++++++++++++++++ .../base/migrations/0042_remove_autor_user.py | 19 +++++++++++++++++ sapl/base/models.py | 6 ------ sapl/base/views.py | 19 +++++++++++------ sapl/materia/views.py | 16 +++++++------- sapl/templates/base.html | 2 +- sapl/templates/materia/proposicao_detail.html | 1 + 8 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 sapl/base/migrations/0042_remove_autor_user.py diff --git a/sapl/api/views.py b/sapl/api/views.py index 9ddafb9ec..b9f0a2403 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -383,7 +383,7 @@ class _ProposicaoViewSet(): q = Q(data_recebimento__isnull=False, object_id__isnull=False) if not self.request.user.is_anonymous(): - q |= Q(autor__user=self.request.user) + q |= Q(autor__autoruser__user=self.request.user) qs = qs.filter(q) return qs diff --git a/sapl/base/forms.py b/sapl/base/forms.py index eeed61860..deba48775 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -1947,4 +1947,25 @@ class AutorUserForm(ModelForm): user = User.objects.get(username=cd['username']) autor = cd['autor'] autor_user = AutorUser.objects.create(autor=autor, user=user) + + + #################################### + # TODO: Isto é necessário? + # if not autor.tipo.content_type: + # autor.content_type = None + # autor.object_id = None + # autor.autor_related = None + # else: + # autor.autor_related = autor.tipo.content_type.model_class( + # ).objects.get(pk=self.cleaned_data['autor_related']) + # autor.nome = str(autor.autor_related) + + # autor.save() + #################################### + + # FIXME melhorar captura de grupo de Autor, levando em conta, + # no mínimo, a tradução. + grupo = Group.objects.filter(name='Autor')[0] + user.groups.add(grupo) + return autor_user \ No newline at end of file diff --git a/sapl/base/migrations/0042_remove_autor_user.py b/sapl/base/migrations/0042_remove_autor_user.py new file mode 100644 index 000000000..990c0313f --- /dev/null +++ b/sapl/base/migrations/0042_remove_autor_user.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-09-11 20:01 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0041_auto_20190911_1541'), + ] + + operations = [ + migrations.RemoveField( + model_name='autor', + name='user', + ), + ] diff --git a/sapl/base/models.py b/sapl/base/models.py index 3b64fb33f..999215440 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -212,10 +212,6 @@ class TipoAutor(models.Model): @reversion.register() class Autor(models.Model): - user = models.OneToOneField(get_settings_auth_user_model(), - on_delete=models.SET_NULL, - null=True) - tipo = models.ForeignKey(TipoAutor, verbose_name=_('Tipo do Autor'), on_delete=models.PROTECT) @@ -246,8 +242,6 @@ class Autor(models.Model): return '{} - {}'.format(self.nome, self.cargo) else: return str(self.nome) - if self.user: - return str(self.user.username) return '?' diff --git a/sapl/base/views.py b/sapl/base/views.py index a95a9c7e8..546ce97ff 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -1641,12 +1641,6 @@ def get_estatistica(request): return JsonResponse(json_dict) -def deleta_autoruser(request): - pk = int(request.GET['pk']) - AutorUser.objects.get(pk=pk).delete() - return JsonResponse({}) - - class ListarMandatoSemDataInicioView(PermissionRequiredMixin, ListView): model = get_user_model() template_name = 'base/mandato_sem_data_inicio.html' @@ -2284,6 +2278,19 @@ class RelatorioNormasPorAutorView(RelatorioMixin, FilterView): return context +def deleta_autoruser(request): + pk = int(request.GET['pk']) + autor_user = AutorUser.objects.get(pk=pk) + + # FIXME melhorar captura de grupo de Autor, levando em conta, + # no mínimo, a tradução. + grupo = Group.objects.filter(name='Autor')[0] + autor_user.user.groups.remove(grupo) + + autor_user.delete() + return JsonResponse({}) + + class AutorUserFormView(FormView): form_class = AutorUserForm template_name = 'base/autoruser_form.html' diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 94f10f539..d7c291712 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -108,7 +108,7 @@ def proposicao_texto(request, pk): if proposicao.texto_original: if (not proposicao.data_recebimento and - proposicao.autor.user_id != request.user.id): + not proposicao.autor.autoruser_set.filter(user=request.user).exists()): logger.error("user=" + username + ". Usuário ({}) não tem permissão para acessar o texto original." .format(request.user.id)) messages.error(request, _( @@ -314,7 +314,7 @@ class ProposicaoTaView(IntegracaoTaView): proposicao = get_object_or_404(self.model, pk=kwargs['pk']) if not proposicao.data_envio and\ - request.user != proposicao.autor.user: + proposicao.autor.autoruser_set.filter(user=request.user).exists(): raise Http404() return IntegracaoTaView.get(self, request, *args, **kwargs) @@ -586,7 +586,7 @@ class RetornarProposicao(UpdateView): "user=" + username + ". Objeto Proposicao com id={} não encontrado.".format(kwargs['pk'])) raise Http404() - if p.autor.user != request.user: + if not p.autor.autoruser_set.filter(user=request.user).exists(): self.logger.error( "user=" + username + ". Usuário ({}) sem acesso a esta opção.".format(request.user)) messages.error( @@ -728,7 +728,7 @@ class UnidadeTramitacaoCrud(CrudAux): class ProposicaoCrud(Crud): model = Proposicao help_topic = 'proposicao' - container_field = 'autor__user' + container_field = 'autor__autoruser__user' class BaseMixin(Crud.BaseMixin): list_field_names = ['data_envio', 'data_recebimento', 'descricao', @@ -892,7 +892,7 @@ class ProposicaoCrud(Crud): if not self.has_permission(): return self.handle_no_permission() - if p.autor.user != request.user: + if not p.autor.autoruser_set.filter(user=request.user).exists(): if not p.data_envio and not p.data_devolucao: raise Http404() @@ -1107,9 +1107,9 @@ class ReciboProposicaoView(TemplateView): if not self.request.user.has_perms(perms): return False - return (Proposicao.objects.filter( - id=self.kwargs['pk'], - autor__user_id=self.request.user.id).exists()) + prop = Proposicao.objects.get( + id=self.kwargs['pk']) + return prop.autor.autoruser_set.filter(user=self.request.user).exists() def get_context_data(self, **kwargs): context = super(ReciboProposicaoView, self).get_context_data( diff --git a/sapl/templates/base.html b/sapl/templates/base.html index 000a74cdf..3c937d3ed 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -63,7 +63,7 @@