travail sur le dashboard
This commit is contained in:
parent
f5e81b5652
commit
0040d3941b
|
@ -101,6 +101,17 @@ class Classe(models.Model):
|
||||||
"""
|
"""
|
||||||
return Periode.objects.get(classe=self, debut__lte=jour, fin__gte=jour)
|
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):
|
def __str__(self):
|
||||||
return f"{self.libelle} ({self.lycee.libelle})"
|
return f"{self.libelle} ({self.lycee.libelle})"
|
||||||
|
|
||||||
|
@ -331,3 +342,18 @@ class Profil(models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Profil {self.utilisateur} : {self.etudiant} ; {self.colleur}"
|
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()
|
row.cell()
|
||||||
|
|
||||||
def generate(periode):
|
def generate(periode):
|
||||||
classe = periode.classe
|
|
||||||
|
|
||||||
pdf = PDF(orientation="landscape", format="a4")
|
pdf = PDF(orientation="landscape", format="a4")
|
||||||
pdf.set_font("helvetica", size=6)
|
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_title(titre)
|
||||||
pdf.set_author("projet colloscope")
|
pdf.set_author("colles.mp2i-vms.fr")
|
||||||
pdf.set_author("projet colloscope")
|
|
||||||
|
|
||||||
pdf.add_page()
|
pdf.add_page()
|
||||||
pdf.cell(text=titre, center=True, border=1, h=5)
|
pdf.cell(text=titre, center=True, border=1, h=5)
|
||||||
|
@ -108,11 +105,31 @@ def generate(periode):
|
||||||
|
|
||||||
return pdf
|
return pdf
|
||||||
|
|
||||||
def main():
|
|
||||||
classe = Classe.objects.get(id=1)
|
def handle(request):
|
||||||
periode = Periode.objects.get(classe=classe, libelle="Semestre 5/2")
|
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)
|
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 }}.
|
Bienvenue {{ etudiant }}. Votre lycée est {{ periode.classe.lycee.libelle }}, et votre classe est {{ periode.classe.libelle }}.
|
||||||
</p>
|
</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>
|
<ul>
|
||||||
{% for n, lundi, colles in rotations %}
|
{% for n, lundi, colles in rotations %}
|
||||||
|
|
|
@ -17,11 +17,13 @@
|
||||||
{% block main %}
|
{% block main %}
|
||||||
|
|
||||||
<p>
|
<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>
|
</p>
|
||||||
|
|
||||||
<h2>Colloscope : {{ periode.libelle }}</h2>
|
<h2>Colloscope : {{ periode.libelle }}</h2>
|
||||||
|
|
||||||
|
<a href="export.pdf" target="_blank">Exporter le colloscope</a>
|
||||||
|
|
||||||
<div class="table-wrapper">
|
<div class="table-wrapper">
|
||||||
<table>
|
<table>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from datetime import timedelta
|
from datetime import date, timedelta
|
||||||
|
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
@ -7,7 +7,7 @@ from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
from colloscope.models import *
|
from colloscope.models import *
|
||||||
from colloscope.table import table_colloscope
|
from colloscope.table import table_colloscope
|
||||||
from colloscope.pdfexport import main # /!\ temporaire
|
from colloscope.pdfexport import handle
|
||||||
|
|
||||||
|
|
||||||
def handler404(request):
|
def handler404(request):
|
||||||
|
@ -18,7 +18,7 @@ def handler404(request):
|
||||||
|
|
||||||
|
|
||||||
def home_redirect(request):
|
def home_redirect(request):
|
||||||
return redirect("/colloscope/table.html")
|
return redirect("/colloscope/dashboard.html")
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -50,29 +50,27 @@ def choix_profil(request):
|
||||||
}
|
}
|
||||||
return HttpResponse(template.render(context))
|
return HttpResponse(template.render(context))
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def dashboard(request):
|
def dashboard(request):
|
||||||
user = request.user
|
user = request.user
|
||||||
session = request.session
|
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"):
|
if not isinstance(etudiant, Etudiant):
|
||||||
case "etudiant":
|
return HttpResponse("pas encore supporté")
|
||||||
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 = etudiant.classe.periode_set.order_by("-debut").first()
|
periode = etudiant.classe.periode_actuelle()
|
||||||
groupe = etudiant.groupe_de_colle(periode)
|
groupe = etudiant.groupe_de_colle(periode)
|
||||||
|
|
||||||
rotations = groupe.get_colles_par_sem()
|
rotations = groupe.get_colles_par_sem()
|
||||||
|
|
||||||
template = loader.get_template("dashboard.html")
|
template = loader.get_template("dashboard.html")
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
|
@ -89,22 +87,24 @@ def dashboard(request):
|
||||||
def colloscope(request):
|
def colloscope(request):
|
||||||
user = request.user
|
user = request.user
|
||||||
session = request.session
|
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")
|
periode_str = request.GET.get("periode")
|
||||||
if periode_str is None:
|
if periode_str is None:
|
||||||
periode = etudiant.classe.periode_set.order_by("-debut").first()
|
periode = etudiant.classe.periode_actuelle()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
periode = Periode.objects.get(id=int(periode_str), classe=etudiant.classe)
|
periode = Periode.objects.get(id=int(periode_str), classe=etudiant.classe)
|
||||||
|
@ -151,7 +151,7 @@ def colloscope(request):
|
||||||
|
|
||||||
|
|
||||||
def export(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):
|
def data_dump(request):
|
||||||
template = loader.get_template("data_dump.html")
|
template = loader.get_template("data_dump.html")
|
||||||
|
|
Loading…
Reference in New Issue