Compare commits
No commits in common. "4c189ac14a35ff1b6e3401cd8e6caab6f926087a" and "bef9cbdde00cf4ca68bd9a183955523f6f5d8ad7" have entirely different histories.
4c189ac14a
...
bef9cbdde0
204
colloscope/:
204
colloscope/:
|
@ -1,204 +0,0 @@
|
||||||
from datetime import date, timedelta
|
|
||||||
|
|
||||||
from colloscope.models import Etudiant, Critere
|
|
||||||
|
|
||||||
from fpdf import FPDF
|
|
||||||
from fpdf.fonts import FontFace
|
|
||||||
from fpdf.enums import TableCellFillMode
|
|
||||||
|
|
||||||
calendrier_zoneC = date(2023, 9, 18), [
|
|
||||||
( date(2023, 10, 21), date(2023, 11, 6) ),
|
|
||||||
( date(2023, 12, 23), date(2024, 1, 8) ),
|
|
||||||
( date(2024, 2, 10), date(2024, 2, 26) ),
|
|
||||||
( date(2024, 4, 6), date(2024, 4, 22) ),
|
|
||||||
]
|
|
||||||
|
|
||||||
def jour_of_sem(n, cal):
|
|
||||||
sem_1, vac = cal
|
|
||||||
|
|
||||||
jour = sem_1 + (n-1) * timedelta(weeks=1)
|
|
||||||
|
|
||||||
for (debut, fin) in vac:
|
|
||||||
if jour >= debut:
|
|
||||||
jour += 2*timedelta(weeks=1)
|
|
||||||
|
|
||||||
return jour
|
|
||||||
|
|
||||||
"""
|
|
||||||
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):
|
|
||||||
classe = periode.classe
|
|
||||||
etudiants = Etudiant.objects.filter(classe=classe)
|
|
||||||
|
|
||||||
with self.table(
|
|
||||||
align="RIGHT",
|
|
||||||
col_widths=(4, 3, 1, 1, 1, 1),
|
|
||||||
width=80,
|
|
||||||
line_height=3) as table:
|
|
||||||
header = table.row()
|
|
||||||
for th in ("Nom", "Prénom", "Grp.", "TD", "LV1", "LV2"):
|
|
||||||
header.cell(th)
|
|
||||||
|
|
||||||
for etu in etudiants:
|
|
||||||
row = table.row()
|
|
||||||
row.cell(etu.nom.upper()) # Nom
|
|
||||||
row.cell(etu.prenom) # Prénom
|
|
||||||
row.cell(etu.groupe_de_colle(periode).libelle) # Groupe
|
|
||||||
row.cell(etu.groupe_du_critere(periode, "TD")) # TD
|
|
||||||
row.cell("??") # LV1
|
|
||||||
row.cell("??") # LV2
|
|
||||||
|
|
||||||
|
|
||||||
def table_colloscope(self, creneaux, semaines, rotations):
|
|
||||||
with self.table(
|
|
||||||
align="LEFT",
|
|
||||||
width=190,
|
|
||||||
line_height=3,
|
|
||||||
col_widths=(2, 1, 1, 3, 1, *(1,)*len(semaines)),
|
|
||||||
num_heading_rows=2) as table:
|
|
||||||
|
|
||||||
header = table.row()
|
|
||||||
for th in ("Matière", "Jour", "Heure", "Colleur", "Salle"):
|
|
||||||
header.cell(th, align="CENTER", rowspan=2)
|
|
||||||
|
|
||||||
for sem in semaines:
|
|
||||||
header.cell(str(sem), align="CENTER")
|
|
||||||
|
|
||||||
header2 = table.row()
|
|
||||||
for sem in semaines:
|
|
||||||
header2.cell(jour_of_sem(sem, calendrier_zoneC).strftime("%d/%m/%y"), align="CENTER")
|
|
||||||
|
|
||||||
for i, tr in enumerate(creneaux):
|
|
||||||
matiere, jour, heure, colleur, salle = tr
|
|
||||||
|
|
||||||
row = table.row()
|
|
||||||
row.cell(matiere)
|
|
||||||
row.cell(jour)
|
|
||||||
row.cell(heure)
|
|
||||||
row.cell(colleur)
|
|
||||||
row.cell(salle)
|
|
||||||
|
|
||||||
for s in semaines:
|
|
||||||
for rot in rotations:
|
|
||||||
if rot[2] == i and rot[0] == s:
|
|
||||||
row.cell(str(rot[1]), align="CENTER")
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
row.cell()
|
|
||||||
|
|
||||||
def table_travaux(self):
|
|
||||||
with self.table(
|
|
||||||
align="LEFT",
|
|
||||||
width=190,
|
|
||||||
line_height=3,
|
|
||||||
col_widths=(2, 1, 1, 4, *(1,)*len(semaines)),
|
|
||||||
first_row_as_headings=False) as table:
|
|
||||||
|
|
||||||
row = table.row()
|
|
||||||
row.cell("TP Physique")
|
|
||||||
row.cell("lundi")
|
|
||||||
row.cell("8:30")
|
|
||||||
row.cell()
|
|
||||||
|
|
||||||
for _ in range(len(semaines)):
|
|
||||||
row.cell("9 à 15", align="CENTER")
|
|
||||||
|
|
||||||
def generate(periode):
|
|
||||||
pdf = PDF(orientation="landscape", format="a4")
|
|
||||||
pdf.set_font("helvetica", size=6)
|
|
||||||
|
|
||||||
pdf.set_title("Colloscope mp2i semestre 5/2")
|
|
||||||
pdf.set_author("projet colloscope")
|
|
||||||
pdf.set_author("projet colloscope")
|
|
||||||
|
|
||||||
pdf.add_page()
|
|
||||||
pdf.cell(text="Colloscope MP2I Semestre 5/2", center=True, border=1, h=5)
|
|
||||||
base_y = pdf.t_margin + 10
|
|
||||||
pdf.set_y(base_y)
|
|
||||||
pdf.liste_eleves(etudiants)
|
|
||||||
#pdf.set_y(base_y)
|
|
||||||
#pdf.table_colloscope(creneaux, semaines, rotations)
|
|
||||||
#pdf.y += 3
|
|
||||||
#pdf.table_travaux()
|
|
||||||
|
|
||||||
pdf.output("test.pdf")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
classe = Classe.get(id=1)
|
|
||||||
periode = Periode.get(classe=classe, libelle="Semestre 5/2")
|
|
||||||
|
|
||||||
generate(periode)
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 5.0.4 on 2024-04-14 20:04
|
# Generated by Django 5.0.4 on 2024-04-14 13:40
|
||||||
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -29,13 +29,6 @@ class Migration(migrations.Migration):
|
||||||
('nom', models.CharField(max_length=100)),
|
('nom', models.CharField(max_length=100)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
|
||||||
name='Critere',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('libelle', models.CharField(max_length=100)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Lycee',
|
name='Lycee',
|
||||||
fields=[
|
fields=[
|
||||||
|
@ -53,6 +46,14 @@ class Migration(migrations.Migration):
|
||||||
('code', models.CharField(max_length=20)),
|
('code', models.CharField(max_length=20)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Groupe',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('libelle', models.CharField(max_length=100)),
|
||||||
|
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
|
||||||
|
],
|
||||||
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Etudiant',
|
name='Etudiant',
|
||||||
fields=[
|
fields=[
|
||||||
|
@ -60,10 +61,8 @@ class Migration(migrations.Migration):
|
||||||
('prenom', models.CharField(max_length=100)),
|
('prenom', models.CharField(max_length=100)),
|
||||||
('nom', models.CharField(max_length=100)),
|
('nom', models.CharField(max_length=100)),
|
||||||
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
|
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
|
||||||
|
('groupes', models.ManyToManyField(to='colloscope.groupe')),
|
||||||
],
|
],
|
||||||
options={
|
|
||||||
'ordering': ['classe', 'nom', 'prenom'],
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='classe',
|
model_name='classe',
|
||||||
|
@ -80,20 +79,6 @@ class Migration(migrations.Migration):
|
||||||
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
|
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
|
||||||
name='Groupe',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('libelle', models.CharField(max_length=100)),
|
|
||||||
('critere', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='colloscope.critere')),
|
|
||||||
('periode', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.periode')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='critere',
|
|
||||||
name='periode',
|
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.periode'),
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Creneau',
|
name='Creneau',
|
||||||
fields=[
|
fields=[
|
||||||
|
@ -110,15 +95,6 @@ class Migration(migrations.Migration):
|
||||||
('periode', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.periode')),
|
('periode', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.periode')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
|
||||||
name='Appartenance',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('etudiant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.etudiant')),
|
|
||||||
('groupe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.groupe')),
|
|
||||||
('periode', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.periode')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Rotation',
|
name='Rotation',
|
||||||
fields=[
|
fields=[
|
||||||
|
@ -144,8 +120,8 @@ class Migration(migrations.Migration):
|
||||||
('username', models.CharField(max_length=100)),
|
('username', models.CharField(max_length=100)),
|
||||||
('password', models.CharField(max_length=300)),
|
('password', models.CharField(max_length=300)),
|
||||||
('timestamp', models.DateTimeField(auto_now_add=True)),
|
('timestamp', models.DateTimeField(auto_now_add=True)),
|
||||||
('colleur', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='colloscope.colleur')),
|
('colleur', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.colleur')),
|
||||||
('etudiant', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='colloscope.etudiant')),
|
('etudiant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.etudiant')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Generated by Django 5.0.4 on 2024-04-14 13:51
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('colloscope', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='utilisateur',
|
||||||
|
name='colleur',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='colloscope.colleur'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='utilisateur',
|
||||||
|
name='etudiant',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='colloscope.etudiant'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,5 +1,5 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import F
|
|
||||||
|
|
||||||
class Lycee(models.Model):
|
class Lycee(models.Model):
|
||||||
uai = models.CharField(max_length=10)
|
uai = models.CharField(max_length=10)
|
||||||
|
@ -14,7 +14,6 @@ class Classe(models.Model):
|
||||||
|
|
||||||
class Periode(models.Model):
|
class Periode(models.Model):
|
||||||
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
|
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
|
||||||
#critere_colle = models.ForeignKey(Critere, on_delete=models.SET_NULL, null=True)
|
|
||||||
libelle = models.CharField(max_length=100)
|
libelle = models.CharField(max_length=100)
|
||||||
debut = models.DateField()
|
debut = models.DateField()
|
||||||
fin = models.DateField()
|
fin = models.DateField()
|
||||||
|
@ -23,44 +22,17 @@ class Matiere(models.Model):
|
||||||
libelle = models.CharField(max_length=100)
|
libelle = models.CharField(max_length=100)
|
||||||
code = models.CharField(max_length=20)
|
code = models.CharField(max_length=20)
|
||||||
|
|
||||||
class Critere(models.Model):
|
|
||||||
periode = models.ForeignKey(Periode, on_delete=models.CASCADE)
|
|
||||||
libelle = models.CharField(max_length=100)
|
|
||||||
|
|
||||||
class Groupe(models.Model):
|
class Groupe(models.Model):
|
||||||
#class Meta:
|
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
|
||||||
# ordering=[F("periode").classe.libelle, F("periode").libelle, "libelle"]
|
|
||||||
|
|
||||||
periode = models.ForeignKey(Periode, on_delete=models.CASCADE)
|
|
||||||
critere = models.ForeignKey(Critere, null=True, on_delete=models.CASCADE)
|
|
||||||
libelle = models.CharField(max_length=100)
|
libelle = models.CharField(max_length=100)
|
||||||
|
|
||||||
class Etudiant(models.Model):
|
class Etudiant(models.Model):
|
||||||
class Meta:
|
|
||||||
ordering=["classe", "nom", "prenom"]
|
|
||||||
|
|
||||||
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
|
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
|
||||||
prenom = models.CharField(max_length=100)
|
prenom = models.CharField(max_length=100)
|
||||||
nom = models.CharField(max_length=100)
|
nom = models.CharField(max_length=100)
|
||||||
#lv1 = models.ForeignKey(Matiere, on_delete=models.CASCADE)
|
#lv1 = models.ForeignKey(Matiere, on_delete=models.CASCADE)
|
||||||
#lv2 = models.ForeignKey(Matiere, on_delete=models.CASCADE)
|
#lv2 = models.ForeignKey(Matiere, on_delete=models.CASCADE)
|
||||||
|
groupes = models.ManyToManyField(Groupe)
|
||||||
def appartient(self, groupe, periode):
|
|
||||||
return Appartenance.objects.filter(periode=periode, etudiant=self, groupe=groupe).exists()
|
|
||||||
|
|
||||||
def groupe_du_critere(self, periode, critere):
|
|
||||||
if isinstance(critere, str):
|
|
||||||
critere = Critere.objects.get(periode=periode, libelle=critere)
|
|
||||||
|
|
||||||
return Appartenance.objects.get(periode=periode, etudiant=self, groupe__critere=critere).groupe
|
|
||||||
|
|
||||||
def groupe_de_colle(self, periode):
|
|
||||||
return self.groupe_du_critere(periode, "colle")
|
|
||||||
|
|
||||||
class Appartenance(models.Model):
|
|
||||||
periode = models.ForeignKey(Periode, on_delete=models.CASCADE)
|
|
||||||
etudiant = models.ForeignKey(Etudiant, on_delete=models.CASCADE)
|
|
||||||
groupe = models.ForeignKey(Groupe, on_delete=models.CASCADE)
|
|
||||||
|
|
||||||
class Colleur(models.Model):
|
class Colleur(models.Model):
|
||||||
civilite = models.CharField(max_length=1)
|
civilite = models.CharField(max_length=1)
|
||||||
|
@ -93,5 +65,5 @@ class Utilisateur(models.Model):
|
||||||
username = models.CharField(max_length=100)
|
username = models.CharField(max_length=100)
|
||||||
password = models.CharField(max_length=300)
|
password = models.CharField(max_length=300)
|
||||||
timestamp = models.DateTimeField(auto_now_add=True)
|
timestamp = models.DateTimeField(auto_now_add=True)
|
||||||
etudiant = models.ForeignKey(Etudiant, on_delete=models.SET_NULL, null=True)
|
etudiant = models.ForeignKey(Etudiant, on_delete=models.DO_NOTHING, null=True)
|
||||||
colleur = models.ForeignKey(Colleur, on_delete=models.SET_NULL, null=True)
|
colleur = models.ForeignKey(Colleur, on_delete=models.DO_NOTHING, null=True)
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
|
|
||||||
from colloscope.models import Etudiant, Critere, Classe
|
|
||||||
|
|
||||||
from fpdf import FPDF
|
from fpdf import FPDF
|
||||||
from fpdf.fonts import FontFace
|
from fpdf.fonts import FontFace
|
||||||
from fpdf.enums import TableCellFillMode
|
from fpdf.enums import TableCellFillMode
|
||||||
|
@ -24,7 +22,6 @@ def jour_of_sem(n, cal):
|
||||||
|
|
||||||
return jour
|
return jour
|
||||||
|
|
||||||
"""
|
|
||||||
etudiants = [
|
etudiants = [
|
||||||
['Aboujaib', 'Alexandre', 4, 'A', '', ''],
|
['Aboujaib', 'Alexandre', 4, 'A', '', ''],
|
||||||
['Ajan', 'George', 4, 'A', '', ''],
|
['Ajan', 'George', 4, 'A', '', ''],
|
||||||
|
@ -72,7 +69,6 @@ etudiants = [
|
||||||
['Ye', 'Luan', 15, 'B', '', ''],
|
['Ye', 'Luan', 15, 'B', '', ''],
|
||||||
['Zarka', 'Amélie', 15, 'B', '', ''],
|
['Zarka', 'Amélie', 15, 'B', '', ''],
|
||||||
]
|
]
|
||||||
"""
|
|
||||||
|
|
||||||
creneaux = [
|
creneaux = [
|
||||||
["Mathématiques", "vendredi", "17:00", "M. OUBAHA", "C382"],
|
["Mathématiques", "vendredi", "17:00", "M. OUBAHA", "C382"],
|
||||||
|
@ -100,10 +96,7 @@ rotations = [
|
||||||
]
|
]
|
||||||
|
|
||||||
class PDF(FPDF):
|
class PDF(FPDF):
|
||||||
def liste_eleves(self, periode):
|
def liste_eleves(self, etudiants):
|
||||||
classe = periode.classe
|
|
||||||
etudiants = Etudiant.objects.filter(classe=classe)
|
|
||||||
|
|
||||||
with self.table(
|
with self.table(
|
||||||
align="RIGHT",
|
align="RIGHT",
|
||||||
col_widths=(4, 3, 1, 1, 1, 1),
|
col_widths=(4, 3, 1, 1, 1, 1),
|
||||||
|
@ -115,13 +108,12 @@ class PDF(FPDF):
|
||||||
|
|
||||||
for etu in etudiants:
|
for etu in etudiants:
|
||||||
row = table.row()
|
row = table.row()
|
||||||
row.cell(etu.nom.upper()) # Nom
|
row.cell(etu[0].upper()) # Nom
|
||||||
row.cell(etu.prenom) # Prénom
|
row.cell(etu[1]) # Prénom
|
||||||
row.cell(etu.groupe_de_colle(periode).libelle) # Groupe
|
row.cell(str(etu[2])) # Groupe
|
||||||
row.cell("??")
|
row.cell(etu[3]) # TD
|
||||||
#row.cell(etu.groupe_du_critere(periode, "TD")) # TD
|
row.cell(etu[4]) # LV1
|
||||||
row.cell("??") # LV1
|
row.cell(etu[5]) # LV2
|
||||||
row.cell("??") # LV2
|
|
||||||
|
|
||||||
|
|
||||||
def table_colloscope(self, creneaux, semaines, rotations):
|
def table_colloscope(self, creneaux, semaines, rotations):
|
||||||
|
@ -178,32 +170,25 @@ class PDF(FPDF):
|
||||||
for _ in range(len(semaines)):
|
for _ in range(len(semaines)):
|
||||||
row.cell("9 à 15", align="CENTER")
|
row.cell("9 à 15", align="CENTER")
|
||||||
|
|
||||||
def generate(periode):
|
def generate():
|
||||||
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}"
|
pdf.set_title("colloscope mp2i semestre 5/2")
|
||||||
|
|
||||||
pdf.set_title(titre)
|
|
||||||
pdf.set_author("projet colloscope")
|
pdf.set_author("projet colloscope")
|
||||||
pdf.set_author("projet colloscope")
|
pdf.set_author("projet colloscope")
|
||||||
|
|
||||||
pdf.add_page()
|
pdf.add_page()
|
||||||
pdf.cell(text=titre, center=True, border=1, h=5)
|
pdf.cell(text="Colloscope MP2I Semestre 5/2", center=True, border=1, h=5)
|
||||||
base_y = pdf.t_margin + 10
|
base_y = pdf.t_margin + 10
|
||||||
pdf.set_y(base_y)
|
pdf.set_y(base_y)
|
||||||
pdf.liste_eleves(periode)
|
pdf.liste_eleves(etudiants)
|
||||||
#pdf.set_y(base_y)
|
pdf.set_y(base_y)
|
||||||
#pdf.table_colloscope(creneaux, semaines, rotations)
|
pdf.table_colloscope(creneaux, semaines, rotations)
|
||||||
#pdf.y += 3
|
pdf.y += 3
|
||||||
#pdf.table_travaux()
|
pdf.table_travaux()
|
||||||
|
|
||||||
pdf.output("test.pdf")
|
pdf.output("test.pdf")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
classe = Classe.objects.get(id=1)
|
generate()
|
||||||
periode = Periode.objects.get(classe=classe, libelle="Semestre 5/2")
|
|
||||||
|
|
||||||
generate(periode)
|
|
||||||
|
|
Loading…
Reference in New Issue