| 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}") | |