diff --git a/colloscope/models.py b/colloscope/models.py
index 334ca9e..108a534 100644
--- a/colloscope/models.py
+++ b/colloscope/models.py
@@ -13,11 +13,13 @@ calendrier = {
]
}
+
class Lycee(models.Model):
uai = models.CharField(max_length=10)
libelle = models.CharField(max_length=100)
vacances = models.CharField(max_length=1)
+
class Classe(models.Model):
lycee = models.ForeignKey(Lycee, on_delete=models.CASCADE)
libelle = models.CharField(max_length=20)
diff --git a/colloscope/pdfexport.py b/colloscope/pdfexport.py
index 340c8dc..9c780c8 100644
--- a/colloscope/pdfexport.py
+++ b/colloscope/pdfexport.py
@@ -3,83 +3,7 @@ from datetime import date, timedelta
from colloscope.models import *
from fpdf import FPDF
-from fpdf.fonts import FontFace
-from fpdf.enums import TableCellFillMode
-"""
-etudiants = [
- ['Aboujaib', 'Alexandre', 4, 'A', '', ''],
- ['Ajan', 'George', 4, 'A', '', ''],
- ['Akrad', 'Lina', 1, 'SI', '', ''],
- ['Aubert', 'Nicolas', 1, 'SI', '', ''],
- ['Badr', 'Roman', 4, 'A', '', ''],
- ['Bazire', 'Aurélien', 5, 'A', '', ''],
- ['Boit', 'Arthur', 5, 'A', '', ''],
- ['Boubker', 'Youssef', 5, 'A', '', ''],
- ['Boudjema', 'Dylan', 1, 'SI', '', ''],
- ['Chiriac', 'Mihnea', 6, 'A', '', ''],
- ['Courier', 'Marine', 6, 'A', '', ''],
- ['Daguin', 'Joseph', 6, 'A', '', ''],
- ['Dauguen', 'Gabriel', 7, 'A', '', ''],
- ['De Weer', 'Matthias', 7, 'A', '', ''],
- ['Desbouis', 'Katell', 2, 'SI', '', ''],
- ['Dupouy', 'Jérémie', 7, 'A', '', ''],
- ['Hariri--Gautier-Picard', 'Grégoire', 8, 'A', '', ''],
- ['Juricevic', 'Matteo', 8, 'A', '', ''],
- ['Knanoua', 'Anas', 8, 'A', '', ''],
- ['Lesenne', 'Pierrick', 9, 'A', '', ''],
- ['Lin', 'Hao', 2, 'SI', '', ''],
- ['Masbatin', 'Lucas', 2, 'SI', '', ''],
- ['Mayuran', 'Mithushan', 9, 'A', '', ''],
- ['Messahli', 'Yassine', 9, 'A', '', ''],
- ['Moguérou', 'Valentin', 10, 'B', '', ''],
- ['Mohellebi', 'Mathéo', 10, 'B', '', ''],
- ['Mouisset--Ferrara', 'Maël', 10, 'B', '', ''],
- ['Ottavi', 'Corentin', 11, 'B', '', ''],
- ['Ponce', 'Alexian', 11, 'B', '', ''],
- ['Pujol', 'Raphaël', 11, 'B', '', ''],
- ['Pustetto', 'Mathis', 12, 'B', '', ''],
- ['Radice', 'Roman', 12, 'B', '', ''],
- ['Rat', 'Evelyn', 12, 'B', '', ''],
- ['Rousse', 'Louis', 3, 'SI', '', ''],
- ['Roux', 'Gaëtan', 3, 'SI', '', ''],
- ['Rouyre--Cros', 'Célian', 3, 'SI', '', ''],
- ['Sourbé', 'François-Gabriel', 13, 'B', '', ''],
- ['Stourbe', 'Simon', 13, 'B', '', ''],
- ['Thai', 'Dany', 13, 'B', '', ''],
- ['Théodore', 'Jonathan', 14, 'B', '', ''],
- ['Vandroux', 'Benoît', 14, 'B', '', ''],
- ['Veyssière', 'Thibaud', 14, 'B', '', ''],
- ['Vié', 'Adrien', 15, 'B', '', ''],
- ['Ye', 'Luan', 15, 'B', '', ''],
- ['Zarka', 'Amélie', 15, 'B', '', ''],
-]
-"""
-
-creneaux = [
- ["Mathématiques", "vendredi", "17:00", "M. OUBAHA", "C382"],
- ["Anglais", "mercredi", "14:00", "Mme LE GOURIELLEC", "C393"],
- ["Mathématiques", "mercredi", "15:00", "M. BOULLY", "R004"],
- ["Physique", "mardi", "14:00", "Mme CHEVALIER", "R103"],
- ["Mathématiques", "mardi", "18:00", "M. RAPIN", "V152"],
- ["Anglais", "mardi", "14:00", "Mme BELAGGOUNE", "C4??"],
- ["pas de colle", "", "", "", ""],
- ["Physique", "mardi", "17:00", "M. COLIN", "C386"],
- ["Mathématiques", "mercredi", "13:30", "M. BOUVEROT", "??"],
- ["Anglais", "lundi", "13:00", "M. HERBAUT", "V052"],
-]
-
-semaines = list(range(24, 34))
-
-rotations = [
- # [semaine, groupe, creneau]
- (24, 1, 1),
- (24, 2, 2),
- (24, 3, 3),
- (27, 3, 3),
- (28, 3, 3),
- (31, 3, 3),
-]
class PDF(FPDF):
def liste_eleves(self, periode):
diff --git a/colloscope/table.py b/colloscope/table.py
new file mode 100644
index 0000000..07bba19
--- /dev/null
+++ b/colloscope/table.py
@@ -0,0 +1,59 @@
+from colloscope.models import *
+
+def table_colloscope(periode, heading=True, est_colle=True):
+ semaines = periode.range_semaines()
+ lundis = [ periode.classe.date_debut_sem(n) for n in semaines ]
+ creneaux = Creneau.objects.filter(periode=periode, est_colle=est_colle)
+ jours = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
+
+ s = ""
+
+ s += "
\n"
+
+
+ if heading:
+ s += "\n"
+
+ for th in ("Matière", "Jour", "Heure", "Colleur", "Salle"):
+ s += f"{th} \n"
+
+ for sem in semaines:
+ s +=f"{sem} \n"
+
+ s += " \n\n"
+
+ for lundi in lundis:
+ s += f"{lundi.strftime('%d/%m/%y')} \n"
+
+ s += " \n"
+
+ for i, c in enumerate(creneaux):
+ matiere = c.matiere
+ jour = c.jour
+ heure = c.heure
+ colleur = c.colleur
+ salle = c.salle
+
+ s += "\n"
+ s += f"{matiere.libelle} \n"
+ s += f"{jours[jour]} \n"
+ s += f"{heure.strftime('%H:%M')} \n"
+ s += "{} {} \n".format("M." if colleur.civilite=="M" else "Mme", colleur.nom.upper())
+ s += f"salle \n"
+
+ for sem in semaines:
+ if Rotation.objects.filter(creneau=c, semaine=sem).exists():
+ r = Rotation.objects.get(creneau=c, semaine=sem)
+ groupes = r.groupes
+ content = ", ".join(g.libelle for g in groupes.all())
+
+ if r.est_modifiee():
+ s += f"{content} \n"
+ else:
+ s += f"{content} \n"
+ else:
+ s += " \n"
+
+ s += "
\n"
+
+ return s
diff --git a/colloscope/templates/404.html b/colloscope/templates/404.html
new file mode 100644
index 0000000..c00e0b7
--- /dev/null
+++ b/colloscope/templates/404.html
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+
+{% block title %}Erreur 404{% endblock title %}
+
+{% block header %}
+404 : GAME OVER
+{% endblock header %}
+
+{% block main %}
+Vous vous êtes perdu.
+{% endblock main %}
diff --git a/colloscope/templates/base.html b/colloscope/templates/base.html
new file mode 100644
index 0000000..e4ded3a
--- /dev/null
+++ b/colloscope/templates/base.html
@@ -0,0 +1,21 @@
+{% load static %}
+
+
+
+
+
+ {% block title %}{% endblock title %}
+
+ {% block head %}{% endblock head %}
+
+
+
+ {% block header %}{% endblock header %}
+
+
+ {% block main %}{% endblock main %}
+
+
+ {% block footer %}© UKS 2024{% endblock footer %}
+
+
diff --git a/colloscope/templates/colloscope.html b/colloscope/templates/colloscope.html
index e768a2e..394c627 100644
--- a/colloscope/templates/colloscope.html
+++ b/colloscope/templates/colloscope.html
@@ -1,52 +1,72 @@
-{% load static %}
-
-
-
-
-
- Colloscope
-
-
-
-
- Universal Kholloscope Systems™
+{% extends "base.html" %}
-
- <
- Semaine : du 22 au 26 avril 2024.
- >
-
+{% load extras %}
-
+{% block title %}Colloscope{% endblock title %}
-
- Programme de colles
-
- Mathématiques : Dimension finie et matrices
-
-
- Physique : Mécanique du solide
-
+{% block header %}
+Colloscope
+{% endblock header %}
-
- Colles cette semaine
-
-
- Groupe 1 : Physique dimanche 23h Newton
- Groupe 2 : Maths dimanche 23h Euler
- Groupe 3 : Anglais dimanche 23h Shakespeare
- Groupe 4 : Informatique dimanche 23h Turing
- Groupe 5 : Histoire dimanche 23h Tite-Live
- Groupe 6 : Philosophie dimanche 23h Descartes
- Groupe 7 : EPS dimanche 23h Bolt
-
+{% block main %}
-
+
+ Lycée : {{ periode.classe.lycee.libelle }}. Classe : {{ periode.classe.libelle }}.
+
-
-
-
+ Colloscope : {{ periode.libelle }}
+
+
+
+
+ Matière
+ Jour
+ Heure
+ Colleur
+ Salle
+
+
+
+ {% for lundi in lundis %}
+ {{ lundi | strftime:"%d/%m/%y" }}
+ {% endfor %}
+
+
+
+ {% for c, rs in rotations %}
+
+ {{ c.matiere.libelle }}
+ {{ jours | getitem:c.jour }}
+ {{ c.heure | strftime:"%H:%M" }}
+
+ {% if c.colleur.civilite == "M" %}
+ M.
+ {% else %}
+ Mme
+ {% endif %}
+
+ {{ c.colleur.nom | upper }}
+
+
+ {{ c.salle }}
+
+
+ {% for sem, exists, r, est_modifiee, groupes in rs %}
+ {% if exists %}
+ {% if est_modifiee %}
+ {{ groupes | join:"," }}
+ {% else %}
+ {{ groupes | join:"," }}
+ {% endif %}
+ {% else %}
+
+ {% endif %}
+ {% endfor %}
+
+ {% endfor %}
+
+
+
+{% endblock main %}
diff --git a/colloscope/templatetags/__init__.py b/colloscope/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/colloscope/templatetags/extras.py b/colloscope/templatetags/extras.py
new file mode 100644
index 0000000..6a32f20
--- /dev/null
+++ b/colloscope/templatetags/extras.py
@@ -0,0 +1,24 @@
+from django import template
+
+from colloscope.models import *
+
+register = template.Library()
+
+@register.filter(name="strftime")
+def strftime(value, arg):
+ return value.strftime(arg)
+
+@register.filter(name="getitem")
+def getitem(indexable, i):
+ return indexable[i]
+
+"""
+@register.filter(name="exists")
+def exists(queryset):
+ return queryset.exists()
+"""
+"""
+@register.filter(name="est_modifiee")
+def est_modifiee(rotation):
+ return rotation.est_modifiee()
+"""
diff --git a/colloscope/views.py b/colloscope/views.py
index 43ac19e..1202d3e 100644
--- a/colloscope/views.py
+++ b/colloscope/views.py
@@ -1,10 +1,58 @@
from django.http import HttpResponse
from django.template import loader
+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, response))
+
+
def colloscope(request):
+ periode_str = request.GET.get("periode", "")
+ if periode_str=="":
+ periode = Periode.objects.get(id=3)
+ else:
+ try:
+ periode = Periode.objects.get(id=int(periode_str))
+ except Periode.DoesNotExist:
+ template = loader.get_template("404.html")
+ context = {}
+ response = HttpResponse(template.render(context, request))
+ response.status_code = 404
+ return response
+
+ creneaux = Creneau.objects.filter(periode=periode, est_colle=True)
+ semaines = periode.range_semaines()
+ rotations = [ (c, []) for c in creneaux ]
+ for c, l in rotations:
+ for sem in semaines:
+ rot = Rotation.objects.filter(creneau=c, semaine=sem)
+ 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("colloscope.html")
- return HttpResponse(template.render())
+
+ context = {
+ "periode": periode,
+ "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")
diff --git a/kholles_web/settings.py b/kholles_web/settings.py
index 234434e..239357a 100644
--- a/kholles_web/settings.py
+++ b/kholles_web/settings.py
@@ -25,7 +25,7 @@ SECRET_KEY = 'django-insecure-$)@!wj+$^y1@^tr78ay&)cna10da_k^vncrbo+4ja-qth$8bhz
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
-ALLOWED_HOSTS = ["mp2i-vms.fr"]
+ALLOWED_HOSTS = ["127.0.0.1", "mp2i-vms.fr"]
# Application definition
@@ -104,9 +104,9 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization
# https://docs.djangoproject.com/en/5.0/topics/i18n/
-LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = 'fr-fr'
-TIME_ZONE = 'UTC'
+TIME_ZONE = 'Europe/Paris'
USE_I18N = True