diff --git a/colloscope/models.py b/colloscope/models.py index b68810a..4f76f57 100644 --- a/colloscope/models.py +++ b/colloscope/models.py @@ -101,6 +101,17 @@ class Classe(models.Model): """ return Periode.objects.get(classe=self, debut__lte=jour, fin__gte=jour) + def periode_actuelle(self): + #return self.periode(date.today()) // ne fonctionne pas entre les périodes + """ + On prend la période non révolue la plus récente + """ + + return Periode.objects \ + .filter(classe=self, fin__gte=date.today()) \ + .order_by("-debut") \ + .first() + def __str__(self): return f"{self.libelle} ({self.lycee.libelle})" @@ -331,3 +342,18 @@ class Profil(models.Model): def __str__(self): return f"Profil {self.utilisateur} : {self.etudiant} ; {self.colleur}" + + @staticmethod + def from_request(request, preprocess=lambda query: query): + user = request.user + session = request.session + + match session.get("profil"): + case "etudiant": + profil = preprocess(Profil.objects.filter(utilisateur=user)).get() + return profil.etudiant + case "colleur": + profil = preprocess(Profil.objects.filter(utilisateur=user)).get() + return profil.colleur + case _: + raise ValueError("profil non choisi") diff --git a/colloscope/pdfexport.py b/colloscope/pdfexport.py index cf2f62b..18fd9cc 100644 --- a/colloscope/pdfexport.py +++ b/colloscope/pdfexport.py @@ -84,16 +84,13 @@ class PDF(FPDF): row.cell() def generate(periode): - classe = periode.classe - pdf = PDF(orientation="landscape", format="a4") pdf.set_font("helvetica", size=6) - titre = f"Colloscope {classe.libelle} {periode.libelle}" + titre = f"Colloscope {periode.classe.libelle} {periode.libelle}" pdf.set_title(titre) - pdf.set_author("projet colloscope") - pdf.set_author("projet colloscope") + pdf.set_author("colles.mp2i-vms.fr") pdf.add_page() pdf.cell(text=titre, center=True, border=1, h=5) @@ -108,11 +105,31 @@ def generate(periode): return pdf -def main(): - classe = Classe.objects.get(id=1) - periode = Periode.objects.get(classe=classe, libelle="Semestre 5/2") + +def handle(request): + try: + etudiant = Profil.from_request( + request, + preprocess=lambda query: query \ + .select_related("etudiant__classe") \ + .prefetch_related("etudiant__classe__periode_set") + ) + except ValueError: + return redirect("colloscope.choix_profil") + + if not isinstance(etudiant, Etudiant): + return HttpResponse("pas encore supporté") + + + periode_str = request.GET.get("periode") + if periode_str is None: + periode = etudiant.classe.periode_actuelle() + else: + periode = Periode.objects.get(id=int(periode_str), classe=etudiant.classe) return generate(periode) -if __name__ == "__main__": - main() + +def main(): + periode = Periode.objects.get(id=3) + return generate(periode) diff --git a/colloscope/templates/dashboard.html b/colloscope/templates/dashboard.html index 1ad71dd..6bc713e 100644 --- a/colloscope/templates/dashboard.html +++ b/colloscope/templates/dashboard.html @@ -10,7 +10,7 @@ Bienvenue {{ etudiant }}. Votre lycée est {{ periode.classe.lycee.libelle }}, et votre classe est {{ periode.classe.libelle }}.

-

Votre groupe de colle est {{ groupe }}.

+

Période actuelle : {{ periode }}. Votre groupe de colle est {{ groupe }}. Consulter le colloscope