diff --git a/sapl/api/test_api.py b/sapl/api/test_api.py new file mode 100644 index 000000000..59529d2d6 --- /dev/null +++ b/sapl/api/test_api.py @@ -0,0 +1,30 @@ +from model_bakery import baker +import pytest +import json +from sapl.parlamentares.models import Legislatura, ComposicaoMesa, Parlamentar,\ + SessaoLegislativa, CargoMesa +from django.urls import reverse +from sapl.api import views + +@pytest.mark.django_db(transaction=False) +def test_get_mesa_diretora(admin_client): + #criar legislatura, sessao e parlamentares + parlamentar = baker.make(Parlamentar, nome_parlamentar='Joseph Joestar', id=8, fotografia=None) + + legislatura = baker.make(Legislatura, id=34) + + sessao = baker.make(SessaoLegislativa, legislatura=legislatura, id=44) + + cargo = baker.make(CargoMesa, descricao="presidente") + + #passar informações para a composicao_mesa + mesa = baker.make(ComposicaoMesa, parlamentar=parlamentar, + sessao_legislativa=sessao, cargo=cargo) + + #Verifica se a mesa foi criada + mesa_diretora = ComposicaoMesa.objects.get(sessao_legislativa=sessao, parlamentar=parlamentar) + + #Testa o POST + jresponse = admin_client.post(reverse('sapl.api:get_mesa_diretora')) + assert jresponse.status_code == 200 + diff --git a/sapl/api/urls.py b/sapl/api/urls.py index 17fd432ab..aa1715982 100644 --- a/sapl/api/urls.py +++ b/sapl/api/urls.py @@ -6,7 +6,7 @@ from sapl.api.deprecated import MateriaLegislativaViewSet, SessaoPlenariaViewSet,\ AutoresProvaveisListView, AutoresPossiveisListView, AutorListView,\ ModelChoiceView -from sapl.api.views import SaplApiViewSetConstrutor, AppVersionView, recria_token +from sapl.api.views import SaplApiViewSetConstrutor, AppVersionView, recria_token, get_mesa_diretora from .apps import AppConfig @@ -72,6 +72,8 @@ 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', + get_mesa_diretora, name='get_mesa_diretora') # implementar caminho para autenticação # https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/ diff --git a/sapl/api/views.py b/sapl/api/views.py index f4e853ccd..1a147027e 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -11,6 +11,7 @@ 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 @@ -33,7 +34,9 @@ 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.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria, get_base_url +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,56 @@ def recria_token(request, pk): return Response({"message": "Token recriado com sucesso!", "token": token.key}) +def get_mesa_diretora(request): + logger = logging.getLogger(__name__) + + kwargs = {} + + legislatura = request.GET.get('legislatura') + if not legislatura: + legislatura = Legislatura.objects.order_by('-data_inicio').first() + + kwargs['legislatura_id'] = legislatura + + sessao = request.GET.get('sessao') + if sessao: + kwargs['id'] = sessao + + sessao_legislativa = SessaoLegislativa.objects.select_related('legislatura').filter(**kwargs).order_by('-data_inicio').first() + + if sessao_legislativa is None: + logger.error("Sessão ou legislatura não encontrada!") + return JsonResponse({"error": "Sessão ou legislatura não encontrada!"}) + + composicao_mesa = ComposicaoMesa.objects.select_related('parlamentar', 'cargo').filter( + sessao_legislativa=sessao_legislativa).order_by('cargo_id') + + if composicao_mesa is None: + logger.error("Nenhuma mesa não encontrada!") + return JsonResponse({"error": "Sessão ou legislatura não encontrada!"}) + + + + mesa_diretora = [{'legislatura_id':legislatura.id,'legislatura':str(legislatura), + 'sessao_legislativa_id':sessao_legislativa.id,'sessao_legislativa':str(sessao_legislativa), + 'parlamentar_id': parlamentar_id, 'parlamentar_nome': parlamentar_nome, 'cargo_id': cargo_id, + 'cargo_descricao':cargo_descricao} for (parlamentar_id, parlamentar_nome, + cargo_id, cargo_descricao) in composicao_mesa.values_list('parlamentar_id', + 'parlamentar__nome_parlamentar', 'cargo_id', 'cargo__descricao')] + + + for i, c in enumerate(composicao_mesa): + try: + mesa_diretora[i]['fotografia'] = get_base_url(request) + c.parlamentar.fotografia.url + except: + logger.error("Parlamentar "+mesa_diretora[i]['parlamentar_nome']+" não possui foto!") + mesa_diretora[i]['fotografia'] = "Não encontrada" + + + return JsonResponse({ + 'mesa_diretora':mesa_diretora, + }) + class BusinessRulesNotImplementedMixin: def create(self, request, *args, **kwargs): @@ -703,4 +756,4 @@ def get(self, request): 'user': request.user.username, 'is_authenticated': request.user.is_authenticated, } - return Response(content) + return Response(content) \ No newline at end of file