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

import numpy as np

from src.dieta_especial.protocolo_padrao.models import (
    ProtocoloPadraoDietaEspecial,
)
from src.dieta_especial.solicitacao_dieta_especial.models import (
    ClassificacaoDieta,
)
from src.escola.models import Lote


[docs] def build_titulo(lotes, status, classificacoes, protocolos, data_inicial, data_final): titulo = ( f'Dietas {"Autorizadas" if status.upper() == "AUTORIZADAS" else "Canceladas"}:' ) if lotes: nomes_lotes = ",".join( [lote.nome for lote in Lote.objects.filter(uuid__in=lotes)] ) titulo += f" | {nomes_lotes}" if classificacoes: nomes_classificacoes = ",".join( [ classificacao.nome for classificacao in ClassificacaoDieta.objects.filter( id__in=classificacoes ) ] ) titulo += f" | Classificação(ões) da dieta: {nomes_classificacoes}" if protocolos: nomes_protocolos = ", ".join( [ protocolo.nome_protocolo for protocolo in ProtocoloPadraoDietaEspecial.objects.filter( uuid__in=protocolos ) ] ) titulo += f" | Protocolo(s) padrão(ões): {nomes_protocolos}" if data_inicial: titulo += f" | Data inicial: {data_inicial}" if data_final: titulo += f" | Data final: {data_final}" return titulo
[docs] def build_xlsx_relatorio_terceirizadas( output, serializer, queryset, status, lotes, classificacoes, protocolos, data_inicial, data_final, exibir_diagnostico=False, ): import pandas as pd with pd.ExcelWriter(output, engine="xlsxwriter") as xlwriter: df = pd.DataFrame(serializer.data) # Adiciona linhas em branco no comeco do arquivo df_auxiliar = pd.DataFrame([[np.nan] * len(df.columns)], columns=df.columns) df = pd.concat([df_auxiliar, df], ignore_index=True) df = pd.concat([df_auxiliar, df], ignore_index=True) df = pd.concat([df_auxiliar, df], ignore_index=True) df.to_excel(xlwriter, "Solicitações de dieta especial") workbook = xlwriter.book worksheet = xlwriter.sheets["Solicitações de dieta especial"] worksheet.set_row(0, 30) worksheet.set_row(1, 30) is_autorizadas = status.upper() == "AUTORIZADAS" ultima_coluna = "I" if is_autorizadas else "G" worksheet.set_column(f"B:{ultima_coluna}", 30) merge_format = workbook.add_format({"align": "center", "bg_color": "#a9d18e"}) merge_format.set_align("vcenter") cell_format = workbook.add_format() cell_format.set_text_wrap() cell_format.set_align("vcenter") v_center_format = workbook.add_format() v_center_format.set_align("vcenter") single_cell_format = workbook.add_format({"bg_color": "#a9d18e"}) len_cols = len(df.columns) worksheet.merge_range( 0, 0, 0, len_cols, "Relatório de dietas especiais", merge_format ) titulo = build_titulo( lotes, status, classificacoes, protocolos, data_inicial, data_final ) worksheet.merge_range(1, 0, 2, len_cols - 1, titulo, cell_format) worksheet.merge_range( 1, len_cols, 2, len_cols, f"Total de dietas: {queryset.count()}", v_center_format, ) worksheet.write(3, 1, "COD.EOL do Aluno", single_cell_format) worksheet.write(3, 2, "Nome do Aluno", single_cell_format) col_index = 3 if is_autorizadas: worksheet.write(3, col_index, "Data de Nascimento", single_cell_format) col_index += 1 worksheet.write(3, col_index, "Nome da Escola", single_cell_format) col_index += 1 worksheet.write(3, col_index, "Classificação da dieta", single_cell_format) col_index += 1 worksheet.write( 3, col_index, "Relação por Diagnóstico" if exibir_diagnostico else "Protocolo", single_cell_format, ) col_index += 1 if is_autorizadas and exibir_diagnostico: worksheet.write(3, col_index, "Protocolo", single_cell_format) col_index += 1 worksheet.write(3, col_index, "Data da autorização", single_cell_format) col_index += 1 if status.upper() == "CANCELADAS": worksheet.set_column("H:H", 30) worksheet.write(3, col_index, "Data de cancelamento", single_cell_format) df.reset_index(drop=True, inplace=True) output.seek(0)