import streamlit as st import calendar from datetime import date from banco import SessionLocal from models import EventoCalendario from utils_permissoes import verificar_permissao from utils_datas import formatar_data_br def main(): if not verificar_permissao("calendario"): st.error("⛔ Acesso não autorizado.") return usuario = st.session_state.get("usuario") if not usuario: st.error("Usuário não autenticado.") return st.title("📆 Agenda Mensal") hoje = date.today() col1, col2 = st.columns(2) with col1: ano = st.selectbox("Ano", range(hoje.year - 2, hoje.year + 3), index=2) with col2: mes = st.selectbox("Mês", range(1, 13), index=hoje.month - 1) db = SessionLocal() try: eventos = ( db.query(EventoCalendario) .filter(EventoCalendario.usuario_criacao == usuario) .filter(EventoCalendario.data_evento.between( date(ano, mes, 1), date(ano, mes, calendar.monthrange(ano, mes)[1]) )) .filter(EventoCalendario.ativo.is_(True)) .all() ) finally: db.close() eventos_por_dia = {} for e in eventos: eventos_por_dia.setdefault(e.data_evento.day, []).append(e) st.divider() semanas = calendar.monthcalendar(ano, mes) dias_semana = ["Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"] st.columns(7) for d in dias_semana: st.markdown(f"**{d}**") for semana in semanas: cols = st.columns(7) for idx, dia in enumerate(semana): with cols[idx]: if dia == 0: st.write("") else: st.markdown(f"### {dia}") for ev in eventos_por_dia.get(dia, []): st.caption(f"📌 {ev.titulo}")