From 481fdb87ca103611146a7eae570bfbddd21f38ce Mon Sep 17 00:00:00 2001 From: Regis Santos Date: Mon, 30 Nov 2020 21:49:01 -0300 Subject: [PATCH 1/2] =?UTF-8?q?feature:=20[Dieta=20Especial]=20Na=20P?= =?UTF-8?q?=C3=A1gina=20de=20Consulta=20de=20Dieta=20de=20Alunos=20apresen?= =?UTF-8?q?tar=20somente=20Dieta=20com=20Status=20Ativo=20e=20Inativo.=20f?= =?UTF-8?q?eature=2027513-27939?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dieta_especial/api/serializers.py | 10 ++-- .../dieta_especial/api/viewsets.py | 52 +++++++++++-------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/sme_terceirizadas/dieta_especial/api/serializers.py b/sme_terceirizadas/dieta_especial/api/serializers.py index c2c4ab5a4..5d21a06b7 100644 --- a/sme_terceirizadas/dieta_especial/api/serializers.py +++ b/sme_terceirizadas/dieta_especial/api/serializers.py @@ -315,11 +315,11 @@ class Meta: class SolicitacoesAtivasInativasPorAlunoSerializer(serializers.Serializer): - dre = serializers.CharField(source='aluno.escola.diretoria_regional.nome') - escola = serializers.CharField(source='aluno.escola.nome') - codigo_eol = serializers.CharField(source='aluno.codigo_eol') - uuid = serializers.CharField(source='aluno.uuid') - nome = serializers.CharField(source='aluno.nome') + dre = serializers.CharField(source='escola.diretoria_regional.nome') + escola = serializers.CharField(source='escola.nome') + codigo_eol = serializers.CharField() + uuid = serializers.CharField() + nome = serializers.CharField() ativas = serializers.IntegerField() inativas = serializers.IntegerField() diff --git a/sme_terceirizadas/dieta_especial/api/viewsets.py b/sme_terceirizadas/dieta_especial/api/viewsets.py index 1768fd00f..b9bdfbaf8 100644 --- a/sme_terceirizadas/dieta_especial/api/viewsets.py +++ b/sme_terceirizadas/dieta_especial/api/viewsets.py @@ -18,7 +18,7 @@ UsuarioEscola, UsuarioTerceirizada ) -from ...escola.models import EscolaPeriodoEscolar +from ...escola.models import Aluno, EscolaPeriodoEscolar from ...paineis_consolidados.api.constants import FILTRO_CODIGO_EOL_ALUNO from ...relatorios.relatorios import ( relatorio_dieta_especial, @@ -592,24 +592,22 @@ class SolicitacoesAtivasInativasPorAlunoView(generics.ListAPIView): def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) - agregado = queryset.aggregate(Sum('ativas'), Sum('inativas')) + total_ativas = queryset.aggregate(Sum('ativas')) + total_inativas = queryset.aggregate(Sum('inativas')) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) - # TODO: Ver se tem como remover o UnorderedObjectListWarning - # que acontece por passarmos mais dados do que apenas o - # serializer.data return self.get_paginated_response({ - 'total_ativas': agregado['ativas__sum'], - 'total_inativas': agregado['inativas__sum'], + 'total_ativas': total_ativas['ativas__sum'], + 'total_inativas': total_inativas['inativas__sum'], 'solicitacoes': serializer.data }) serializer = self.get_serializer(queryset, many=True) return Response({ - 'total_ativas': agregado['ativas__sum'], - 'total_inativas': agregado['inativas__sum'], + 'total_ativas': total_ativas['ativas__sum'], + 'total_inativas': total_inativas['inativas__sum'], 'solicitacoes': serializer.data }) @@ -618,36 +616,44 @@ def get_queryset(self): # noqa C901 if not form.is_valid(): raise ValidationError(form.errors) - qs = SolicitacoesDietaEspecialAtivasInativasPorAluno.objects.all() + qs = Aluno.objects.all()\ + .annotate( + ativas=Count('dietas_especiais', filter=Q( + dietas_especiais__status=DietaEspecialWorkflow.CODAE_AUTORIZADO, + dietas_especiais__ativo=True + )), + inativas=Count( + 'dietas_especiais', + filter=~Q(dietas_especiais__status=DietaEspecialWorkflow.CODAE_AUTORIZADO) | + Q(dietas_especiais__ativo=False)), + ) user = self.request.user if user.tipo_usuario == 'escola': - qs = qs.filter(aluno__escola=user.vinculo_atual.instituicao) + qs = qs.filter(escola=user.vinculo_atual.instituicao) elif form.cleaned_data['escola']: - qs = qs.filter(aluno__escola=form.cleaned_data['escola']) + qs = qs.filter(escola=form.cleaned_data['escola']) elif user.tipo_usuario == 'diretoriaregional': - qs = qs.filter(aluno__escola__diretoria_regional=user.vinculo_atual.instituicao) # noqa + qs = qs.filter(escola__diretoria_regional=user.vinculo_atual.instituicao) elif form.cleaned_data['dre']: - qs = qs.filter( - aluno__escola__diretoria_regional=form.cleaned_data['dre']) + qs = qs.filter(escola__diretoria_regional=form.cleaned_data['dre']) if form.cleaned_data['codigo_eol']: codigo_eol = f"{int(form.cleaned_data['codigo_eol']):06d}" - qs = qs.filter(aluno__codigo_eol=codigo_eol) + qs = qs.filter(codigo_eol=codigo_eol) elif form.cleaned_data['nome_aluno']: - qs = qs.filter( - aluno__nome__icontains=form.cleaned_data['nome_aluno']) + qs = qs.filter(nome__icontains=form.cleaned_data['nome_aluno']) if self.request.user.tipo_usuario == 'dieta_especial': return qs.order_by( - 'aluno__escola__diretoria_regional__nome', - 'aluno__escola__nome', - 'aluno__nome' + 'escola__diretoria_regional__nome', + 'escola__nome', + 'nome' ) elif self.request.user.tipo_usuario == 'diretoriaregional': - return qs.order_by('aluno__escola__nome', 'aluno__nome') - return qs.order_by('aluno__nome') + return qs.order_by('escola__nome', 'nome') + return qs.order_by('nome') class AlergiaIntoleranciaViewSet( From cc1fd44c5f5509089634902095b4aa37b28728b4 Mon Sep 17 00:00:00 2001 From: Regis Santos Date: Mon, 30 Nov 2020 21:56:57 -0300 Subject: [PATCH 2/2] fix flake8 --- sme_terceirizadas/dieta_especial/api/viewsets.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sme_terceirizadas/dieta_especial/api/viewsets.py b/sme_terceirizadas/dieta_especial/api/viewsets.py index b9bdfbaf8..a332f55e7 100644 --- a/sme_terceirizadas/dieta_especial/api/viewsets.py +++ b/sme_terceirizadas/dieta_especial/api/viewsets.py @@ -43,7 +43,6 @@ MotivoAlteracaoUE, MotivoNegacao, SolicitacaoDietaEspecial, - SolicitacoesDietaEspecialAtivasInativasPorAluno, TipoContagem ) from ..utils import RelatorioPagination @@ -616,8 +615,7 @@ def get_queryset(self): # noqa C901 if not form.is_valid(): raise ValidationError(form.errors) - qs = Aluno.objects.all()\ - .annotate( + qs = Aluno.objects.all().annotate( ativas=Count('dietas_especiais', filter=Q( dietas_especiais__status=DietaEspecialWorkflow.CODAE_AUTORIZADO, dietas_especiais__ativo=True