travail sur le dashboard
This commit is contained in:
parent
468b77bb73
commit
2191a4cf0b
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
Bienvenue {{ etudiant }}. Votre lycée est {{ periode.classe.lycee.libelle }}, et votre classe est {{ periode.classe.libelle }}.
|
||||
</p>
|
||||
|
||||
<p>Votre groupe de colle est {{ groupe }}.</p>
|
||||
<p>Période actuelle : {{ periode }}. Votre groupe de colle est {{ groupe }}. <a href="table.html">Consulter le colloscope</a></p>
|
||||
|
||||
<ul>
|
||||
{% for n, lundi, colles in rotations %}
|
||||
|
|
|
@ -17,11 +17,13 @@
|
|||
{% block main %}
|
||||
|
||||
<p>
|
||||
Lycée : {{ periode.classe.lycee.libelle }}. Classe : {{ periode.classe.libelle }}.
|
||||
Lycée : {{ periode.classe.lycee.libelle }}. Classe : {{ periode.classe.libelle }}. <a href="dashboard.html">Retour au tableau de bord</a>
|
||||
</p>
|
||||
|
||||
<h2>Colloscope : {{ periode.libelle }}</h2>
|
||||
|
||||
<a href="export.pdf" target="_blank">Exporter le colloscope</a>
|
||||
|
||||
<div class="table-wrapper">
|
||||
<table>
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from datetime import timedelta
|
||||
from datetime import date, timedelta
|
||||
|
||||
from django.shortcuts import redirect
|
||||
from django.http import HttpResponse
|
||||
|
@ -7,7 +7,7 @@ from django.contrib.auth.decorators import login_required
|
|||
|
||||
from colloscope.models import *
|
||||
from colloscope.table import table_colloscope
|
||||
from colloscope.pdfexport import main # /!\ temporaire
|
||||
from colloscope.pdfexport import handle
|
||||
|
||||
|
||||
def handler404(request):
|
||||
|
@ -18,7 +18,7 @@ def handler404(request):
|
|||
|
||||
|
||||
def home_redirect(request):
|
||||
return redirect("/colloscope/table.html")
|
||||
return redirect("/colloscope/dashboard.html")
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -50,29 +50,27 @@ def choix_profil(request):
|
|||
}
|
||||
return HttpResponse(template.render(context))
|
||||
|
||||
|
||||
@login_required
|
||||
def dashboard(request):
|
||||
user = request.user
|
||||
session = request.session
|
||||
|
||||
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")
|
||||
|
||||
match session.get("profil"):
|
||||
case "etudiant":
|
||||
profil = Profil.objects \
|
||||
.select_related("etudiant__classe") \
|
||||
.prefetch_related("etudiant__classe__periode_set") \
|
||||
.get(utilisateur=user)
|
||||
etudiant = profil.etudiant
|
||||
case "colleur":
|
||||
return HttpResponse("pas (encore) supporté")
|
||||
case _:
|
||||
return redirect("/colloscope/choix_profil")
|
||||
if not isinstance(etudiant, Etudiant):
|
||||
return HttpResponse("pas encore supporté")
|
||||
|
||||
periode = etudiant.classe.periode_set.order_by("-debut").first()
|
||||
periode = etudiant.classe.periode_actuelle()
|
||||
groupe = etudiant.groupe_de_colle(periode)
|
||||
|
||||
rotations = groupe.get_colles_par_sem()
|
||||
|
||||
template = loader.get_template("dashboard.html")
|
||||
|
||||
context = {
|
||||
|
@ -89,22 +87,24 @@ def dashboard(request):
|
|||
def colloscope(request):
|
||||
user = request.user
|
||||
session = request.session
|
||||
|
||||
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é")
|
||||
|
||||
match session.get("profil"):
|
||||
case "etudiant":
|
||||
profil = Profil.objects \
|
||||
.select_related("etudiant__classe") \
|
||||
.prefetch_related("etudiant__classe__periode_set") \
|
||||
.get(utilisateur=user)
|
||||
etudiant = profil.etudiant
|
||||
case "colleur":
|
||||
return HttpResponse("pas (encore) supporté")
|
||||
case _:
|
||||
return redirect("/colloscope/choix_profil")
|
||||
|
||||
periode_str = request.GET.get("periode")
|
||||
if periode_str is None:
|
||||
periode = etudiant.classe.periode_set.order_by("-debut").first()
|
||||
periode = etudiant.classe.periode_actuelle()
|
||||
else:
|
||||
try:
|
||||
periode = Periode.objects.get(id=int(periode_str), classe=etudiant.classe)
|
||||
|
@ -151,7 +151,7 @@ def colloscope(request):
|
|||
|
||||
|
||||
def export(request):
|
||||
return HttpResponse(bytes(main().output()), content_type="application/pdf")
|
||||
return HttpResponse(bytes(handle(request).output()), content_type="application/pdf")
|
||||
|
||||
def data_dump(request):
|
||||
template = loader.get_template("data_dump.html")
|
||||
|
|
Loading…
Reference in New Issue