File size: 2,892 Bytes
a01c266
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from pronotepy import Client
import datetime

def app(client: Client):
    st.title('ℹ️ Informations et Enquêtes')

    # Barre de recherche au-dessus des onglets
    search_query = st.text_input("🔍 Recherche", "")

    try:
        # Récupérer toutes les informations
        informations = client.information_and_surveys()

        # Définir les noms des onglets, avec "Toutes les infos" en premier
        mois_annee_scolaire_noms = ["✨ Toutes les infos", "1️⃣ Septembre", "2️⃣ Octobre", "3️⃣ Novembre", "4️⃣ Décembre",
                                    "5️⃣ Janvier", "6️⃣ Février", "7️⃣ Mars", "8️⃣ Avril", "9️⃣ Mai", "🔟 Juin", "🔟 Juillet"]

        # Créer dynamiquement les onglets
        tabs = st.tabs(mois_annee_scolaire_noms)

        for i, tab in enumerate(tabs):
            with tab:
                if i == 0:  # Pour l'onglet "Toutes les infos"
                    display_monthly_info(informations, search_query)
                else:  # Pour les mois de septembre à juillet
                    mois = i + 8 if i < 5 else i - 4  # Ajustement pour l'année scolaire
                    infos_du_mois = [info for info in informations if info.creation_date and info.creation_date.month == mois]
                    display_monthly_info(infos_du_mois, search_query)

    except Exception as e:
        st.error("⚠️ Une erreur s'est produite lors de la récupération des informations.")
        st.error(str(e))


def display_monthly_info(informations, search_query):
    filtered_infos = search_informations(informations, search_query)
    sorted_infos = sorted(filtered_infos, key=lambda x: x.creation_date, reverse=True)

    if not sorted_infos:  # Vérifier si la liste filtrée est vide
        st.info("🔴 Aucune information trouvée.")
    else:
        for info in sorted_infos:
            display_information(info)

def search_informations(informations, query):
    return [info for info in informations if query.lower() in (info.content or '').lower()
            or query.lower() in (info.category or '').lower()
            or query.lower() in (info.author or '').lower()
            or query in (info.creation_date.strftime('%Y-%m-%d') if info.creation_date else '')]


def display_information(info):
    creation_date = info.creation_date.strftime('%Y-%m-%d') if info.creation_date else 'Inconnue'
    content_formatted = info.content.replace('\n', '<br>')

    with st.expander(f"{info.title} - {info.author}", expanded=not info.read):
        st.markdown(f"""
- _**Auteur**: {info.author} | **Date de Création**: {creation_date} | **Catégorie**: {info.category}_
---
{content_formatted}
""", unsafe_allow_html=True)
        if not info.read:
            if st.button('Marquer comme lu', key=info.id):
                info.mark_as_read(True)
                st.rerun()