Source code for src.dieta_especial.management.commands.processar_planilha_protocolos_validos

from django.core.management.base import BaseCommand
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font

from src.dieta_especial.protocolo_padrao.models import (
    ProtocoloPadraoDietaEspecial,
)
from src.dieta_especial.solicitacao_dieta_especial.models import (
    SolicitacaoDietaEspecial,
)
from src.terceirizada.models import Edital


[docs] class Command(BaseCommand): help = """ Processar planilhas de devolutiva das POs para Dietas Especiais com protocolos válidos """
[docs] def extrair_dados_planilha(self): active_sheet = load_workbook("validos.xlsx").active linhas = list(active_sheet.rows) lista_objetos = [] for linha in enumerate(linhas[2:]): objeto = {} for c, coluna in enumerate(linha[1]): objeto[linhas[0][c].value] = coluna.value lista_objetos.append(objeto) return lista_objetos
[docs] def formatar_tamanho_celulas(self, ws): for column in ["A", "B", "C", "D", "E", "F"]: ws.column_dimensions[column].width = 50
[docs] def exportar_planilha(self, lista): wb = Workbook() ws = wb.active self.formatar_tamanho_celulas(ws) ws.title = "Dietas não relacionadas" cabecalho = [ "uuid", "nome protocolo na planilha", "escola", "aluno", "lote", "erro", ] for ind, title in enumerate(cabecalho, 1): celula = ws.cell(row=1, column=ind) celula.value = str(title) celula.font = Font(size="13", bold=True) for ind, dict_solicitacao in enumerate(lista, 2): ws.cell(row=ind, column=1, value=str(dict_solicitacao["uuid"])) ws.cell( row=ind, column=2, value=dict_solicitacao["nome protocolo na planilha"] ) ws.cell(row=ind, column=3, value=dict_solicitacao["escola"]) ws.cell(row=ind, column=4, value=dict_solicitacao["aluno"]) ws.cell(row=ind, column=5, value=dict_solicitacao["lote"]) ws.cell(row=ind, column=6, value=dict_solicitacao["erro"]) wb.save("relacao-planilha-validos-protocolos-com-erro.xlsx")
[docs] def handle(self, *args, **options): dados_planilha = self.extrair_dados_planilha() solicitacoes_nao_relacionadas = [] for dado in dados_planilha: solicitacao = SolicitacaoDietaEspecial.objects.filter(uuid=dado["UUID"]) if solicitacao: solicitacao = solicitacao.first() editais_uuids = solicitacao.escola.lote.contratos_do_lote.values_list( "edital__uuid", flat=True ) editais = Edital.objects.filter(uuid__in=editais_uuids) protocolos_uuids = editais.values_list( "protocolos_padroes_dieta_especial__uuid" ) nome_protocolo = dado["NOME PROTOCOLO NO DB"] if nome_protocolo == "ALERGIA - CORANTES": nome_protocolo = "ALERGIA - CORANTE" protocolos = ProtocoloPadraoDietaEspecial.objects.filter( uuid__in=protocolos_uuids, nome_protocolo=nome_protocolo ) if not protocolos: objeto = { "uuid": dado["UUID"], "nome protocolo na planilha": nome_protocolo, "escola": solicitacao.escola.nome, "aluno": solicitacao.aluno.nome, "lote": solicitacao.escola.lote.nome, "erro": "Protocolo não encontrado para o Edital e Lote da Escola ", } solicitacoes_nao_relacionadas.append(objeto) else: solicitacao.protocolo_padrao = protocolos.first() solicitacao.save() self.exportar_planilha(solicitacoes_nao_relacionadas)