File size: 6,869 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import streamlit as st
from pronotepy import Client
import datetime

def afficher_details_periode(client: Client, nom_periode: str):
    if nom_periode == "Année entière":
        absences = [absence for periode in client.periods for absence in periode.absences]
        retards = [retard for periode in client.periods for retard in periode.delays]
        punitions = [punition for periode in client.periods for punition in periode.punishments]
    else:
        periode = next((p for p in client.periods if p.name == nom_periode), None)
        if periode:
            absences = periode.absences
            retards = periode.delays
            punitions = periode.punishments
            rapports = [periode.report] if periode.report else []
        else:
            absences, retards, punitions, rapports = [], [], [], []
    
    # Affichage des informations
    afficher_absences(absences)
    afficher_retards(retards)
    afficher_punitions(punitions)
    if rapports:
        afficher_rapports(rapports)
    else:
        st.info("🔴 Aucun rapport disponible pour cette période.")

def afficher_absences(absences):
    if absences:
        for absence in absences:
            with st.expander(f"🚫 Absence du {absence.from_date.strftime('%d/%m/%Y')} au {absence.to_date.strftime('%d/%m/%Y')}"):
                st.write(f"🕒 Heures manquées: {absence.hours}")
                st.write(f"📆 Jours manqués: {absence.days}")
                st.write(f"✅ Justifiée: {'Oui' if absence.justified else 'Non'}")
                st.write(f"📝 Raisons: {', '.join(absence.reasons)}")
    else:
        st.info("🔴 Aucune absence enregistrée pour cette période.")

def afficher_retards(retards):
    if retards:
        for retard in retards:
            with st.expander(f"⏰ Retard le {retard.date.strftime('%d/%m/%Y')}"):
                st.write(f"⏳ Minutes manquées: {retard.minutes}")
                st.write(f"✅ Justifié: {'Oui' if retard.justified else 'Non'}")
                st.write(f"📜 Justification: {retard.justification}")
                st.write(f"📝 Raisons: {', '.join(retard.reasons)}")
    else:
        st.info("🔴 Aucun retard enregistré pour cette période.")

def afficher_punitions(punitions):
    if punitions:
        for punition in punitions:
            with st.expander(f"🚨 Punition: {punition.nature} le {punition.given.strftime('%d/%m/%Y')}"):
                st.write(f"🔹 Donnée par: {punition.giver}")
                st.write(f"🔸 Raisons: {', '.join(punition.reasons)}")
    else:
        st.info("🔴 Aucune punition enregistrée pour cette période.")

subject_emojis = {
    'ANGLAIS LV SECTION': '🇬🇧',
    'FRANCAIS': '🇫🇷',
    'EPS': '🏃‍♂️',
    'Sport': '🏃‍♂️',
    'Histoire/Géographie': '🌍',
    'HIST/GEO': '🌍',
    'Mathématiques': '🔢',
    'MATHS': '🔢',
    'PH-CHIMIE': '🧪',
    'Physique-Chimie': '🧪',
    'ANGLAIS LV1': '🇬🇧',
    'ESPAGNOL LV2': '🇪🇸',
    'SVT': '🌿',
    'Technologie': '🔧',
    'TECHNO': '🔧',
    'TECHNOLOGIE': '🔧',
    'Arts Plastiques': '🎨',
    'ARTS PLASTIQUES': '🎨',
    'Musique': '🎵',
    'MUSIQUE': '🎵',
    'ED MUSICALE': '🎵'
}

def afficher_rapports(rapports):
    if rapports:
        for rapport in rapports:
            if rapport.subjects:
                for sujet in rapport.subjects:
                    with st.expander(f"{subject_emojis.get(sujet.name, '📚')} Matière: {sujet.name} ({', '.join(sujet.teachers) if sujet.teachers else ''})", expanded=False):
                        st.subheader("🧷 Information")
                        st.markdown(f"""
- 📋 **Moyenne de l'élève**: `{sujet.student_average if sujet.student_average else 'Pas visible'}`
- 📊 **Moyenne de la classe**: `{sujet.class_average if sujet.class_average else 'Bizarement invisible'}`
- 📈 **Moyenne minimale**: `{sujet.min_average if sujet.min_average else 'On ne sait pas'}`
- 📉 **Moyenne maximale**: `{sujet.max_average if sujet.max_average else 'Inconnu'}`
- 🧑‍🏫 **Enseignants**: `{', '.join(sujet.teachers) if sujet.teachers else 'Apparemment, il accun enseignants, étrange ?'}`""")
                        if sujet.comments:
                            st.subheader("📃 Commentaires")
                            for commentaire in sujet.comments:
                                st.write(f"- {commentaire}")
            if rapport.comments:
                st.subheader("📄 Commentaires globaux")
                for commentaire in rapport.comments:
                    st.write(f"- {commentaire}")
    else:
        st.info("🔴 Aucun rapport disponible pour cette période.")

def app(client: Client):
    st.title('📍 Vie Scolaire')

    options_periode = ["Trimestre 1", "Trimestre 2", "Trimestre 3"]
    nom_periode_selectionnee = st.selectbox("📅 Sélectionner la période", options_periode)

    tabs = st.tabs(["Tout", "🚫 Absences", "⏰ Retards", "🚨 Punitions", "📊 Bulletin"])
    
    if nom_periode_selectionnee:
        with tabs[0]:
            afficher_details_periode(client, nom_periode_selectionnee)
        with tabs[1]:
            afficher_absences([absence for periode in client.periods for absence in periode.absences] if nom_periode_selectionnee == "Année entière" else [absence for periode in client.periods if periode.name == nom_periode_selectionnee for absence in periode.absences])
        with tabs[2]:
            afficher_retards([retard for periode in client.periods for retard in periode.delays] if nom_periode_selectionnee == "Année entière" else [retard for periode in client.periods if periode.name == nom_periode_selectionnee for retard in periode.delays])
        with tabs[3]:
            afficher_punitions([punition for periode in client.periods for punition in periode.punishments] if nom_periode_selectionnee == "Année entière" else [punition for periode in client.periods if periode.name == nom_periode_selectionnee for punition in periode.punishments])
        with tabs[4]:
            if nom_periode_selectionnee == "Année entière":
                rapports = [periode.report for periode in client.periods if periode.report]
                if rapports:
                    afficher_rapports(rapports)
                else:
                    st.info("🔴 Aucun rapport disponible pour cette période.")
            else:
                periode = next((p for p in client.periods if p.name == nom_periode_selectionnee), None)
                if periode and periode.report:
                    afficher_rapports([periode.report])
                else:
                    st.info("🔴 Aucun rapport disponible pour cette période.")

if __name__ == "__main__":
    client = Client() # Assurez-vous d'initialiser correctement votre client ici
    app(client)