From af02725d6b57551f9523e68dbcaf3d3d875a5c2e Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 18 Jun 2021 13:09:12 -0300 Subject: [PATCH] =?UTF-8?q?Arrumada=20a=20url=20e=20definida=20fun=C3=A7?= =?UTF-8?q?=C3=A3o=20b=C3=A1sica=20da=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/urls.py | 2 +- sapl/api/views.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/sapl/api/urls.py b/sapl/api/urls.py index 9a8da714d..aa1715982 100644 --- a/sapl/api/urls.py +++ b/sapl/api/urls.py @@ -72,7 +72,7 @@ urlpatterns = [ url(r'^api/', include(urlpatterns_router)), url(r'^api/version', AppVersionView.as_view()), url(r'^api/recriar-token/(?P\d*)$', recria_token, name="recria_token"), - url(r'^api/parlamentares/mesa-diretora/(?P\d*)$', + url(r'^api/parlamentares/mesa-diretora', get_mesa_diretora, name='get_mesa_diretora') # implementar caminho para autenticação diff --git a/sapl/api/views.py b/sapl/api/views.py index 5fd12408e..466415726 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -11,6 +11,7 @@ from django.utils import timezone from django.utils.decorators import classonlymethod from django.utils.translation import ugettext_lazy as _ from django_filters.rest_framework.backends import DjangoFilterBackend +from django.http import JsonResponse from rest_framework import serializers as rest_serializers from rest_framework.authtoken.models import Token from rest_framework.decorators import action, api_view, permission_classes @@ -34,6 +35,8 @@ from sapl.protocoloadm.models import DocumentoAdministrativo,\ DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria +from sapl.parlamentares.models import (ComposicaoMesa, SessaoLegislativa) +from sapl.parlamentares.views import (partido_parlamentar_sessao_legislativa) @receiver(post_save, sender=settings.AUTH_USER_MODEL) @@ -50,6 +53,83 @@ def recria_token(request, pk): return Response({"message": "Token recriado com sucesso!", "token": token.key}) +def get_mesa_diretora(request): + logger = logging.getLogger(__name__) + username = request.user.username + legislatura = request.GET.get('legislatura') + if legislatura: + legislatura = Legislatura.objects.get(id=legislatura) + else: + legislatura = Legislatura.objects.order_by('-data_inicio').first() + + 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 + + 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}.") + 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}. " + "Selecionado o id da primeira sessão.") + sessao_selecionada = sessoes.first().id + + # 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')) + + lista_fotos = [] + lista_partidos = [] + + 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)) + if parlamentar.fotografia: + try: + thumbnail_url = get_backend().get_thumbnail_url( + parlamentar.fotografia, + { + 'size': (128, 128), + 'box': parlamentar.cropping, + 'crop': True, + 'detail': True, + } + ) + lista_fotos.append(thumbnail_url) + except Exception as e: + logger.error(e) + logger.error( + F'erro processando arquivo: {parlamentar.fotografia.path}') + else: + lista_fotos.append(None) + + return JsonResponse({ + 'lista_parlamentares': parlamentares_ocupados, + 'lista_partidos': lista_partidos, + 'lista_cargos': cargos_ocupados, + 'lista_sessoes': lista_sessoes, + 'lista_fotos': lista_fotos, + 'sessao_selecionada': sessao_selecionada, + 'msg': ('', 1) + }) + class BusinessRulesNotImplementedMixin: def create(self, request, *args, **kwargs):