lucianorabelo commited on
Commit
0b0992a
·
verified ·
1 Parent(s): 043de34

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -11
app.py CHANGED
@@ -257,7 +257,7 @@ else:
257
  except Exception as e:
258
  st.error(f"Erro no processamento: {e}")
259
 
260
- #######################################################
261
  # --- MÓDULO 3: GESTÃO DE USUÁRIOS ---
262
  #######################################################
263
  elif menu == "Gerenciar Usuários":
@@ -271,9 +271,6 @@ else:
271
 
272
  if st.form_submit_button("Salvar"):
273
  try:
274
- # --- CÁLCULO DO HORÁRIO GMT -3 ---
275
- # datetime.now() pega a hora do servidor. Subtraímos a diferença.
276
- # Se o seu servidor já estiver em GMT-3, remova o timedelta.
277
  agora_br = obter_hora_brasilia()
278
  data_operacao = agora_br.strftime('%Y-%m-%d %H:%M:%S')
279
 
@@ -286,8 +283,7 @@ else:
286
  (n_nome, n_email, gerar_hash(n_senha), n_perfil)
287
  )
288
 
289
- # --- REGISTRO DE LOG DE OPERAÇÃO COM DATA GMT -3 ---
290
- # Adicionamos a coluna 'data_operacao' explicitamente para garantir o fuso
291
  cursor.execute(
292
  """
293
  INSERT INTO app_logs_operacoes
@@ -304,20 +300,53 @@ else:
304
 
305
  conn.commit()
306
  conn.close()
307
- st.success(f"Usuário cadastrado e operação registrada às {agora_br.strftime('%H:%M:%S')}!")
 
308
 
309
  except Exception as e:
310
  st.error(f"Erro: {e}")
311
 
312
- # Listagem de usuários
313
  try:
314
  conn = get_connection()
315
- df_users = pd.read_sql("SELECT id, nome, email, perfil, ativo FROM app_usuarios", conn)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  conn.close()
317
- st.dataframe(df_users, use_container_width=True, hide_index=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
318
  except Exception as e:
319
  st.error(f"Erro ao listar usuários: {e}")
320
-
321
  #######################################################
322
  # --- MÓDULO 4: ALUNOS SEM ACESSO NO SEMESTRE ATUAL ---
323
  #######################################################
 
257
  except Exception as e:
258
  st.error(f"Erro no processamento: {e}")
259
 
260
+ #######################################################
261
  # --- MÓDULO 3: GESTÃO DE USUÁRIOS ---
262
  #######################################################
263
  elif menu == "Gerenciar Usuários":
 
271
 
272
  if st.form_submit_button("Salvar"):
273
  try:
 
 
 
274
  agora_br = obter_hora_brasilia()
275
  data_operacao = agora_br.strftime('%Y-%m-%d %H:%M:%S')
276
 
 
283
  (n_nome, n_email, gerar_hash(n_senha), n_perfil)
284
  )
285
 
286
+ # Registro de Log
 
287
  cursor.execute(
288
  """
289
  INSERT INTO app_logs_operacoes
 
300
 
301
  conn.commit()
302
  conn.close()
303
+ st.success(f"Usuário cadastrado com sucesso às {agora_br.strftime('%H:%M:%S')}!")
304
+ st.rerun() # Atualiza a lista abaixo imediatamente
305
 
306
  except Exception as e:
307
  st.error(f"Erro: {e}")
308
 
309
+ # --- LISTAGEM DE USUÁRIOS COM ÚLTIMO ACESSO E STATUS FORMATADO ---
310
  try:
311
  conn = get_connection()
312
+ # Query com JOIN para buscar o último registro de login de cada usuário
313
+ query_users = """
314
+ SELECT
315
+ u.id,
316
+ u.nome,
317
+ u.email,
318
+ u.perfil,
319
+ u.ativo,
320
+ MAX(l.data_acesso) as ultimo_acesso
321
+ FROM app_usuarios u
322
+ LEFT JOIN app_logs_acesso l ON u.id = l.usuario_id
323
+ GROUP BY u.id
324
+ ORDER BY u.nome ASC
325
+ """
326
+ df_users = pd.read_sql(query_users, conn)
327
  conn.close()
328
+
329
+ if not df_users.empty:
330
+ # 1. Ajuste do Status Ativo (1 -> Sim, 0 -> Não)
331
+ df_users['ativo'] = df_users['ativo'].map({1: 'Sim', 0: 'Não'})
332
+
333
+ # 2. Formatação da Data de Último Acesso
334
+ # Se for Nulo, exibe 'Nunca acessou', senão formata para padrão BR
335
+ df_users['ultimo_acesso'] = df_users['ultimo_acesso'].apply(
336
+ lambda x: x.strftime('%d/%m/%Y %H:%M') if pd.notnull(x) else "Nunca acessou"
337
+ )
338
+
339
+ # Renomear colunas para o cabeçalho da tabela
340
+ df_users.columns = ['ID', 'Nome', 'E-mail', 'Perfil', 'Ativo', 'Último Acesso']
341
+
342
+ st.write("### Usuários Cadastrados")
343
+ st.dataframe(df_users, use_container_width=True, hide_index=True)
344
+ else:
345
+ st.info("Nenhum usuário cadastrado.")
346
+
347
  except Exception as e:
348
  st.error(f"Erro ao listar usuários: {e}")
349
+
350
  #######################################################
351
  # --- MÓDULO 4: ALUNOS SEM ACESSO NO SEMESTRE ATUAL ---
352
  #######################################################