Browse Source

corrige exclusão de vinculo de usuário votante

pull/3371/head
Leandro Roberto 5 years ago
parent
commit
6b1d5e8388
  1. 19
      sapl/base/migrations/0047_auto_20210315_1522.py
  2. 43
      sapl/parlamentares/migrations/0035_auto_20210315_1522.py
  3. 4
      sapl/parlamentares/models.py
  4. 94
      sapl/parlamentares/views.py

19
sapl/base/migrations/0047_auto_20210315_1522.py

@ -0,0 +1,19 @@
# Generated by Django 2.2.13 on 2021-03-15 18:22
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0046_auto_20210314_1532'),
]
operations = [
migrations.AlterField(
model_name='autor',
name='operadores',
field=models.ManyToManyField(related_name='autor_set', through='base.OperadorAutor', to=settings.AUTH_USER_MODEL, verbose_name='Operadores'),
),
]

43
sapl/parlamentares/migrations/0035_auto_20210315_1522.py

@ -0,0 +1,43 @@
# Generated by Django 2.2.13 on 2021-03-15 18:22
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
def remove_grupo_votante_de_usuario(apps, schema_editor):
Group = apps.get_model('auth', 'Group')
User = apps.get_model('auth', 'User')
g = Group.objects.get(name='Votante')
# usuários do grupo votante sem vínculo com parlamentar
users_votantes = g.user_set.filter(votante_set__isnull=True)
for u in users_votantes:
u.groups.remove(g)
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0034_auto_20210303_1428'),
]
operations = [
migrations.AlterField(
model_name='votante',
name='parlamentar',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
related_name='votante_set', to='parlamentares.Parlamentar', verbose_name='Parlamentar'),
),
migrations.AlterField(
model_name='votante',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
related_name='votante_set', to=settings.AUTH_USER_MODEL, verbose_name='User'),
),
migrations.RunPython(remove_grupo_votante_de_usuario),
]

4
sapl/parlamentares/models.py

@ -609,10 +609,10 @@ class FrenteParlamentar(models.Model):
class Votante(models.Model):
parlamentar = models.ForeignKey(
Parlamentar, verbose_name=_('Parlamentar'),
on_delete=models.PROTECT, related_name='parlamentar')
on_delete=models.PROTECT, related_name='votante_set')
user = models.ForeignKey(
get_settings_auth_user_model(), on_delete=models.PROTECT,
verbose_name=_('User'), related_name='user')
verbose_name=_('User'), related_name='votante_set')
data = models.DateTimeField(
verbose_name=_('Data'), auto_now_add=True,
max_length=30, null=True, blank=True)

94
sapl/parlamentares/views.py

@ -4,15 +4,16 @@ import logging
from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.contrib.auth.models import Group
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
from django.urls import reverse, reverse_lazy
from django.db.models import F, Q
from django.db.models.aggregates import Count
from django.http import JsonResponse
from django.http.response import HttpResponseRedirect
from django.shortcuts import render
from django.templatetags.static import static
from django.urls import reverse, reverse_lazy
from django.utils import timezone
from django.utils.datastructures import MultiValueDictKeyError
from django.utils.translation import ugettext_lazy as _
@ -22,7 +23,6 @@ from django.views.generic.edit import UpdateView
from django_filters.views import FilterView
from image_cropping.utils import get_backend
from sapl.base.forms import SessaoLegislativaForm, PartidoForm
from sapl.base.models import Autor
from sapl.comissoes.models import Participacao
@ -31,13 +31,13 @@ from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux,
MasterDetailCrud, make_pagination)
from sapl.materia.models import Autoria, Proposicao, Relatoria
from sapl.parlamentares.apps import AppConfig
from sapl.rules import SAPL_GROUP_VOTANTE
from sapl.utils import (parlamentares_ativos, show_results_filter_set)
from .forms import (ColigacaoFilterSet, FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm,
ParlamentarCreateForm, ParlamentarForm, VotanteForm,
ParlamentarFilterSet, PartidoFilterSet, VincularParlamentarForm,
BlocoForm, FrenteParlamentarForm, BlocoMembroForm)
from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
Dependente, Filiacao, Frente, Legislatura, Mandato,
NivelInstrucao, Parlamentar, Partido, SessaoLegislativa,
@ -53,7 +53,8 @@ NivelInstrucaoCrud = CrudAux.build(NivelInstrucao, 'nivel_instrucao')
TipoAfastamentoCrud = CrudAux.build(TipoAfastamento, 'tipo_afastamento')
TipoMilitarCrud = CrudAux.build(SituacaoMilitar, 'tipo_situa_militar')
DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', 'dependente')
DependenteCrud = MasterDetailCrud.build(
Dependente, 'parlamentar', 'dependente')
class SessaoLegislativaCrud(CrudAux):
@ -101,6 +102,10 @@ class VotanteView(MasterDetailCrud):
def delete(self, *args, **kwargs):
obj = self.get_object()
g = Group.objects.filter(name=SAPL_GROUP_VOTANTE)[0]
obj.user.groups.remove(g)
obj.delete()
return HttpResponseRedirect(
reverse('sapl.parlamentares:votante_list',
@ -247,9 +252,9 @@ class PesquisarColigacaoView(FilterView):
'queryset': self.get_queryset().order_by('nome').distinct()
})
def get_context_data(self, **kwargs):
context = super(PesquisarColigacaoView, self).get_context_data(**kwargs)
context = super(PesquisarColigacaoView,
self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
@ -278,7 +283,8 @@ class PesquisarColigacaoView(FilterView):
filter_url=url,
numero_res=len(self.object_list))
context['show_results'] = show_results_filter_set(self.request.GET.copy())
context['show_results'] = show_results_filter_set(
self.request.GET.copy())
return self.render_to_response(context)
@ -296,7 +302,6 @@ class PesquisarPartidoView(FilterView):
'queryset': self.get_queryset().order_by('nome').distinct()
})
def get_context_data(self, **kwargs):
context = super(PesquisarPartidoView, self).get_context_data(**kwargs)
@ -326,7 +331,8 @@ class PesquisarPartidoView(FilterView):
object_list=self.object_list,
filter_url=url,
numero_res=len(self.object_list))
context['show_results'] = show_results_filter_set(self.request.GET.copy())
context['show_results'] = show_results_filter_set(
self.request.GET.copy())
return self.render_to_response(context)
@ -355,17 +361,17 @@ class ParticipacaoParlamentarCrud(CrudBaseForListAndDetailExternalAppView):
comissoes = []
for p in object_list:
comissao = [
(p.composicao.comissao.nome, reverse(
'sapl.comissoes:comissao_detail', kwargs={
'pk': p.composicao.comissao.pk})),
(p.cargo.nome, None),
(p.composicao.periodo.data_inicio.strftime(
"%d/%m/%Y") + ' a ' +
p.composicao.periodo.data_fim.strftime("%d/%m/%Y"),
None)
]
comissoes.append(comissao)
comissao = [
(p.composicao.comissao.nome, reverse(
'sapl.comissoes:comissao_detail', kwargs={
'pk': p.composicao.comissao.pk})),
(p.cargo.nome, None),
(p.composicao.periodo.data_inicio.strftime(
"%d/%m/%Y") + ' a ' +
p.composicao.periodo.data_fim.strftime("%d/%m/%Y"),
None)
]
comissoes.append(comissao)
return comissoes
def get_headers(self):
@ -417,11 +423,13 @@ class ColigacaoCrud(CrudAux):
def coligacao_legislatura(request):
try:
coligacoes = Coligacao.objects.filter(legislatura=request.GET['legislatura']).order_by('nome')
coligacoes = Coligacao.objects.filter(
legislatura=request.GET['legislatura']).order_by('nome')
except:
coligacoes = []
lista_coligacoes = [(coligacao.id, str(coligacao)) for coligacao in coligacoes]
lista_coligacoes = [(coligacao.id, str(coligacao))
for coligacao in coligacoes]
return JsonResponse({'coligacoes': lista_coligacoes})
@ -746,7 +754,8 @@ class ParlamentarCrud(Crud):
". Tentando obter id da legislatura.")
return int(self.request.GET['pk'])
except:
self.logger.warning("User=" + username + ". Legislatura não possui ID. Buscando em todas as entradas.")
self.logger.warning(
"User=" + username + ". Legislatura não possui ID. Buscando em todas as entradas.")
legislaturas = Legislatura.objects.all()
for l in legislaturas:
if l.atual():
@ -974,8 +983,9 @@ def altera_field_mesa(request):
# é alterado o campo de sessão ou feita alguma operação
# de inclusão/remoção.
if request.GET['sessao']:
sessao_selecionada = SessaoLegislativa.objects.get(id=request.GET['sessao'])
sessao_selecionada = SessaoLegislativa.objects.get(
id=request.GET['sessao'])
# Caso a mudança tenha sido no campo legislatura, a sessão
# atual deve ser a primeira daquela legislatura
else:
@ -1183,19 +1193,21 @@ def altera_field_mesa_public_view(request):
else:
legislatura = Legislatura.objects.order_by('-data_inicio').first()
sessoes = legislatura.sessaolegislativa_set.filter(tipo='O').order_by('-data_inicio')
sessoes = legislatura.sessaolegislativa_set.filter(
tipo='O').order_by('-data_inicio')
if not sessoes:
return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)})
# Verifica se já tem uma sessão selecionada. Ocorre quando é alterado o campo de sessão
# Verifica se já tem uma sessão selecionada. Ocorre quando é alterado o
# campo de sessão
sessao_selecionada = request.GET.get('sessao')
if not sessao_selecionada:
try:
year = timezone.now().year
logger.info(f"user={username}. Tentando obter sessões com data_inicio.ano = {year}.")
logger.info(
f"user={username}. Tentando obter sessões com data_inicio.ano = {year}.")
sessao_selecionada = sessoes.get(data_inicio__year=year).id
except ObjectDoesNotExist:
logger.error(f"user={username}. Sessões não encontradas com com data_inicio.ano = {year}. "
@ -1205,9 +1217,12 @@ def altera_field_mesa_public_view(request):
# Atualiza os componentes da view após a mudança
lista_sessoes = [(s.id, s.__str__()) for s in sessoes]
composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter(sessao_legislativa=sessao_selecionada).order_by('cargo_id')
cargos_ocupados = list(composicao_mesa.values_list('cargo__id', 'cargo__descricao'))
parlamentares_ocupados = list(composicao_mesa.values_list('parlamentar__id', 'parlamentar__nome_parlamentar'))
composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter(
sessao_legislativa=sessao_selecionada).order_by('cargo_id')
cargos_ocupados = list(composicao_mesa.values_list(
'cargo__id', 'cargo__descricao'))
parlamentares_ocupados = list(composicao_mesa.values_list(
'parlamentar__id', 'parlamentar__nome_parlamentar'))
lista_fotos = []
lista_partidos = []
@ -1215,7 +1230,8 @@ def altera_field_mesa_public_view(request):
sessao = SessaoLegislativa.objects.get(id=sessao_selecionada)
for p in parlamentares_ocupados:
parlamentar = Parlamentar.objects.get(id=p[0])
lista_partidos.append(partido_parlamentar_sessao_legislativa(sessao, parlamentar))
lista_partidos.append(
partido_parlamentar_sessao_legislativa(sessao, parlamentar))
if parlamentar.fotografia:
try:
thumbnail_url = get_backend().get_thumbnail_url(
@ -1230,7 +1246,8 @@ def altera_field_mesa_public_view(request):
lista_fotos.append(thumbnail_url)
except Exception as e:
logger.error(e)
logger.error(F'erro processando arquivo: {parlamentar.fotografia.path}')
logger.error(
F'erro processando arquivo: {parlamentar.fotografia.path}')
else:
lista_fotos.append(None)
@ -1242,7 +1259,7 @@ def altera_field_mesa_public_view(request):
'lista_fotos': lista_fotos,
'sessao_selecionada': sessao_selecionada,
'msg': ('', 1)
})
})
class VincularParlamentarView(PermissionRequiredMixin, FormView):
@ -1262,7 +1279,8 @@ class VincularParlamentarView(PermissionRequiredMixin, FormView):
'data_fim_mandato': form.cleaned_data['legislatura'].data_fim
}
data_expedicao_diploma = form.cleaned_data.get('data_expedicao_diploma')
data_expedicao_diploma = form.cleaned_data.get(
'data_expedicao_diploma')
if data_expedicao_diploma:
kwargs.update({'data_expedicao_diploma': data_expedicao_diploma})
@ -1337,6 +1355,6 @@ def get_sessoes_legislatura(request):
json_response = {'sessoes_legislativas': []}
for s in SessaoLegislativa.objects.filter(legislatura_id=legislatura_id):
json_response['sessoes_legislativas'].append( (s.id, str(s)) )
json_response['sessoes_legislativas'].append((s.id, str(s)))
return JsonResponse(json_response)

Loading…
Cancel
Save