from datetime import datetime
import environ
from django.db.models import Q
from drf_base64.serializers import ModelSerializer
from rest_framework import serializers, status
from src.dados_comuns.api.serializers import (
ContatoSerializer,
LogSolicitacoesUsuarioSerializer,
)
from src.dados_comuns.utils import update_instance_from_dict
from src.dados_comuns.validators import nao_pode_ser_no_passado
from src.dieta_especial.protocolo_padrao.api.serializers import (
ProtocoloPadraoDietaEspecialSimplesSerializer,
SubstituicaoAlimentoSerializer,
)
from src.dieta_especial.protocolo_padrao.api.serializers_create import (
SubstituicaoAutorizarSerializer,
SubstituicaoCreateSerializer,
)
from src.dieta_especial.protocolo_padrao.models import (
Alimento,
ProtocoloPadraoDietaEspecial,
SubstituicaoAlimento,
)
from src.dieta_especial.solicitacao_dieta_especial.api.serializers_create import (
SolicitacaoDietaEspecialCreateSerializer,
)
from src.dieta_especial.solicitacao_dieta_especial.api.validators import (
atributos_lista_nao_vazios,
atributos_string_nao_vazios,
deve_ter_atributos,
)
from src.dieta_especial.solicitacao_dieta_especial.models import (
AlergiaIntolerancia,
Anexo,
ClassificacaoDieta,
MotivoAlteracaoUE,
MotivoNegacao,
SolicitacaoDietaEspecial,
)
from src.escola.api.serializers import (
AlunoSerializer,
AlunoSimplesSerializer,
EscolaNomeCodigoEOLSerializer,
LoteNomeSerializer,
LoteSerializer,
TipoGestaoSerializer,
)
from src.escola.models import DiretoriaRegional, Escola
from src.escola.services import NovoSGPServicoLogadoException
from src.paineis_consolidados.models import SolicitacoesCODAE
from src.produto.models import Produto, SolicitacaoCadastroProdutoDieta
CLASSIFICACAO_NOME_SOURCE = "classificacao.nome"
DATE_FORMAT = "%d/%m/%Y"
[docs]
class AlergiaIntoleranciaSerializer(serializers.ModelSerializer):
[docs]
class ClassificacaoDietaSerializer(serializers.ModelSerializer):
[docs]
class MotivoNegacaoSerializer(serializers.ModelSerializer):
[docs]
class AnexoSerializer(ModelSerializer):
nome = serializers.CharField()
arquivo_url = serializers.SerializerMethodField()
[docs]
def get_arquivo_url(self, instance):
env = environ.Env()
api_url = env.str("URL_ANEXO", default="http://localhost:8000")
return f"{api_url}{instance.arquivo.url}"
[docs]
class DiretoriaRegionalSerializer(serializers.ModelSerializer):
[docs]
class EscolaSerializer(serializers.ModelSerializer):
diretoria_regional = DiretoriaRegionalSerializer()
tipo_gestao = TipoGestaoSerializer()
lote = LoteNomeSerializer()
contato = ContatoSerializer()
[docs]
class MotivoAlteracaoUESerializer(serializers.ModelSerializer):
[docs]
class SolicitacaoDietaEspecialAutorizarSerializer(
SolicitacaoDietaEspecialCreateSerializer
):
[docs]
def validate(self, dados_a_validar):
deve_ter_atributos(
dados_a_validar,
[
"alergias_intolerancias",
"classificacao",
"registro_funcional_nutricionista",
"substituicoes",
],
)
if "data_termino" in dados_a_validar:
data_termino = datetime.strptime(
dados_a_validar["data_termino"], "%Y-%m-%d"
).date()
nao_pode_ser_no_passado(data_termino)
atributos_lista_nao_vazios(
dados_a_validar, ["substituicoes", "alergias_intolerancias"]
)
atributos_string_nao_vazios(
dados_a_validar, ["registro_funcional_nutricionista"]
)
return dados_a_validar
[docs]
def update(self, instance, data): # noqa C901
validated_data = self.validate(data)
alergias_intolerancias = validated_data.pop("alergias_intolerancias")
substituicoes = validated_data.pop("substituicoes")
protocolo_padrao = ProtocoloPadraoDietaEspecial.objects.get(
uuid=validated_data["protocolo_padrao"]
)
instance.protocolo_padrao = protocolo_padrao
instance.classificacao_id = validated_data["classificacao"]
instance.registro_funcional_nutricionista = validated_data[
"registro_funcional_nutricionista"
]
instance.informacoes_adicionais = validated_data.get(
"informacoes_adicionais", ""
)
instance.orientacoes_gerais = validated_data.get("orientacoes_gerais", "")
instance.caracteristicas_do_alimento = validated_data.get(
"caracteristicas_do_alimento", ""
)
instance.nome_protocolo = validated_data.get("nome_protocolo", "")
data_termino = validated_data.get("data_termino", "")
if data_termino:
data_termino = datetime.strptime(data_termino, "%Y-%m-%d").date()
instance.data_termino = data_termino
else:
instance.data_termino = None
instance.alergias_intolerancias.clear()
for ai in alergias_intolerancias:
instance.alergias_intolerancias.add(AlergiaIntolerancia.objects.get(pk=ai))
instance.substituicaoalimento_set.all().delete()
for substituicao in substituicoes:
substituicao["solicitacao_dieta_especial"] = instance.id
# Separa Alimentos e Produtos.
alimentos_substitutos = []
produtos_substitutos = []
for substituto in substituicao["substitutos"]:
if Alimento.objects.filter(uuid=substituto).first():
alimentos_substitutos.append(substituto)
elif Produto.objects.filter(uuid=substituto).first():
produtos_substitutos.append(substituto)
else:
raise Exception("Substituto não encontrado.")
substituicao["alimentos_substitutos"] = alimentos_substitutos
substituicao["substitutos"] = produtos_substitutos
create_serializer = SubstituicaoAutorizarSerializer(
data=substituicao
) # noqa
if create_serializer.is_valid(raise_exception=True):
instance.substituicaoalimento_set.add(create_serializer.save())
instance.save()
return instance
[docs]
class SolicitacaoDietaEspecialSerializer(serializers.ModelSerializer):
aluno = AlunoSerializer()
anexos = serializers.ListField(child=AnexoSerializer(), required=True)
escola = EscolaSerializer()
escola_destino = EscolaSerializer()
logs = LogSolicitacoesUsuarioSerializer(many=True)
status_solicitacao = serializers.CharField(
source="status", required=False, read_only=True
)
id_externo = serializers.CharField()
classificacao = ClassificacaoDietaSerializer()
alergias_intolerancias = AlergiaIntoleranciaSerializer(many=True)
motivo_negacao = MotivoNegacaoSerializer()
motivo_alteracao_ue = MotivoAlteracaoUESerializer()
substituicoes = serializers.SerializerMethodField()
tem_solicitacao_cadastro_produto = serializers.SerializerMethodField()
protocolo_padrao = serializers.SlugRelatedField(
slug_field="uuid",
required=False,
queryset=ProtocoloPadraoDietaEspecial.objects.all(),
)
[docs]
def get_substituicoes(self, obj):
substituicoes = obj.substituicoes.order_by("alimento__nome")
return SubstituicaoAlimentoSerializer(substituicoes, many=True).data
[docs]
def get_tem_solicitacao_cadastro_produto(self, obj):
return SolicitacaoCadastroProdutoDieta.objects.filter(
solicitacao_dieta_especial=obj, status="AGUARDANDO_CONFIRMACAO"
).exists()
[docs]
class SolicitacaoDietaEspecialUpdateSerializer(serializers.ModelSerializer):
protocolo_padrao = serializers.SlugRelatedField(
slug_field="uuid",
required=False,
queryset=ProtocoloPadraoDietaEspecial.objects.all(),
allow_null=True,
)
anexos = serializers.ListField(child=AnexoSerializer(), required=True)
classificacao = serializers.PrimaryKeyRelatedField(
queryset=ClassificacaoDieta.objects.all()
)
alergias_intolerancias = serializers.PrimaryKeyRelatedField(
queryset=AlergiaIntolerancia.objects.all(), many=True
)
substituicoes = SubstituicaoCreateSerializer(many=True)
[docs]
def update(self, instance, data): # noqa C901
anexos = data.pop("anexos", [])
alergias_intolerancias = data.pop("alergias_intolerancias", None)
substituicoes = data.pop("substituicoes", None)
update_instance_from_dict(instance, data)
if anexos:
instance.anexo_set.all().delete()
for anexo in anexos:
anexo["solicitacao_dieta_especial_id"] = instance.id
ser = AnexoSerializer(data=anexo)
ser.is_valid(raise_exception=True)
Anexo.objects.create(**anexo)
if alergias_intolerancias:
instance.alergias_intolerancias.set([])
for ai in alergias_intolerancias:
instance.alergias_intolerancias.add(ai)
instance.substituicaoalimento_set.all().delete()
if substituicoes:
for substituicao in substituicoes:
if len(substituicao) == 0:
raise serializers.ValidationError(
{
"substituicoes": "Um ou mais itens na lista de substituições estão vazios."
}
)
substitutos = substituicao.pop("substitutos", None)
substituicao["solicitacao_dieta_especial"] = instance
subst_obj = SubstituicaoAlimento.objects.create(**substituicao)
if substitutos:
for substituto in substitutos:
if isinstance(substituto, Alimento):
subst_obj.alimentos_substitutos.add(substituto)
if isinstance(substituto, Produto):
subst_obj.substitutos.add(substituto)
instance.save()
return instance
[docs]
class SolicitacaoDietaEspecialLogSerializer(serializers.ModelSerializer):
aluno = AlunoSerializer()
logs = LogSolicitacoesUsuarioSerializer(many=True)
id_externo = serializers.CharField()
[docs]
class SolicitacoesAtivasInativasPorAlunoSerializer(serializers.Serializer):
dre = serializers.SerializerMethodField()
escola = serializers.SerializerMethodField()
serie = serializers.CharField()
codigo_eol_escola = serializers.SerializerMethodField()
codigo_eol = serializers.CharField()
foto_aluno = serializers.SerializerMethodField()
classificacao_dieta_ativa = serializers.SerializerMethodField()
uuid = serializers.CharField()
nome = serializers.CharField()
ativas = serializers.SerializerMethodField()
inativas = serializers.SerializerMethodField()
[docs]
def get_escola_context(self, obj):
if hasattr(obj, "_escola_contexto_id"):
return obj._escola_contexto_id
return None
[docs]
def get_ativas(self, obj):
escola_uuid = self.get_escola_context(obj)
codigo_eol = obj.codigo_eol
if not escola_uuid:
return 0
ativas_qs = (
SolicitacoesCODAE.get_autorizados_dieta_especial()
| SolicitacoesCODAE.get_autorizadas_temporariamente_dieta_especial()
).filter(codigo_eol_aluno=codigo_eol, escola_uuid=escola_uuid)
if not codigo_eol:
return (
SolicitacaoDietaEspecial.objects.filter(
uuid__in=ativas_qs.values_list("uuid", flat=True),
aluno__nome=obj.nome,
)
.distinct()
.count()
)
count = ativas_qs.values("uuid").distinct().count()
return count
[docs]
def get_inativas(self, obj):
escola_uuid = self.get_escola_context(obj)
codigo_eol = obj.codigo_eol
if not escola_uuid:
return 0
cancelados_qs = SolicitacoesCODAE.get_cancelados_dieta_especial().filter(
codigo_eol_aluno=codigo_eol
)
inativas_qs = SolicitacoesCODAE.get_inativas_dieta_especial().filter(
codigo_eol_aluno=codigo_eol
)
inativas_temp_qs = (
SolicitacoesCODAE.get_inativas_temporariamente_dieta_especial().filter(
codigo_eol_aluno=codigo_eol
)
)
cancelados_qs = cancelados_qs.filter(
Q(tipo_solicitacao_dieta="ALTERACAO_UE", escola_destino_uuid=escola_uuid)
| Q(~Q(tipo_solicitacao_dieta="ALTERACAO_UE"), escola_uuid=escola_uuid)
)
inativas_qs = inativas_qs.filter(
Q(tipo_solicitacao_dieta="ALTERACAO_UE", escola_destino_uuid=escola_uuid)
| Q(~Q(tipo_solicitacao_dieta="ALTERACAO_UE"), escola_uuid=escola_uuid)
)
inativas_temp_qs = inativas_temp_qs.filter(
Q(tipo_solicitacao_dieta="ALTERACAO_UE", escola_destino_uuid=escola_uuid)
| Q(~Q(tipo_solicitacao_dieta="ALTERACAO_UE"), escola_uuid=escola_uuid)
)
ids_inativas = set()
ids_inativas.update(cancelados_qs.values_list("uuid", flat=True))
ids_inativas.update(inativas_qs.values_list("uuid", flat=True))
ids_inativas.update(inativas_temp_qs.values_list("uuid", flat=True))
if not codigo_eol:
return (
SolicitacaoDietaEspecial.objects.filter(
uuid__in=ids_inativas, aluno__nome=obj.nome
)
.distinct()
.count()
)
return len(ids_inativas)
[docs]
def get_dre(self, obj):
if hasattr(obj, "_escola_dre"):
return obj._escola_dre
escola_id = self.get_escola_context(obj)
if escola_id:
dieta = obj.dietas_especiais.filter(rastro_escola_id=escola_id).first()
if dieta:
return dieta.rastro_escola.diretoria_regional.nome
if obj.dietas_especiais.filter(ativo=True).exists():
return (
obj.dietas_especiais.filter(ativo=True)
.first()
.rastro_escola.diretoria_regional.nome
)
return obj.dietas_especiais.first().rastro_escola.diretoria_regional.nome
[docs]
def get_escola(self, obj):
if hasattr(obj, "_escola_nome"):
return obj._escola_nome
escola_uuid = self.get_escola_context(obj)
if escola_uuid:
dieta = obj.dietas_especiais.filter(rastro_escola__uuid=escola_uuid).first()
if dieta:
return dieta.rastro_escola.nome
if obj.dietas_especiais.filter(ativo=True).exists():
return obj.dietas_especiais.filter(ativo=True).first().rastro_escola.nome
return obj.dietas_especiais.first().rastro_escola.nome
[docs]
def get_codigo_eol_escola(self, obj):
if hasattr(obj, "_escola_codigo_eol"):
return obj._escola_codigo_eol
escola_uuid = self.get_escola_context(obj)
if escola_uuid:
dieta = obj.dietas_especiais.filter(rastro_escola__uuid=escola_uuid).first()
if dieta:
return dieta.rastro_escola.codigo_eol
if obj.dietas_especiais.filter(ativo=True).exists():
return (
obj.dietas_especiais.filter(ativo=True).first().rastro_escola.codigo_eol
)
return obj.dietas_especiais.first().rastro_escola.codigo_eol
[docs]
def get_foto_aluno(self, obj):
novo_sgp_service = self.context.get("novo_sgp_service", "")
codigo_eol = obj.codigo_eol
if novo_sgp_service and codigo_eol is not None:
try:
response = novo_sgp_service.pegar_foto_aluno(int(codigo_eol))
if response.status_code == status.HTTP_200_OK:
string_foto = (
"data:"
+ response.json()["download"]["item2"]
+ ";base64,"
+ response.json()["download"]["item1"]
)
return string_foto
except (NovoSGPServicoLogadoException, TypeError):
return None
return None
[docs]
def get_classificacao_dieta_ativa(self, obj):
escola_uuid = self.get_escola_context(obj)
qs_dieta_ativa = obj.dietas_especiais.filter(ativo=True)
if escola_uuid:
qs_dieta_ativa = qs_dieta_ativa.filter(rastro_escola__uuid=escola_uuid)
if qs_dieta_ativa.exists():
return qs_dieta_ativa.first().classificacao.nome
return None
[docs]
class RelatorioQuantitativoSolicDietaEspSerializer(serializers.Serializer):
dre = serializers.CharField(
source="aluno__escola__diretoria_regional__nome", required=False
)
escola = serializers.CharField(source="aluno__escola__nome", required=False)
diagnostico = serializers.CharField(
source="alergias_intolerancias__descricao", required=False
)
classificacao = serializers.CharField(source="classificacao__nome", required=False)
ano_nasc_aluno = serializers.CharField(
source="aluno__data_nascimento__year", required=False
)
qtde_ativas = serializers.IntegerField()
qtde_inativas = serializers.IntegerField()
qtde_pendentes = serializers.IntegerField()
[docs]
class SolicitacaoDietaEspecialSimplesSerializer(serializers.ModelSerializer):
aluno = AlunoSerializer()
rastro_escola = EscolaSerializer()
status_titulo = serializers.CharField(source="status.state.title")
logs = LogSolicitacoesUsuarioSerializer(many=True)
status_solicitacao = serializers.CharField(
source="status", required=False, read_only=True
)
classificacao = ClassificacaoDietaSerializer()
alergias_intolerancias = AlergiaIntoleranciaSerializer(many=True)
motivo_negacao = MotivoNegacaoSerializer()
anexos = serializers.ListField(child=AnexoSerializer(), required=True)
[docs]
class SolicitacaoDietaEspecialNutriSupervisaoExportXLSXSerializer(
serializers.ModelSerializer
):
codigo_eol_aluno = serializers.SerializerMethodField()
nome_aluno = serializers.SerializerMethodField()
data_nascimento_aluno = serializers.SerializerMethodField()
nome_escola = serializers.SerializerMethodField()
classificacao_dieta = serializers.SerializerMethodField()
alergias_intolerancias = serializers.SerializerMethodField()
protocolo_padrao = serializers.SerializerMethodField()
data_autorizacao = serializers.SerializerMethodField()
data_ultimo_log = serializers.SerializerMethodField()
[docs]
def get_codigo_eol_aluno(self, obj):
return obj.aluno.codigo_eol if obj.aluno else None
[docs]
def get_nome_aluno(self, obj):
return obj.aluno.nome if obj.aluno else None
[docs]
def get_data_nascimento_aluno(self, obj):
if obj.aluno and obj.aluno.data_nascimento:
data = obj.aluno.data_nascimento
if isinstance(data, str):
data = datetime.strptime(data, "%Y-%m-%d").date()
return data.strftime(DATE_FORMAT)
return None
[docs]
def get_nome_escola(self, obj):
return obj.escola_destino.nome if obj.escola_destino else None
[docs]
def get_classificacao_dieta(self, obj):
return obj.classificacao.nome if obj.classificacao else None
[docs]
def get_alergias_intolerancias(self, obj):
return ",".join(
obj.alergias_intolerancias.all().values_list("descricao", flat=True)
)
[docs]
def get_protocolo_padrao(self, obj):
return (
obj.nome_protocolo
if obj.nome_protocolo
else (obj.protocolo_padrao.nome_protocolo if obj.protocolo_padrao else "")
)
[docs]
def get_data_autorizacao(self, obj):
return obj.data_autorizacao or None
[docs]
def get_data_ultimo_log(self, obj):
if obj.logs.exists():
ultimo_log = obj.logs.last()
if ultimo_log and ultimo_log.criado_em:
return datetime.strftime(ultimo_log.criado_em, DATE_FORMAT)
return None
def __init__(self, *args, **kwargs):
context = kwargs.get("context", {})
status = context.get("status", "").upper()
if status == "AUTORIZADAS":
self.fields.pop("data_ultimo_log", None)
if status != "AUTORIZADAS":
self.fields.pop("data_nascimento_aluno", None)
self.fields.pop("protocolo_padrao", None)
super().__init__(*args, **kwargs)
[docs]
class SolicitacaoDietaEspecialExportXLSXSerializer(serializers.ModelSerializer):
codigo_eol_aluno = serializers.SerializerMethodField()
nome_aluno = serializers.SerializerMethodField()
data_nascimento_aluno = serializers.SerializerMethodField()
nome_escola = serializers.SerializerMethodField()
classificacao_dieta = serializers.SerializerMethodField()
protocolo_padrao = serializers.SerializerMethodField()
data_autorizacao = serializers.SerializerMethodField()
data_ultimo_log = serializers.SerializerMethodField()
[docs]
def get_codigo_eol_aluno(self, obj):
return obj.aluno.codigo_eol if obj.aluno else None
[docs]
def get_nome_aluno(self, obj):
return obj.aluno.nome if obj.aluno else None
[docs]
def get_data_nascimento_aluno(self, obj):
if obj.aluno and obj.aluno.data_nascimento:
data = obj.aluno.data_nascimento
if isinstance(data, str):
data = datetime.strptime(data, "%Y-%m-%d").date()
return data.strftime(DATE_FORMAT)
return None
[docs]
def get_nome_escola(self, obj):
return obj.escola_destino.nome if obj.escola_destino else None
[docs]
def get_classificacao_dieta(self, obj):
return obj.classificacao.nome if obj.classificacao else None
[docs]
def get_protocolo_padrao(self, obj):
return (
obj.nome_protocolo
if obj.nome_protocolo
else (obj.protocolo_padrao.nome_protocolo if obj.protocolo_padrao else "")
)
[docs]
def get_data_autorizacao(self, obj):
return obj.data_autorizacao or None
[docs]
def get_data_ultimo_log(self, obj):
return (
datetime.strftime(obj.logs.last().criado_em, DATE_FORMAT)
if obj.logs
else None
)
def __init__(self, *args, **kwargs):
context = kwargs.get("context", {})
status = context.get("status", "").upper()
if status == "AUTORIZADAS":
self.fields.pop("data_ultimo_log", None)
if status != "AUTORIZADAS":
self.fields.pop("data_nascimento_aluno", None)
super().__init__(*args, **kwargs)
[docs]
class SolicitacaoDietaEspecialRelatorioTercSerializer(serializers.ModelSerializer):
cod_eol_aluno = serializers.SerializerMethodField()
nome_aluno = serializers.SerializerMethodField()
data_nascimento_aluno = serializers.SerializerMethodField()
nome_escola = serializers.SerializerMethodField()
codigo_eol_escola = serializers.SerializerMethodField()
serie_aluno = serializers.CharField(source="aluno.serie")
status_solicitacao = serializers.CharField(
source="status", required=False, read_only=True
)
rastro_lote = LoteSerializer()
classificacao = ClassificacaoDietaSerializer()
protocolo_padrao = ProtocoloPadraoDietaEspecialSimplesSerializer()
nome_protocolo = serializers.SerializerMethodField()
data_ultimo_log = serializers.SerializerMethodField()
data_autorizacao = serializers.CharField()
alergias_intolerancias = AlergiaIntoleranciaSerializer(many=True)
tipo_gestao = serializers.SerializerMethodField()
dre = serializers.SerializerMethodField()
[docs]
def get_nome_escola(self, obj):
return obj.escola_destino.nome if obj.escola_destino else None
[docs]
def get_codigo_eol_escola(self, obj):
return obj.escola_destino.codigo_eol if obj.escola_destino else None
[docs]
def get_cod_eol_aluno(self, obj):
return obj.aluno.codigo_eol if obj.aluno else None
[docs]
def get_nome_aluno(self, obj):
return obj.aluno.nome if obj.aluno else None
[docs]
def get_data_nascimento_aluno(self, obj):
if obj.aluno and obj.aluno.data_nascimento:
data = obj.aluno.data_nascimento
if isinstance(data, str):
data = datetime.strptime(data, "%Y-%m-%d").date()
return data.strftime(DATE_FORMAT)
return None
[docs]
def get_nome_protocolo(self, obj):
return (
obj.nome_protocolo
if obj.nome_protocolo
else (obj.protocolo_padrao.nome_protocolo if obj.protocolo_padrao else "")
)
[docs]
def get_data_ultimo_log(self, obj):
return (
datetime.strftime(obj.logs.last().criado_em, DATE_FORMAT)
if (
obj.logs
and obj.status
!= SolicitacaoDietaEspecial.workflow_class.states.CODAE_AUTORIZADO
)
else None
)
[docs]
def get_tipo_gestao(self, obj):
return (
obj.escola_destino.tipo_gestao.nome
if obj.escola_destino.tipo_gestao
else None
)
[docs]
def get_dre(self, obj):
return obj.escola_destino.diretoria_regional.nome
[docs]
class UnidadeEducacionalSerializer(serializers.Serializer):
lote = serializers.CharField()
unidade_educacional = serializers.CharField()
tipo_unidade = serializers.CharField()
classificacao = serializers.CharField()
total = serializers.IntegerField()
data = serializers.DateField()
periodos = serializers.JSONField(required=False)
[docs]
class SolicitacaoDietaEspecialRecreioNasFeriasSerializer(serializers.ModelSerializer):
aluno = AlunoSimplesSerializer()
escola = EscolaNomeCodigoEOLSerializer()
escola_destino = EscolaNomeCodigoEOLSerializer()
alergias_intolerancias = AlergiaIntoleranciaSerializer(many=True)
classificacao = ClassificacaoDietaSerializer()
status_solicitacao = serializers.CharField(
source="status", required=False, read_only=True
)
[docs]
def to_representation(self, instance):
data = super().to_representation(instance)
self._processar_aluno(data, instance)
self._processar_escola(data, instance)
self._processar_escola_destino(data)
return data
def _processar_aluno(self, data, instance):
aluno = data.get("aluno")
if not aluno:
return
if instance.tipo_solicitacao == instance.ALUNO_NAO_MATRICULADO:
aluno["codigo_eol"] = "Aluno não matriculado"
aluno.pop("data_nascimento", None)
aluno.pop("escola", None)
def _processar_escola(self, data, instance):
escola = data.get("escola")
if not escola:
return
if instance.tipo_solicitacao == instance.ALUNO_NAO_MATRICULADO:
data["escola"] = {"nome": "-", "codigo_eol": "-"}
return
escola.pop("codigo_eol", None)
escola.pop("lote", None)
def _processar_escola_destino(self, data):
escola_destino = data.get("escola_destino")
if escola_destino:
escola_destino.pop("codigo_eol", None)
escola_destino.pop("lote", None)