Source code for src.dieta_especial.tasks.utils.processamentos

from datetime import date

from django.template.loader import render_to_string

from src.dados_comuns.constants import TIPO_SOLICITACAO_DIETA
from src.dados_comuns.fluxo_status import DietaEspecialWorkflow
from src.dados_comuns.utils import envia_email_unico
from src.dieta_especial.logs_models.models import (
    LogDietasAtivasCanceladasAutomaticamente,
)
from src.dieta_especial.solicitacao_dieta_especial.models import (
    SolicitacaoDietaEspecial,
)
from src.escola.models import Aluno
from src.paineis_consolidados.models import SolicitacoesCODAE
from src.perfil.models import Usuario


def _dietas_especiais_a_terminar():
    return SolicitacaoDietaEspecial.objects.filter(
        data_termino__lt=date.today(),
        ativo=True,
        status__in=[
            DietaEspecialWorkflow.CODAE_AUTORIZADO,
            DietaEspecialWorkflow.TERCEIRIZADA_TOMOU_CIENCIA,
            DietaEspecialWorkflow.ESCOLA_SOLICITOU_INATIVACAO,
        ],
    )


[docs] def termina_dietas_especiais(usuario): for solicitacao in _dietas_especiais_a_terminar(): if solicitacao.tipo_solicitacao == TIPO_SOLICITACAO_DIETA.get("ALTERACAO_UE"): solicitacao.dieta_alterada.ativo = True solicitacao.dieta_alterada.save() solicitacao.termina(usuario)
def _dietas_especiais_a_iniciar(): return SolicitacaoDietaEspecial.objects.filter( data_inicio__lte=date.today(), ativo=False, status__in=[ DietaEspecialWorkflow.CODAE_AUTORIZADO, DietaEspecialWorkflow.TERCEIRIZADA_TOMOU_CIENCIA, DietaEspecialWorkflow.ESCOLA_SOLICITOU_INATIVACAO, ], )
[docs] def inicia_dietas_temporarias(): for solicitacao in _dietas_especiais_a_iniciar(): if solicitacao.tipo_solicitacao == TIPO_SOLICITACAO_DIETA.get("ALTERACAO_UE"): solicitacao.dieta_alterada.ativo = False solicitacao.dieta_alterada.save() solicitacao.ativo = True solicitacao.save()
def _cancelar_dieta_encerramento_matricula(dieta): usuario_admin = Usuario.objects.get(pk=1) dieta.sistema_cancela_aluno_encerramento_matricula(user=usuario_admin) dieta.save()
[docs] def cancela_dietas_pendente_autorizacao(): dietas_pendentes = ( SolicitacoesCODAE.get_pendentes_dieta_especial() .filter(tipo_solicitacao_dieta="COMUM") .order_by("pk") .distinct("pk") ) for dieta in dietas_pendentes: aluno = Aluno.objects.filter(codigo_eol=dieta.codigo_eol_aluno).first() solicitacao_dieta = SolicitacaoDietaEspecial.objects.filter(pk=dieta.pk).first() if aluno.escola != solicitacao_dieta.escola_destino: _cancelar_dieta_encerramento_matricula(solicitacao_dieta)
def _gerar_log_dietas_ativas_canceladas_automaticamente( dieta, dados, fora_da_rede=False ): data = dict( dieta=dieta, codigo_eol_aluno=dados["codigo_eol_aluno"], nome_aluno=dados["nome_aluno"], codigo_eol_escola_destino=dados.get("codigo_eol_escola_origem"), nome_escola_destino=dados.get("nome_escola_origem"), codigo_eol_escola_origem=dados.get("codigo_eol_escola_destino"), nome_escola_origem=dados.get("nome_escola_destino"), ) if fora_da_rede: data["codigo_eol_escola_origem"] = dados.get("codigo_eol_escola_origem") data["nome_escola_origem"] = dados.get("nome_escola_origem") data["codigo_eol_escola_destino"] = "" data["nome_escola_destino"] = "" LogDietasAtivasCanceladasAutomaticamente.objects.create(**data) def _cancelar_dieta(dieta): usuario_admin = Usuario.objects.get(pk=1) dieta.cancelar_aluno_mudou_escola(user=usuario_admin) dieta.save() def _cancelar_dieta_aluno_fora_da_rede(dieta): usuario_admin = Usuario.objects.get(pk=1) dieta.cancelar_aluno_nao_pertence_rede(user=usuario_admin) dieta.save() def _enviar_email_para_adm_terceirizada_e_escola( solicitacao_dieta, aluno, escola, fora_da_rede=False ): assunto = ( f"Cancelamento Automático de Dieta Especial Nº {solicitacao_dieta.id_externo}" ) hoje = date.today().strftime("%d/%m/%Y") template = ( "email/email_dieta_cancelada_automaticamente_terceirizada_escola_destino.html" ) justificativa_cancelamento = "por não pertencer a unidade educacional" if fora_da_rede: justificativa_cancelamento = "por não estar matriculado" dados_template = { "nome_aluno": aluno.nome, "codigo_eol_aluno": aluno.codigo_eol, "dieta_numero": solicitacao_dieta.id_externo, "nome_escola": escola.nome, "hoje": hoje, "justificativa_cancelamento": justificativa_cancelamento, } html = render_to_string(template, dados_template) emails_terceirizada = solicitacao_dieta.rastro_terceirizada.emails_por_modulo( "Dieta Especial" ) email_escola = [escola.contato.email] email_lista = emails_terceirizada + email_escola for email in email_lista: envia_email_unico( assunto=assunto, corpo="", email=email, template=template, dados_template=dados_template, html=html, ) def _aluno_matriculado_em_outra_ue(aluno, solicitacao_dieta): if aluno.escola: return aluno.escola.codigo_eol != solicitacao_dieta.escola.codigo_eol return False
[docs] def cancela_dietas_ativas_automaticamente(): dietas_ativas_comuns = ( SolicitacoesCODAE.get_autorizados_dieta_especial() .filter(tipo_solicitacao_dieta="COMUM") .order_by("pk") .distinct("pk") ) for dieta in dietas_ativas_comuns: aluno = Aluno.objects.filter(codigo_eol=dieta.codigo_eol_aluno).first() solicitacao_dieta = SolicitacaoDietaEspecial.objects.filter(pk=dieta.pk).first() if aluno.nao_matriculado: dados = dict( codigo_eol_aluno=aluno.codigo_eol, nome_aluno=aluno.nome, codigo_eol_escola_origem=solicitacao_dieta.escola.codigo_eol, nome_escola_origem=solicitacao_dieta.escola.nome, ) _gerar_log_dietas_ativas_canceladas_automaticamente( solicitacao_dieta, dados, fora_da_rede=True ) _cancelar_dieta_aluno_fora_da_rede(dieta=solicitacao_dieta) _enviar_email_para_adm_terceirizada_e_escola( solicitacao_dieta, aluno, escola=solicitacao_dieta.escola, fora_da_rede=True, ) elif _aluno_matriculado_em_outra_ue(aluno, solicitacao_dieta): dados = dict( codigo_eol_aluno=aluno.codigo_eol, nome_aluno=aluno.nome, codigo_eol_escola_destino=aluno.escola.codigo_eol, nome_escola_destino=aluno.escola.nome, nome_escola_origem=solicitacao_dieta.escola.nome, codigo_eol_escola_origem=solicitacao_dieta.escola.codigo_eol, ) _gerar_log_dietas_ativas_canceladas_automaticamente( solicitacao_dieta, dados ) _cancelar_dieta(solicitacao_dieta) _enviar_email_para_adm_terceirizada_e_escola( solicitacao_dieta, aluno, escola=solicitacao_dieta.escola ) else: continue