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

from datetime import datetime

import numpy as np
import pandas as pd
from django.template.loader import render_to_string

from src.escola.models import Lote
from src.relatorios.utils import html_to_pdf_file


[docs] def gera_dicionario_relatorio_recreio(solicitacoes): dados = [] for solicitacao in solicitacoes: alergias = solicitacao.alergias_intolerancias.all() alergias_lista = [a.descricao for a in alergias] if alergias else ["-"] dados_solicitacoes = { "codigo_eol_aluno": solicitacao.aluno.codigo_eol or "Aluno não matriculado", "nome_aluno": solicitacao.aluno.nome, "nome_escola": ( solicitacao.escola.nome if not solicitacao.tipo_solicitacao == solicitacao.ALUNO_NAO_MATRICULADO else "-" ), "escola_destino": ( solicitacao.escola_destino.nome if solicitacao.escola_destino else "-" ), "data_inicio": ( solicitacao.data_inicio.strftime("%d/%m/%Y") if solicitacao.data_inicio else "-" ), "data_fim": ( solicitacao.data_termino.strftime("%d/%m/%Y") if solicitacao.data_termino else "-" ), "classificacao": ( solicitacao.classificacao.nome if solicitacao.classificacao else "-" ), "alergias_intolerancias": ", ".join(alergias_lista), } dados.append(dados_solicitacoes) return dados
[docs] def gera_pdf_relatorio_recreio_nas_ferias(dados, user, lote): dre_lote = Lote.objects.get(uuid=lote) html_string = render_to_string( "relatorio_recreio_nas_ferias.html", { "dados": dados, "user": user, "total_dados": len(dados), "data_extracao": datetime.now().strftime("%d/%m/%Y"), "data_hora_geracao": datetime.now().strftime("%d/%m/%Y às %H:%M:%S"), "dre_lote": f"{dre_lote.diretoria_regional.iniciais} - {dre_lote.nome}", }, ) return html_to_pdf_file( html_string, "relatorio_recreio_nas_ferias.pdf", is_async=True )
[docs] def gera_xlsx_relatorio_recreio_nas_ferias(output, dados, lote) -> None: sheet_name = "Relatório de Recreio nas Férias" with pd.ExcelWriter(output, engine="xlsxwriter") as xlwriter: dados_formato = [ { "Cód. EOL e Nome do Aluno": f"{d['codigo_eol_aluno']} - {d['nome_aluno']}", "Unidade de Origem": d["nome_escola"], "Unidade de Destino": d["escola_destino"], "Classificação da Dieta": d["classificacao"], "Relação por Diagnóstico": d["alergias_intolerancias"], "Vigência da Dieta": f"DE {d['data_inicio']} ATÉ {d['data_fim']}", } for d in dados ] df = pd.DataFrame(dados_formato) df.insert(0, "Nº", range(1, len(df) + 1)) df_auxiliar = pd.DataFrame([[np.nan] * len(df.columns)], columns=df.columns) df = pd.concat([df_auxiliar] * 3 + [df], ignore_index=True) df.to_excel(xlwriter, sheet_name=sheet_name, index=False) workbook = xlwriter.book worksheet = xlwriter.sheets[sheet_name] merge_format = workbook.add_format( { "align": "center", "valign": "vcenter", "bg_color": "#a9d18e", "bold": True, } ) cell_format = workbook.add_format( {"align": "center", "valign": "vcenter", "bold": True, "text_wrap": True} ) single_cell_format = workbook.add_format({"bg_color": "#a9d18e"}) worksheet.set_row(0, 30) worksheet.set_row(1, 30) worksheet.set_column("B:H", 40) len_cols = len(df.columns) worksheet.merge_range( 0, 0, 0, len_cols - 1, "Relatório de Dietas Autorizadas para Recreio nas Férias", merge_format, ) worksheet.insert_image( 0, 0, "src/relatorios/static/images/logo-sigpae.png", {"x_scale": 0.05, "y_scale": 0.05}, ) dre_lote = Lote.objects.get(uuid=lote) titulo = ( f"Total de Dietas Autorizadas: {len(dados)} | " f"Para as Unidades da DRE/LOTE: {dre_lote.diretoria_regional.iniciais} - {dre_lote.nome} | " f"Data de extração do relatório: {datetime.now().strftime('%d/%m/%Y')}" ) worksheet.merge_range(1, 0, 2, len_cols - 1, titulo, cell_format) colunas = [ "Nº", "Cód. EOL e Nome do Aluno", "Unidade de Origem", "Unidade de Destino", "Classificação da Dieta", "Relação por Diagnóstico", "Vigência da Dieta", ] for idx, col in enumerate(colunas): worksheet.write(3, idx, col, single_cell_format) output.seek(0)