from datetime import timedelta from django.shortcuts import redirect from django.http import HttpResponse from django.template import loader from django.contrib.auth.decorators import login_required from colloscope.models import * from colloscope.table import table_colloscope from colloscope.pdfexport import main # /!\ temporaire def handler404(request): template = loader.get_template("404.html") #response.status_code = 404 context = {} return HttpResponse(template.render(context)) def home_redirect(request): return redirect("/colloscope/table.html") @login_required def choix_profil(request): user = request.user session = request.session if not Profil.objects.filter(utilisateur=user).exists(): profil = Profil(utilisateur=user) profil.save() else: profil = Profil.objects.get(utilisateur=user) if profil.etudiant is not None and profil.colleur is None: session["profil"] = "etudiant" return redirect("/colloscope/") elif profil.colleur is not None and profil.etudiant is None: session["profil"] = "colleur" return redirect("/colloscope/") else: if profil.etudiant is not None: template = loader.get_template("choix_profil.html") else: template = loader.get_template("profil_non_associe.html") context = { "profil": profil, } return HttpResponse(template.render(context)) @login_required def dashboard(request): user = request.user session = request.session 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 = etudiant.classe.periode_set.order_by("-debut").first() groupe = etudiant.groupe_de_colle(periode) rotations = groupe.get_colles_par_sem() template = loader.get_template("dashboard.html") context = { "etudiant": etudiant, "periode": periode, "groupe": groupe, "rotations" : rotations, } return HttpResponse(template.render(context, request)) @login_required def colloscope(request): user = request.user session = request.session 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() else: try: periode = Periode.objects.get(id=int(periode_str), classe=etudiant.classe) except Periode.DoesNotExist: template = loader.get_template("404.html") context = {} response = HttpResponse(template.render(context, request)) response.status_code = 404 creneaux = Creneau.objects \ .filter(periode=periode, est_colle=True) \ .prefetch_related("rotation_set") semaines = periode.range_semaines() rotations = [ (c, []) for c in creneaux ] for c, l in rotations: for sem in semaines: lundi = periode.classe.date_debut_sem(sem) rot = Rotation.objects.filter(creneau=c, date__gte=lundi, date__lt=lundi+timedelta(weeks=1)) exists = rot.exists() if exists: r = rot.first() est_modifiee = r.est_modifiee() groupes = (g.libelle for g in r.groupes.all()) else: r = est_modifiee = groupes = None l.append((sem, exists, r, est_modifiee, groupes)) template = loader.get_template("table.html") context = { "periode": periode, "semaines": semaines, "lundis": [periode.classe.date_debut_sem(n) for n in semaines], "jours" : ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], "rotations" : rotations, } return HttpResponse(template.render(context, request)) def export(request): return HttpResponse(bytes(main().output()), content_type="application/pdf") def data_dump(request): template = loader.get_template("data_dump.html") return HttpResponse(template.render())