IOI-RUN / calendario_mensal.py
Roudrigus's picture
Upload 82 files
0f0ef8d verified
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}")