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