File size: 2,376 Bytes
a01c266
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2f5902a
a01c266
2f5902a
a01c266
 
 
 
 
 
 
826d110
a01c266
 
 
2f5902a
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
import streamlit as st
import datetime
import pronotepy
import uuid

def app(client):
    st.title('📚 Devoirs')

    # Sélection de la semaine
    selected_week = st.date_input("Sélectionnez une semaine", value=datetime.date.today())
    start_week = selected_week - datetime.timedelta(days=selected_week.weekday())
    end_week = start_week + datetime.timedelta(days=4)  # Fin de la semaine au vendredi

    # Récupération des devoirs pour la semaine sélectionnée
    homeworks = client.homework(start_week, end_week)

    # Création des onglets par jour de la semaine + À faire et Déjà fait
    tabs = st.tabs(["🔴 À faire durant la semaine", "1️⃣ Lundi", "2️⃣ Mardi", "3️⃣ Mercredi", "4️⃣ Jeudi", "5️⃣ Vendredi", "🟢 Déjà fait durant la semaine"])
    days = [start_week + datetime.timedelta(days=i) for i in range(5)]

    with tabs[0]:  # À faire durant la semaine
        homeworks_to_do = [hw for hw in homeworks if not hw.done]
        display_homework_list(homeworks_to_do, client)

    with tabs[6]:  # Déjà fait durant la semaine
        homeworks_done = [hw for hw in homeworks if hw.done]
        display_homework_list(homeworks_done, client)

    for i, tab in enumerate(tabs[1:5]):  # Boucle sur les jours de la semaine
        with tab:
            daily_homeworks = [hw for hw in homeworks if hw.date == days[i]]
            display_homework_list(daily_homeworks, client)

def display_homework_list(homeworks, client):
    for homework in homeworks:
        with st.expander(f"{'✅' if homework.done else '❌'} | {homework.subject.name} - *pour le {homework.date.strftime('%d/%m/%Y')}*"):
            st.markdown(f"""
                - **Statut :** {"Fait" if homework.done else "À faire"}
                - **Description :** {homework.description}
                """, unsafe_allow_html=True)

            # Generate a unique key for each button using uuid
            unique_key = str(uuid.uuid4())  # Generate a unique key
            
            # Use the unique key for the button to avoid DuplicateWidgetID error
            st.button("✅ Marquer comme fait" if not homework.done else "❌ Marquer comme à faire", key=unique_key, on_click=update_homework_status, args=(homework, client))

def update_homework_status(homework, client):
    new_status = not homework.done
    homework.set_done(new_status)