Browse Source

Remove campo user do model Autor e retira referências a este campo

pull/2962/head
Cesar Carvalho 6 years ago
parent
commit
37896db2dc
  1. 2
      sapl/api/views.py
  2. 21
      sapl/base/forms.py
  3. 19
      sapl/base/migrations/0042_remove_autor_user.py
  4. 6
      sapl/base/models.py
  5. 19
      sapl/base/views.py
  6. 16
      sapl/materia/views.py
  7. 2
      sapl/templates/base.html
  8. 1
      sapl/templates/materia/proposicao_detail.html

2
sapl/api/views.py

@ -383,7 +383,7 @@ class _ProposicaoViewSet():
q = Q(data_recebimento__isnull=False, object_id__isnull=False) q = Q(data_recebimento__isnull=False, object_id__isnull=False)
if not self.request.user.is_anonymous(): 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) qs = qs.filter(q)
return qs return qs

21
sapl/base/forms.py

@ -1947,4 +1947,25 @@ class AutorUserForm(ModelForm):
user = User.objects.get(username=cd['username']) user = User.objects.get(username=cd['username'])
autor = cd['autor'] autor = cd['autor']
autor_user = AutorUser.objects.create(autor=autor, user=user) 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 return autor_user

19
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',
),
]

6
sapl/base/models.py

@ -212,10 +212,6 @@ class TipoAutor(models.Model):
@reversion.register() @reversion.register()
class Autor(models.Model): 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'), tipo = models.ForeignKey(TipoAutor, verbose_name=_('Tipo do Autor'),
on_delete=models.PROTECT) on_delete=models.PROTECT)
@ -246,8 +242,6 @@ class Autor(models.Model):
return '{} - {}'.format(self.nome, self.cargo) return '{} - {}'.format(self.nome, self.cargo)
else: else:
return str(self.nome) return str(self.nome)
if self.user:
return str(self.user.username)
return '?' return '?'

19
sapl/base/views.py

@ -1641,12 +1641,6 @@ def get_estatistica(request):
return JsonResponse(json_dict) 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): class ListarMandatoSemDataInicioView(PermissionRequiredMixin, ListView):
model = get_user_model() model = get_user_model()
template_name = 'base/mandato_sem_data_inicio.html' template_name = 'base/mandato_sem_data_inicio.html'
@ -2284,6 +2278,19 @@ class RelatorioNormasPorAutorView(RelatorioMixin, FilterView):
return context 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): class AutorUserFormView(FormView):
form_class = AutorUserForm form_class = AutorUserForm
template_name = 'base/autoruser_form.html' template_name = 'base/autoruser_form.html'

16
sapl/materia/views.py

@ -108,7 +108,7 @@ def proposicao_texto(request, pk):
if proposicao.texto_original: if proposicao.texto_original:
if (not proposicao.data_recebimento and 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." logger.error("user=" + username + ". Usuário ({}) não tem permissão para acessar o texto original."
.format(request.user.id)) .format(request.user.id))
messages.error(request, _( messages.error(request, _(
@ -314,7 +314,7 @@ class ProposicaoTaView(IntegracaoTaView):
proposicao = get_object_or_404(self.model, pk=kwargs['pk']) proposicao = get_object_or_404(self.model, pk=kwargs['pk'])
if not proposicao.data_envio and\ if not proposicao.data_envio and\
request.user != proposicao.autor.user: proposicao.autor.autoruser_set.filter(user=request.user).exists():
raise Http404() raise Http404()
return IntegracaoTaView.get(self, request, *args, **kwargs) 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'])) "user=" + username + ". Objeto Proposicao com id={} não encontrado.".format(kwargs['pk']))
raise Http404() raise Http404()
if p.autor.user != request.user: if not p.autor.autoruser_set.filter(user=request.user).exists():
self.logger.error( self.logger.error(
"user=" + username + ". Usuário ({}) sem acesso a esta opção.".format(request.user)) "user=" + username + ". Usuário ({}) sem acesso a esta opção.".format(request.user))
messages.error( messages.error(
@ -728,7 +728,7 @@ class UnidadeTramitacaoCrud(CrudAux):
class ProposicaoCrud(Crud): class ProposicaoCrud(Crud):
model = Proposicao model = Proposicao
help_topic = 'proposicao' help_topic = 'proposicao'
container_field = 'autor__user' container_field = 'autor__autoruser__user'
class BaseMixin(Crud.BaseMixin): class BaseMixin(Crud.BaseMixin):
list_field_names = ['data_envio', 'data_recebimento', 'descricao', list_field_names = ['data_envio', 'data_recebimento', 'descricao',
@ -892,7 +892,7 @@ class ProposicaoCrud(Crud):
if not self.has_permission(): if not self.has_permission():
return self.handle_no_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: if not p.data_envio and not p.data_devolucao:
raise Http404() raise Http404()
@ -1107,9 +1107,9 @@ class ReciboProposicaoView(TemplateView):
if not self.request.user.has_perms(perms): if not self.request.user.has_perms(perms):
return False return False
return (Proposicao.objects.filter( prop = Proposicao.objects.get(
id=self.kwargs['pk'], id=self.kwargs['pk'])
autor__user_id=self.request.user.id).exists()) return prop.autor.autoruser_set.filter(user=self.request.user).exists()
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ReciboProposicaoView, self).get_context_data( context = super(ReciboProposicaoView, self).get_context_data(

2
sapl/templates/base.html

@ -63,7 +63,7 @@
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img height="30" width="30" src="{% webpack_static 'img/authenticated.png' %}"><span class="caret"></span></a> <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img height="30" width="30" src="{% webpack_static 'img/authenticated.png' %}"><span class="caret"></span></a>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li class="dropdown-item"><a>{{user.username}} {% if user.autor %} ({{user.autor}}) {% endif %}</a></li> <li class="dropdown-item"><a>{{user.username}} {% if user.autoruser_set.last %} ({{user.autoruser_set.last.autor}}) {% endif %}</a></li>
{% if 'parlamentares.can_vote' in request.user.get_all_permissions %} {% if 'parlamentares.can_vote' in request.user.get_all_permissions %}
<li class="dropdown-item"><a href="" onclick="window.open('{% url 'sapl.painel:voto_individual' %}','Voto Individual','width=1000, height=800, scrollbars=yes')";> <li class="dropdown-item"><a href="" onclick="window.open('{% url 'sapl.painel:voto_individual' %}','Voto Individual','width=1000, height=800, scrollbars=yes')";>
Votar Matéria Votar Matéria

1
sapl/templates/materia/proposicao_detail.html

@ -15,6 +15,7 @@
{% endif %} {% endif %}
{% endblock sub_actions%} {% endblock sub_actions%}
{% block editions %} {% block editions %}
<<<<<<< HEAD
{% if user == object.autor.user %} {% if user == object.autor.user %}
{% if object.data_envio %} {% if object.data_envio %}
{% block editions_actions_return %} {% block editions_actions_return %}

Loading…
Cancel
Save