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. 90
      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): class Votante(models.Model):
parlamentar = models.ForeignKey( parlamentar = models.ForeignKey(
Parlamentar, verbose_name=_('Parlamentar'), Parlamentar, verbose_name=_('Parlamentar'),
on_delete=models.PROTECT, related_name='parlamentar') on_delete=models.PROTECT, related_name='votante_set')
user = models.ForeignKey( user = models.ForeignKey(
get_settings_auth_user_model(), on_delete=models.PROTECT, 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( data = models.DateTimeField(
verbose_name=_('Data'), auto_now_add=True, verbose_name=_('Data'), auto_now_add=True,
max_length=30, null=True, blank=True) max_length=30, null=True, blank=True)

90
sapl/parlamentares/views.py

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

Loading…
Cancel
Save