Marketplace, CSS, iCal and a lot of things... #4

Closed
valentin wants to merge 59 commits from dev into main
5 changed files with 244 additions and 67 deletions
Showing only changes of commit bef9cbdde0 - Show all commits

View File

@ -1,4 +1,4 @@
# Generated by Django 5.0.4 on 2024-04-12 22:38
# Generated by Django 5.0.4 on 2024-04-14 13:40
import django.db.models.deletion
from django.db import migrations, models
@ -12,29 +12,116 @@ class Migration(migrations.Migration):
]
operations = [
migrations.CreateModel(
name='Classe',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('libelle', models.CharField(max_length=20)),
('annee', models.IntegerField()),
('jour_zero', models.DateField()),
],
),
migrations.CreateModel(
name='Colleur',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('civilite', models.CharField(max_length=1)),
('nom', models.CharField(max_length=100)),
],
),
migrations.CreateModel(
name='Lycee',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('uai', models.CharField(max_length=10)),
('libelle', models.CharField(max_length=100)),
('vacances', models.CharField(max_length=1)),
],
),
migrations.CreateModel(
name='Matiere',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('libelle', models.CharField(max_length=100)),
('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(
name='Etudiant',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('prenom', models.CharField(max_length=100)),
('nom', models.CharField(max_length=100)),
('groupe', models.IntegerField()),
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
('groupes', models.ManyToManyField(to='colloscope.groupe')),
],
),
migrations.AddField(
model_name='classe',
name='lycee',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.lycee'),
),
migrations.CreateModel(
name='Periode',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('libelle', models.CharField(max_length=100)),
('debut', models.DateField()),
('fin', models.DateField()),
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
],
),
migrations.CreateModel(
name='Colle',
name='Creneau',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('groupe', models.IntegerField()),
('date', models.DateTimeField()),
('jour', models.IntegerField()),
('heure', models.TimeField()),
('duree', models.DurationField()),
('salle', models.CharField(max_length=20)),
('est_colle', models.BooleanField()),
('capacite', models.IntegerField()),
('classe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.classe')),
('colleur', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.colleur')),
('matiere', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.matiere')),
('periode', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.periode')),
],
),
migrations.CreateModel(
name='Rotation',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('semaine', models.IntegerField()),
('creneau', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.creneau')),
('groupes', models.ManyToManyField(to='colloscope.groupe')),
],
),
migrations.CreateModel(
name='Amendement',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('est_positif', models.BooleanField()),
('etudiant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.etudiant')),
('rotation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.rotation')),
],
),
migrations.CreateModel(
name='Utilisateur',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('username', models.CharField(max_length=100)),
('password', models.CharField(max_length=300)),
('timestamp', models.DateTimeField(auto_now_add=True)),
('colleur', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.colleur')),
('etudiant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='colloscope.etudiant')),
],
),
]

View File

@ -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'),
),
]

View File

@ -1,15 +1,69 @@
from django.db import models
class Colleur(models.Model):
nom=models.CharField(max_length=100)
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)
annee = models.IntegerField()
jour_zero = models.DateField()
class Periode(models.Model):
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
libelle = models.CharField(max_length=100)
debut = models.DateField()
fin = models.DateField()
class Matiere(models.Model):
libelle = models.CharField(max_length=100)
code = models.CharField(max_length=20)
class Groupe(models.Model):
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
libelle = models.CharField(max_length=100)
class Etudiant(models.Model):
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
prenom = models.CharField(max_length=100)
nom = models.CharField(max_length=100)
groupe=models.IntegerField()
#lv1 = models.ForeignKey(Matiere, on_delete=models.CASCADE)
#lv2 = models.ForeignKey(Matiere, on_delete=models.CASCADE)
groupes = models.ManyToManyField(Groupe)
class Colle(models.Model):
class Colleur(models.Model):
civilite = models.CharField(max_length=1)
nom = models.CharField(max_length=100)
class Creneau(models.Model):
classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
jour = models.IntegerField()
heure = models.TimeField()
duree = models.DurationField()
salle = models.CharField(max_length=20)
periode = models.ForeignKey(Periode, on_delete=models.CASCADE)
matiere = models.ForeignKey(Matiere, on_delete=models.CASCADE)
colleur = models.ForeignKey(Colleur, on_delete=models.CASCADE)
groupe=models.IntegerField()
date=models.DateTimeField()
est_colle = models.BooleanField()
capacite = models.IntegerField()
class Rotation(models.Model):
creneau = models.ForeignKey(Creneau, on_delete=models.CASCADE)
groupes = models.ManyToManyField(Groupe)
semaine = models.IntegerField()
class Amendement(models.Model):
est_positif = models.BooleanField()
rotation = models.ForeignKey(Rotation, on_delete=models.CASCADE)
etudiant = models.ForeignKey(Etudiant, on_delete=models.CASCADE)
class Utilisateur(models.Model):
username = models.CharField(max_length=100)
password = models.CharField(max_length=300)
timestamp = models.DateTimeField(auto_now_add=True)
etudiant = models.ForeignKey(Etudiant, on_delete=models.DO_NOTHING, null=True)
colleur = models.ForeignKey(Colleur, on_delete=models.DO_NOTHING, null=True)

View File

@ -23,50 +23,51 @@ def jour_of_sem(n, cal):
return jour
etudiants = [
["Aboujaib", "Alexandre", 4, "A", "Angl.", "All."],
["Ajan", "George", 4, "A", "Angl.", ""],
["Akrad", "Lina", 1, "SI", "Angl.", ""],
["Aubert", "Nicolas", 1, "SI", "Angl.", ""],
["Badr", "Roman", 4, "A", "Angl.", ""],
["Bazire", "Aurélien", 5, "A", "Angl.", ""],
["Boit", "Arthur", 1, "SI", "Angl.", ""],
["Boubker", "Youssef", 1, "SI", "Angl.", ""],
["Boudjema", "Dylan", 1, "SI", "Angl.", ""],
["Chiriac", "Mihnea", 1, "SI", "Angl.", ""],
["Courier", "Marine", 1, "SI", "Angl.", ""],
["Daguin", "Joseph", 1, "SI", "Angl.", ""],
["De Weer", "Matthias", 1, "SI", "Angl.", ""],
["Desbouis", "Katell", 1, "SI", "Angl.", ""],
["Dupouy", "Jérémie", 1, "SI", "Angl.", ""],
["Hariri--Gautier-Picard", "Grégoire", 1, "SI", "Angl.", ""],
["Juricevic", "Matteo", 1, "SI", "Angl.", ""],
["Knanoua", "Anas", 1, "SI", "Angl.", ""],
["Lesenne", "Pierrick", 1, "SI", "Angl.", ""],
["Lin", "Hao", 1, "SI", "Angl.", ""],
["Masbatin", "Lucas", 1, "SI", "Angl.", ""],
["Mayuran", "Mithushan", 1, "SI", "Angl.", ""],
["Messahli", "Yassine", 1, "SI", "Angl.", ""],
["Moguérou", "Valentin", 10, "B", "Angl.", "All."],
["Mohellebi", "Mathéo", 10, "B", "Angl.", "All."],
["Mouisset--Ferrara", "Maël", 10, "B", "Angl.", "All."],
["Ottavi", "Corentin", 10, "B", "Angl.", "All."],
["Ponce", "Alexian", 10, "B", "Angl.", "All."],
["Pujol", "Raphaël", 10, "B", "Angl.", "All."],
["Pustetto", "Mathis", 10, "B", "Angl.", "All."],
["Radice", "Roman", 10, "B", "Angl.", "All."],
["Rat", "Evelyn", 10, "B", "Angl.", "All."],
["Rousse", "Louis", 10, "B", "Angl.", "All."],
["Roux", "Gaëtan", 10, "B", "Angl.", "All."],
["Rouyre--Cros", "Célian", 10, "B", "Angl.", "All."],
["Sourbé", "François-Gabriel", 10, "B", "Angl.", "All."],
["Stourbe", "Simon", 10, "B", "Angl.", "All."],
["Thai", "Dany", 10, "B", "Angl.", "All."],
["Théodore", "Jonathan", 10, "B", "Angl.", "All."],
["Vandroux", "Benoît", 10, "B", "Angl.", "All."],
["Veyssière", "Thibaud", 10, "B", "Angl.", "All."],
["Vié", "Adrien", 10, "B", "Angl.", "All."],
["Ye", "Luan", 10, "B", "Angl.", "All."],
["Zarka", "Amélie", 10, "B", "Angl.", "All."],
['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 = [
@ -98,7 +99,7 @@ class PDF(FPDF):
def liste_eleves(self, etudiants):
with self.table(
align="RIGHT",
col_widths=(50, 35, 12, 12, 12, 12),
col_widths=(4, 3, 1, 1, 1, 1),
width=80,
line_height=3) as table:
header = table.row()
@ -120,7 +121,7 @@ class PDF(FPDF):
align="LEFT",
width=190,
line_height=3,
col_widths=(25, 12, 10, 25, 12, *(10,)*len(semaines)),
col_widths=(2, 1, 1, 3, 1, *(1,)*len(semaines)),
num_heading_rows=2) as table:
header = table.row()
@ -152,7 +153,22 @@ class PDF(FPDF):
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():
pdf = PDF(orientation="landscape", format="a4")
@ -163,18 +179,14 @@ def generate():
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")

BIN
test.pdf

Binary file not shown.