File size: 2,955 Bytes
0f0ef8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

import streamlit as st
from banco import SessionLocal
from models import LogAcesso, Usuario
import pandas as pd
from io import BytesIO
import os

# Debug opcional – confirma o banco em uso
print("📂 BANCO LIDO NA AUDITORIA:", os.path.abspath("load.db"))


def main():
    st.title("🧾 Auditoria do Sistema Load")

    db = SessionLocal()

    try:
        # =========================
        # FILTRO POR PERFIL
        # =========================
        perfis = (
            db.query(Usuario.perfil)
            .distinct()
            .order_by(Usuario.perfil)
            .all()
        )

        lista_perfis = ["Todos"] + [p[0] for p in perfis]

        perfil_selecionado = st.selectbox(
            "Filtrar por perfil:",
            lista_perfis
        )

        # =========================
        # CONSULTA COM JOIN
        # =========================
        # ✅ Incluímos o e-mail do usuário na seleção
        query = (
            db.query(
                LogAcesso.usuario,
                Usuario.perfil,
                Usuario.email,  # <-- novo
                LogAcesso.acao,
                LogAcesso.tabela,
                LogAcesso.registro_id,
                LogAcesso.data_hora
            )
            .join(Usuario, Usuario.usuario == LogAcesso.usuario)
            .order_by(LogAcesso.data_hora.desc())
        )

        if perfil_selecionado != "Todos":
            query = query.filter(Usuario.perfil == perfil_selecionado)

        logs = query.all()

        if not logs:
            st.info("Nenhum registro encontrado.")
            return

        # =========================
        # DATAFRAME FORMATADO
        # =========================
        dados = []
        for l in logs:
            # l = (usuario, perfil, email, acao, tabela, registro_id, data_hora)
            dados.append({
                "Usuário": l[0],
                "Perfil": l[1],
                "E-mail": l[2] or "—",  # ✅ e-mail pode ser nulo
                "Ação": l[3],
                "Tabela": l[4],
                "Registro": l[5],
                "Data": l[6].strftime("%d/%m/%Y"),
                "Hora": l[6].strftime("%H:%M:%S"),
            })

        df = pd.DataFrame(dados)

        st.dataframe(df, use_container_width=True)

        # =========================
        # EXPORTAÇÃO PARA EXCEL
        # =========================
        buffer = BytesIO()
        with pd.ExcelWriter(buffer, engine="openpyxl") as writer:
            df.to_excel(writer, index=False, sheet_name="Auditoria")

        st.download_button(
            label="📥 Exportar Auditoria para Excel",
            data=buffer.getvalue(),
            file_name="auditoria_sistema.xlsx",
            mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        )

    finally:
        db.close()