Update app.py
Browse files
app.py
CHANGED
|
@@ -107,7 +107,7 @@ else:
|
|
| 107 |
st.sidebar.markdown("---")
|
| 108 |
|
| 109 |
# OPÇÕES PARA TODOS OS USUÁRIOS (Consulta e Admin)
|
| 110 |
-
|
| 111 |
|
| 112 |
# OPÇÃO EXCLUSIVA PARA ADMIN
|
| 113 |
if perfil_usuario == 'admin':
|
|
@@ -342,5 +342,64 @@ else:
|
|
| 342 |
except Exception as e:
|
| 343 |
st.error(f"Erro ao carregar logs: {e}")
|
| 344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 345 |
|
| 346 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
st.sidebar.markdown("---")
|
| 108 |
|
| 109 |
# OPÇÕES PARA TODOS OS USUÁRIOS (Consulta e Admin)
|
| 110 |
+
opcoes_menu = ["Consultar Histórico", "Relatórios de Retenção", "Alunos sem Acesso", "Equipe de Apoio"]
|
| 111 |
|
| 112 |
# OPÇÃO EXCLUSIVA PARA ADMIN
|
| 113 |
if perfil_usuario == 'admin':
|
|
|
|
| 342 |
except Exception as e:
|
| 343 |
st.error(f"Erro ao carregar logs: {e}")
|
| 344 |
|
| 345 |
+
# --- MÓDULO 6: CONSULTA DE EQUIPE DE APOIO ---
|
| 346 |
+
elif menu == "Equipe de Apoio":
|
| 347 |
+
st.title("👥 Consulta de Equipe de Apoio")
|
| 348 |
+
st.write("Visualize Professores, Tutores e Coordenadores vinculados aos cursos.")
|
| 349 |
+
|
| 350 |
+
try:
|
| 351 |
+
conn = get_connection()
|
| 352 |
|
| 353 |
+
# 1. Buscar Semestres disponíveis para o primeiro filtro
|
| 354 |
+
query_semestres = "SELECT DISTINCT semestre_referencia FROM portal_alunos_flat ORDER BY semestre_referencia DESC"
|
| 355 |
+
df_semestres = pd.read_sql(query_semestres, conn)
|
| 356 |
+
lista_semestres = df_semestres['semestre_referencia'].tolist()
|
| 357 |
+
|
| 358 |
+
semestre_sel = st.selectbox("Selecione o Semestre:", lista_semestres)
|
| 359 |
+
|
| 360 |
+
if semestre_sel:
|
| 361 |
+
# 2. Buscar Cursos do semestre selecionado para o segundo filtro
|
| 362 |
+
query_cursos = f"""
|
| 363 |
+
SELECT DISTINCT nome_curso
|
| 364 |
+
FROM portal_alunos_flat
|
| 365 |
+
WHERE semestre_referencia = '{semestre_sel}'
|
| 366 |
+
ORDER BY nome_curso
|
| 367 |
+
"""
|
| 368 |
+
df_cursos = pd.read_sql(query_cursos, conn)
|
| 369 |
+
lista_cursos = ["Todos"] + df_cursos['nome_curso'].tolist()
|
| 370 |
+
|
| 371 |
+
curso_sel = st.selectbox("Selecione o Curso:", lista_cursos)
|
| 372 |
+
|
| 373 |
+
if st.button("Consultar Equipe"):
|
| 374 |
+
filtro_curso = "" if curso_sel == "Todos" else f"AND nome_curso = '{curso_sel}'"
|
| 375 |
+
|
| 376 |
+
# 3. Query Principal: Todos os papéis EXCETO Estudante
|
| 377 |
+
query_equipe = f"""
|
| 378 |
+
SELECT nome, sobrenome, email, papel, nome_curso, turmas
|
| 379 |
+
FROM portal_alunos_flat
|
| 380 |
+
WHERE semestre_referencia = '{semestre_sel}'
|
| 381 |
+
AND papel != 'Estudante'
|
| 382 |
+
{filtro_curso}
|
| 383 |
+
ORDER BY papel ASC, nome ASC
|
| 384 |
+
"""
|
| 385 |
+
|
| 386 |
+
df_equipe = pd.read_sql(query_equipe, conn)
|
| 387 |
+
|
| 388 |
+
if not df_equipe.empty:
|
| 389 |
+
st.success(f"Encontrados {len(df_equipe)} membros da equipe.")
|
| 390 |
+
|
| 391 |
+
# Exibição organizada
|
| 392 |
+
st.dataframe(df_equipe, use_container_width=True, hide_index=True)
|
| 393 |
+
|
| 394 |
+
# Exportação
|
| 395 |
+
csv = df_equipe.to_csv(index=False).encode('utf-8-sig')
|
| 396 |
+
st.download_button("📥 Baixar Lista de Contatos", csv, f"equipe_{semestre_sel}.csv", "text/csv")
|
| 397 |
+
else:
|
| 398 |
+
st.warning("Nenhum membro de equipe encontrado para os critérios selecionados.")
|
| 399 |
+
|
| 400 |
+
conn.close()
|
| 401 |
+
|
| 402 |
+
except Exception as e:
|
| 403 |
+
st.error(f"Erro ao consultar equipe: {e}")
|
| 404 |
+
|
| 405 |
+
|