def cria_subprefeituras(): # Possui FK e M2M dict_lote = le_dados(data_lotes, 'iniciais') dict_dre = le_dados(data_diretorias_regionais, 'codigo_eol') for item in progressbar(data_subprefeituras, 'Subprefeitura'): # Não tem lote nos dados originais. lote = get_modelo( modelo=Lote, modelo_id=item.get('lote'), dicionario=dict_lote, campo_unico='iniciais' ) subprefeitura, created = Subprefeitura.objects.get_or_create( nome=item['nome'], lote=lote ) if not created: ja_existe('Subprefeitura', item['nome']) adiciona_m2m_items( campo_m2m=subprefeitura.diretoria_regional, dicionario_m2m=item.get('diretoria_regional'), modelo=DiretoriaRegional, dicionario=dict_dre, campo_unico='codigo_eol' )
def cria_motivo_alteracao_ue(): for item in progressbar(data_motivo_alteracao_ue, 'Motivo Alteração de UE'): _, created = MotivoAlteracaoUE.objects.get_or_create( nome=item, descricao='Lorem ipsum.') if not created: ja_existe('MotivoAlteracaoUE', item)
def cria_tipo_informacao_nutricional(): for item in progressbar(data_tipo_informacao_nutricional, 'Tipo de Informacao Nutricional'): # noqa _, created = TipoDeInformacaoNutricional.objects.get_or_create( nome=item['nome']) if not created: ja_existe('TipoDeInformacaoNutricional', item['nome'])
def escreve_xlsx_dados_sigpae(items, arquivo_saida): # noqa C901 wb = openpyxl.load_workbook(arquivo_saida) ws = wb.create_sheet('Dados do SIGPAE para as escolas da planilha') ws['A1'] = 'codigo_eol_escola' ws['B1'] = 'nome_da_escola' ws['C1'] = 'nome_dre' ws['D1'] = 'lote' ws['E1'] = 'tipo_gestao' ws['F1'] = 'contato_email' ws['G1'] = 'contato_telefone' ws['H1'] = 'contato_telefone2' ws['I1'] = 'contato_celular' i = 0 # indice criado manualmente pra não inserir linhas em branco na planilha. for item in progressbar(items, 'Escrevendo...'): escola = Escola.objects.filter(codigo_eol=item).first() if escola: ws[f'A{i+2}'] = escola.codigo_eol ws[f'B{i+2}'] = escola.nome if escola.diretoria_regional: ws[f'C{i+2}'] = escola.diretoria_regional.nome if escola.lote: ws[f'D{i+2}'] = escola.lote.nome if escola.tipo_gestao: ws[f'E{i+2}'] = escola.tipo_gestao.nome if escola.contato: ws[f'F{i+2}'] = escola.contato.email ws[f'G{i+2}'] = escola.contato.telefone ws[f'H{i+2}'] = escola.contato.telefone2 ws[f'I{i+2}'] = escola.contato.celular i += 1 wb.save(arquivo_saida)
def cria_escola(arquivo, legenda): lista_auxiliar = [] arquivo = f'{ROOT_DIR}/{arquivo}' items = csv_to_list(arquivo) # Padroniza os dados items = padroniza_dados(items) items_codigo_eol = [item['EOL'] for item in items] # Procura por todos os itens repetidos no banco, # e retorna uma lista de codigo_eol... escolas = Escola.objects\ .filter(codigo_eol__in=items_codigo_eol)\ .values_list('codigo_eol', flat=True) # E insere somente os itens faltantes. escolas_faltantes = [item for item in items if item['EOL'] not in escolas] if escolas_faltantes: for item in progressbar(escolas_faltantes, legenda): # noqa # Corrige o nome da DRE dre_nome = f"DIRETORIA REGIONAL DE EDUCACAO {item.get('DRE')}" tipo_ue_iniciais = item.get('TIPO DE U.E') lote_sigla = item.get('SIGLA/LOTE') email = item.get('E-MAIL').strip().lower() or '' telefone1 = somente_digitos(item.get('TELEFONE')) telefone2 = somente_digitos(item.get('TELEFONE2')) dre_obj, created_dre = DiretoriaRegional.objects.get_or_create(nome=dre_nome) # noqa tipo_ue_obj, created_ue = TipoUnidadeEscolar.objects.get_or_create(iniciais=tipo_ue_iniciais) # noqa tipo_gestao = TipoGestao.objects.get(nome='TERC TOTAL') lote_obj = Lote.objects.filter(iniciais=lote_sigla).first() or None if telefone1 or telefone2 or email: contato_obj = Contato.objects.filter( Q(telefone=telefone1) | Q(telefone2=telefone2) | Q(email=email) ).first() tipo_ue = item.get('TIPO DE U.E') nome = item.get('NOME') # Instancia o objeto Escola. data = dict( nome=f'{tipo_ue} {nome}', codigo_eol=item.get('EOL'), diretoria_regional=dre_obj, tipo_unidade=tipo_ue_obj, tipo_gestao=tipo_gestao, ) if lote_obj: data['lote'] = lote_obj if contato_obj: data['contato'] = contato_obj escola_obj = Escola(**data) lista_auxiliar.append(escola_obj) Escola.objects.bulk_create(lista_auxiliar)
def cria_alimento_proprio(): marcas = Marca.objects.all() for item in progressbar(data_alimentos_proprios_codae, 'Alimento próprio'): marca = choice(marcas) _, created = AlimentoProprio.objects.get_or_create(nome=item, marca=marca) if not created: ja_existe('Alimento próprio', item)
def cria_classificacoes_dieta(): for item in progressbar(data_classificacoes_dieta, 'Classificacao Dieta'): _, created = ClassificacaoDieta.objects.get_or_create( nome=item['nome'], descricao=item['descricao'], ) if not created: ja_existe('ClassificacaoDieta', item)
def cria_marca(): # Deleta produtos e marcas. Produto.objects.all().delete() Marca.objects.all().delete() # Cria marcas novas. for item in progressbar(data_marcas, 'Marca'): nome = item Marca.objects.create(nome=nome)
def escreve_xlsx_codescola_nao_existentes(codescola_nao_existentes, arquivo_saida): wb = openpyxl.load_workbook(arquivo_saida) ws = wb.create_sheet('CodEscola não existentes em unidades_da_rede...') ws['A1'] = 'CodEscola' for i, item in enumerate( progressbar(list(codescola_nao_existentes), 'Escrevendo...')): ws[f'A{i+2}'] = str(item) wb.save(arquivo_saida)
def escreve_xlsx_protocolo_dieta_inexistentes(protocolo_dieta_inexistentes, arquivo_saida): wb = openpyxl.load_workbook(arquivo_saida) ws = wb.create_sheet('ProtocoloDieta inexistentes') ws['A1'] = 'protocolo_dieta' for i, item in enumerate( progressbar(list(protocolo_dieta_inexistentes), 'Escrevendo...')): ws[f'A{i+2}'] = str(item) wb.save(arquivo_saida)
def escreve_xlsx_cod_diagnostico_inexistentes(cod_diagnostico_inexistentes, arquivo_saida): wb = openpyxl.load_workbook(arquivo_saida) ws = wb.create_sheet('CodDiagnostico inexistentes') ws['A1'] = 'cod_diagnostico' for i, item in enumerate( progressbar(list(cod_diagnostico_inexistentes), 'Escrevendo...')): ws[f'A{i+2}'] = str(item) wb.save(arquivo_saida)
def cria_perfis(): for item in progressbar(data_perfis, 'Perfil'): _, created = Perfil.objects.get_or_create( nome=item['nome'], ativo=item['ativo'], super_usuario=item['super_usuario'], ) if not created: ja_existe('Perfil', item['nome'])
def escreve_xlsx_alunos_com_nascimento_diferente(lista, arquivo_saida): wb = openpyxl.load_workbook(arquivo_saida) ws = wb.create_sheet('Alunos com nascimento diferente do EOL') ws['A1'] = 'nascimento_planilha' ws['B1'] = 'nascimento_eol' for i, item in enumerate(progressbar(lista, 'Escrevendo...')): ws[f'A{i+2}'] = str(item[0]) ws[f'B{i+2}'] = str(item[1]) wb.save(arquivo_saida)
def cria_kit_lanche(): # Valores randomicos items = list(ItemKitLanche.objects.all()) # Deleta kits existentes KitLanche.objects.all().delete() for i in progressbar(range(1, 11), 'Kit Lanche'): kit_amostra = sample(items, 3) kit_lanche = KitLanche.objects.create(nome=f'Kit {i}') for kit in kit_amostra: kit_lanche.itens.add(kit)
def cria_edital(): for item in progressbar(data_editais, 'Edital'): _, created = Edital.objects.get_or_create( numero=item['numero'], tipo_contratacao=item['tipo_contratacao'], processo=item['processo'], objeto=item['objeto'], ) if not created: ja_existe('Edital', item['numero'])
def cria_alergia_intolerancias(): for item in progressbar(data_alergia_intolerancias, 'Alergia Intolerancia'): # noqa obj = AlergiaIntolerancia.objects.filter(descricao=item).first() if not obj: AlergiaIntolerancia.objects.create(descricao=item) else: nome = item print( f'{bcolors.FAIL}Aviso: AlergiaIntolerancia: "{nome}" já existe!{bcolors.ENDC}' ) # noqa
def cria_terceirizadas(): for item in progressbar(data_terceirizadas, 'Terceirizada'): terceirizada, created = Terceirizada.objects.get_or_create( cnpj=item['cnpj'], nome_fantasia=item['nome_fantasia'], razao_social=item['razao_social'], representante_legal=item['representante_legal'], representante_telefone=item['representante_telefone'], representante_email=item['representante_email'], ) if not created: ja_existe('Terceirizada', item['cnpj'])
def cria_diretorias_regionais(): for item in progressbar(data_diretorias_regionais, 'Diretoria Regional'): obj = DiretoriaRegional.objects.filter(codigo_eol=item['codigo_eol']).first() # noqa if not obj: DiretoriaRegional.objects.create( nome=item['nome'], iniciais=item['iniciais'], codigo_eol=item['codigo_eol'], ) else: nome = item['nome'] print(f'{bcolors.FAIL}Aviso: DiretoriaRegional: "{nome}" já existe!{bcolors.ENDC}') # noqa
def cria_diagnosticos(): # Protocolo de Dieta Especial usuario_codae = Usuario.objects.get(email='*****@*****.**') for item in progressbar(data_protocolo_de_dieta_especial, 'Protocolo de Dieta Especial'): # noqa obj = ProtocoloDeDietaEspecial.objects.filter(nome=item).first() if not obj: ProtocoloDeDietaEspecial.objects.create( nome=item, criado_por=usuario_codae ) else: nome = item print(f'{bcolors.FAIL}Aviso: ProtocoloDeDietaEspecial: "{nome}" já existe!{bcolors.ENDC}') # noqa
def escreve_xlsx(codigo_eol_escola_nao_existentes): wb = openpyxl.Workbook() with NamedTemporaryFile() as tmp: ws = wb.create_sheet( 'Código EOL das Escolas não identificadas no SIGPAE') ws['A1'] = 'codigo_eol_escola' for i, item in enumerate( progressbar(list(codigo_eol_escola_nao_existentes), 'Escrevendo...')): ws[f'A{i+2}'] = str(item) nome_excel_tempfile = f'{tmp.name}.xlsx' wb.save(nome_excel_tempfile) output = BytesIO(save_virtual_workbook(wb)) return output, nome_excel_tempfile
def cria_vinculo_tipo_alimentacao_com_periodo_escolar_e_tipo_unidade_escolar(): # Percorre todos os tipos de unidade escolar e todos os periodos escolares. VinculoTipoAlimentacaoComPeriodoEscolarETipoUnidadeEscolar.objects.all().delete() # noqa tipo_unidade_escolares = TipoUnidadeEscolar.objects.all() periodo_escolares = PeriodoEscolar.objects.all() aux = [] for tipo_unidade_escolar in progressbar(tipo_unidade_escolares, 'VinculoTipoAlimentacaoComPeriodoEscolarETipoUnidadeEscolar'): # noqa for periodo_escolar in periodo_escolares: obj = VinculoTipoAlimentacaoComPeriodoEscolarETipoUnidadeEscolar( tipo_unidade_escolar=tipo_unidade_escolar, periodo_escolar=periodo_escolar, ) aux.append(obj) VinculoTipoAlimentacaoComPeriodoEscolarETipoUnidadeEscolar.objects.bulk_create(aux) # noqa
def cria_informacao_nutricional(): dict_tipo_nutricional = le_dados(data_tipo_informacao_nutricional) for item in progressbar(data_informacao_nutricional, 'Informacao Nutricional'): # noqa tipo_nutricional = get_modelo(modelo=TipoDeInformacaoNutricional, modelo_id=item.get('tipo_nutricional'), dicionario=dict_tipo_nutricional, campo_unico='nome') data = dict(nome=item.get('nome'), tipo_nutricional=tipo_nutricional, medida=item.get('medida')) _, created = InformacaoNutricional.objects.get_or_create(**data) if not created: ja_existe('InformacaoNutricional', item['nome'])
def escreve_xlsx_alunos_nao_matriculados_na_escola( alunos_nao_matriculados_na_escola_lista, arquivo_saida): wb = openpyxl.load_workbook(arquivo_saida) ws = wb.create_sheet('Código EOL dos Alunos não matriculados na escola') ws['A1'] = 'codigo_eol_aluno' ws['B1'] = 'nome_aluno' ws['C1'] = 'codigo_eol_escola' for i, item in enumerate( progressbar(list(alunos_nao_matriculados_na_escola_lista), 'Escrevendo...')): ws[f'A{i+2}'] = str(item[0]) ws[f'B{i+2}'] = str(item[1]) ws[f'C{i+2}'] = str(item[2]) wb.save(arquivo_saida) return arquivo_saida
def cria_combo_do_vinculo_tipo_alimentacao_periodo_tipo_ue(): ComboDoVinculoTipoAlimentacaoPeriodoTipoUE.objects.all().delete() vinculos = VinculoTipoAlimentacaoComPeriodoEscolarETipoUnidadeEscolar.objects.all() tipos_alimentacoes = list(TipoAlimentacao.objects.all()) for vinculo in progressbar(vinculos, 'ComboDoVinculoTipoAlimentacaoPeriodoTipoUE'): # Cria vários combos para cada vinculo. for _ in range(randint(5, 10)): obj = ComboDoVinculoTipoAlimentacaoPeriodoTipoUE.objects.create(vinculo=vinculo) tipos_amostra = sample(tipos_alimentacoes, randint(1, 3)) for item in tipos_amostra: obj.tipos_alimentacao.add(item) # Cria um combo específico para lanche e outro para refeição. tipos_alimentacoes2 = list(TipoAlimentacao.objects.filter(nome__in=('lanche', 'refeição'))) for tipo in tipos_alimentacoes2: obj = ComboDoVinculoTipoAlimentacaoPeriodoTipoUE.objects.create(vinculo=vinculo) obj.tipos_alimentacao.add(tipo)
def cria_substituicao_do_combo_do_vinculo_tipo_alimentacao_periodo_tipo_ue(): SubstituicaoDoComboDoVinculoTipoAlimentacaoPeriodoTipoUE.objects.all().delete() combos = ComboDoVinculoTipoAlimentacaoPeriodoTipoUE.objects.all() tipos_alimentacoes = list(TipoAlimentacao.objects.exclude(nome__in=('lanche', 'refeição'))) for combo in progressbar(combos, 'SubstituicaoDoComboDoVinculoTipoAlimentacaoPeriodoTipoUE'): obj = SubstituicaoDoComboDoVinculoTipoAlimentacaoPeriodoTipoUE.objects.create(combo=combo) tipos_amostra = sample(tipos_alimentacoes, randint(1, 3)) tipos_alimentacao_list = [item[1] for item in combo.tipos_alimentacao.values_list()] for item in tipos_amostra: if len(tipos_alimentacao_list) == 1 and 'lanche' in tipos_alimentacao_list: refeicao = TipoAlimentacao.objects.filter(nome='refeição').first() obj.tipos_alimentacao.add(refeicao) elif len(tipos_alimentacao_list) == 1 and 'refeição' in tipos_alimentacao_list: lanche = TipoAlimentacao.objects.filter(nome='lanche').first() obj.tipos_alimentacao.add(lanche) else: obj.tipos_alimentacao.add(item)
def cria_escola_com_periodo_escolar(): # Percorre todas as escolas e todos os períodos. # Deleta tudo antes EscolaPeriodoEscolar.objects.all().delete() escolas = Escola.objects.all() periodos_escolares = PeriodoEscolar.objects.all() aux = [] for escola in progressbar(escolas, 'Escola Periodo Escolar'): for periodo_escolar in periodos_escolares: obj = EscolaPeriodoEscolar( escola=escola, periodo_escolar=periodo_escolar, quantidade_alunos=randint(100, 500), horas_atendimento=choice([4, 8, 12]), ) aux.append(obj) EscolaPeriodoEscolar.objects.bulk_create(aux)
def cria_tipo_unidade_escolar(arquivo): # Pega somente a coluna 'TIPO DE U.E' iniciais = 'TIPO DE U.E' arquivo = f'{ROOT_DIR}/{arquivo}' items = csv_to_list(arquivo) items_iniciais = [item[iniciais] for item in items] # Procura por todos os itens repetidos no banco, # e retorna uma lista de iniciais... tipo_unidade_escolares = TipoUnidadeEscolar.objects\ .filter(iniciais__in=items_iniciais)\ .values_list('iniciais', flat=True) # E insere somente os itens faltantes. itens_faltantes = set(items_iniciais) - set(tipo_unidade_escolares) if itens_faltantes: for iniciais in progressbar(itens_faltantes, 'Tipo Unidade Escolar'): TipoUnidadeEscolar.objects.create(iniciais=iniciais)
def cria_usuarios(): for usuario in progressbar(USUARIOS, 'Usuario'): if Usuario.objects.filter(email=usuario['email']).first(): print(f"{bcolors.FAIL}Usuário {usuario['email']} já existe!{bcolors.ENDC}") # noqa else: Usuario.objects.create_superuser( email=usuario['email'], password=usuario['password'], cpf=usuario['cpf'], registro_funcional=usuario['registro_funcional'], nome=usuario['nome'], crn_numero=usuario.get('crn_numero'), cargo=usuario.get('cargo'), ) try: user = Usuario.objects.get(email='*****@*****.**') Token.objects.get_or_create(user=user) except ObjectDoesNotExist: print(f"{bcolors.FAIL}Usuário [email protected]' não existe!{bcolors.ENDC}") # noqa
def _atualiza_alunos_da_escola(self, escola, dados_escola, progress_bar=None): novos_alunos = [] # Remove dicionários duplicados da lista. # Aconteceu na escola codigo_eol 012874. registros = [ dict(t) for t in {tuple(d.items()) for d in dados_escola['results']} ] if progress_bar: registros = progressbar(registros, 'Alunos') for registro in registros: aluno = Aluno.objects.filter( codigo_eol=registro['cd_aluno']).first() data_nascimento = registro['dt_nascimento_aluno'].split('T')[0] periodo = self.PERIODOS[registro['dc_tipo_turno'].strip()] periodo_escolar = PeriodoEscolar.objects.get(nome=periodo) serie = registro['dc_turma_escola'].strip() if aluno: aluno.nome = registro['nm_aluno'].strip() aluno.codigo_eol = registro['cd_aluno'] aluno.data_nascimento = data_nascimento aluno.escola = escola aluno.periodo_escolar = periodo_escolar aluno.serie = serie aluno.save() else: obj_aluno = Aluno(nome=registro['nm_aluno'].strip(), codigo_eol=registro['cd_aluno'], data_nascimento=data_nascimento, escola=escola, periodo_escolar=periodo_escolar, serie=serie) novos_alunos.append(obj_aluno) Aluno.objects.bulk_create(novos_alunos)
def cria_contatos_escola(arquivo): arquivo = f'{ROOT_DIR}/{arquivo}' items = csv_to_list(arquivo) for item in progressbar(items, 'Contatos Escola'): _email = item.get('E-MAIL').strip().lower() or '' email = _email if email_valido(_email) else '' telefone1 = somente_digitos(item.get('TELEFONE')) if 8 < len(telefone1) > 10: telefone1 = None telefone2 = somente_digitos(item.get('TELEFONE2')) if 8 < len(telefone2) > 10: telefone2 = None if telefone1 or telefone2 or email: Contato.objects.get_or_create( telefone=telefone1, telefone2=telefone2, email=email, )