base de données + pdf

This commit is contained in:
Valentin Moguérou 2024-04-14 17:00:03 +02:00
parent f414a434df
commit 1d87443706
5 changed files with 244 additions and 67 deletions

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 import django.db.models.deletion
from django.db import migrations, models from django.db import migrations, models
@ -12,29 +12,116 @@ class Migration(migrations.Migration):
] ]
operations = [ 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( migrations.CreateModel(
name='Colleur', name='Colleur',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('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)), ('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( migrations.CreateModel(
name='Etudiant', name='Etudiant',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('prenom', models.CharField(max_length=100)), ('prenom', models.CharField(max_length=100)),
('nom', 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( migrations.CreateModel(
name='Colle', name='Creneau',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('groupe', models.IntegerField()), ('jour', models.IntegerField()),
('date', models.DateTimeField()), ('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')), ('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 from django.db import models
class Colleur(models.Model): class Lycee(models.Model):
nom=models.CharField(max_length=100) 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): class Etudiant(models.Model):
prenom=models.CharField(max_length=100) classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
nom=models.CharField(max_length=100) prenom = models.CharField(max_length=100)
groupe=models.IntegerField() nom = models.CharField(max_length=100)
#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):
colleur=models.ForeignKey(Colleur, on_delete=models.CASCADE) civilite = models.CharField(max_length=1)
groupe=models.IntegerField() nom = models.CharField(max_length=100)
date=models.DateTimeField()
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)
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 return jour
etudiants = [ etudiants = [
["Aboujaib", "Alexandre", 4, "A", "Angl.", "All."], ['Aboujaib', 'Alexandre', 4, 'A', '', ''],
["Ajan", "George", 4, "A", "Angl.", ""], ['Ajan', 'George', 4, 'A', '', ''],
["Akrad", "Lina", 1, "SI", "Angl.", ""], ['Akrad', 'Lina', 1, 'SI', '', ''],
["Aubert", "Nicolas", 1, "SI", "Angl.", ""], ['Aubert', 'Nicolas', 1, 'SI', '', ''],
["Badr", "Roman", 4, "A", "Angl.", ""], ['Badr', 'Roman', 4, 'A', '', ''],
["Bazire", "Aurélien", 5, "A", "Angl.", ""], ['Bazire', 'Aurélien', 5, 'A', '', ''],
["Boit", "Arthur", 1, "SI", "Angl.", ""], ['Boit', 'Arthur', 5, 'A', '', ''],
["Boubker", "Youssef", 1, "SI", "Angl.", ""], ['Boubker', 'Youssef', 5, 'A', '', ''],
["Boudjema", "Dylan", 1, "SI", "Angl.", ""], ['Boudjema', 'Dylan', 1, 'SI', '', ''],
["Chiriac", "Mihnea", 1, "SI", "Angl.", ""], ['Chiriac', 'Mihnea', 6, 'A', '', ''],
["Courier", "Marine", 1, "SI", "Angl.", ""], ['Courier', 'Marine', 6, 'A', '', ''],
["Daguin", "Joseph", 1, "SI", "Angl.", ""], ['Daguin', 'Joseph', 6, 'A', '', ''],
["De Weer", "Matthias", 1, "SI", "Angl.", ""], ['Dauguen', 'Gabriel', 7, 'A', '', ''],
["Desbouis", "Katell", 1, "SI", "Angl.", ""], ['De Weer', 'Matthias', 7, 'A', '', ''],
["Dupouy", "Jérémie", 1, "SI", "Angl.", ""], ['Desbouis', 'Katell', 2, 'SI', '', ''],
["Hariri--Gautier-Picard", "Grégoire", 1, "SI", "Angl.", ""], ['Dupouy', 'Jérémie', 7, 'A', '', ''],
["Juricevic", "Matteo", 1, "SI", "Angl.", ""], ['Hariri--Gautier-Picard', 'Grégoire', 8, 'A', '', ''],
["Knanoua", "Anas", 1, "SI", "Angl.", ""], ['Juricevic', 'Matteo', 8, 'A', '', ''],
["Lesenne", "Pierrick", 1, "SI", "Angl.", ""], ['Knanoua', 'Anas', 8, 'A', '', ''],
["Lin", "Hao", 1, "SI", "Angl.", ""], ['Lesenne', 'Pierrick', 9, 'A', '', ''],
["Masbatin", "Lucas", 1, "SI", "Angl.", ""], ['Lin', 'Hao', 2, 'SI', '', ''],
["Mayuran", "Mithushan", 1, "SI", "Angl.", ""], ['Masbatin', 'Lucas', 2, 'SI', '', ''],
["Messahli", "Yassine", 1, "SI", "Angl.", ""], ['Mayuran', 'Mithushan', 9, 'A', '', ''],
["Moguérou", "Valentin", 10, "B", "Angl.", "All."], ['Messahli', 'Yassine', 9, 'A', '', ''],
["Mohellebi", "Mathéo", 10, "B", "Angl.", "All."], ['Moguérou', 'Valentin', 10, 'B', '', ''],
["Mouisset--Ferrara", "Maël", 10, "B", "Angl.", "All."], ['Mohellebi', 'Mathéo', 10, 'B', '', ''],
["Ottavi", "Corentin", 10, "B", "Angl.", "All."], ['Mouisset--Ferrara', 'Maël', 10, 'B', '', ''],
["Ponce", "Alexian", 10, "B", "Angl.", "All."], ['Ottavi', 'Corentin', 11, 'B', '', ''],
["Pujol", "Raphaël", 10, "B", "Angl.", "All."], ['Ponce', 'Alexian', 11, 'B', '', ''],
["Pustetto", "Mathis", 10, "B", "Angl.", "All."], ['Pujol', 'Raphaël', 11, 'B', '', ''],
["Radice", "Roman", 10, "B", "Angl.", "All."], ['Pustetto', 'Mathis', 12, 'B', '', ''],
["Rat", "Evelyn", 10, "B", "Angl.", "All."], ['Radice', 'Roman', 12, 'B', '', ''],
["Rousse", "Louis", 10, "B", "Angl.", "All."], ['Rat', 'Evelyn', 12, 'B', '', ''],
["Roux", "Gaëtan", 10, "B", "Angl.", "All."], ['Rousse', 'Louis', 3, 'SI', '', ''],
["Rouyre--Cros", "Célian", 10, "B", "Angl.", "All."], ['Roux', 'Gaëtan', 3, 'SI', '', ''],
["Sourbé", "François-Gabriel", 10, "B", "Angl.", "All."], ['Rouyre--Cros', 'Célian', 3, 'SI', '', ''],
["Stourbe", "Simon", 10, "B", "Angl.", "All."], ['Sourbé', 'François-Gabriel', 13, 'B', '', ''],
["Thai", "Dany", 10, "B", "Angl.", "All."], ['Stourbe', 'Simon', 13, 'B', '', ''],
["Théodore", "Jonathan", 10, "B", "Angl.", "All."], ['Thai', 'Dany', 13, 'B', '', ''],
["Vandroux", "Benoît", 10, "B", "Angl.", "All."], ['Théodore', 'Jonathan', 14, 'B', '', ''],
["Veyssière", "Thibaud", 10, "B", "Angl.", "All."], ['Vandroux', 'Benoît', 14, 'B', '', ''],
["Vié", "Adrien", 10, "B", "Angl.", "All."], ['Veyssière', 'Thibaud', 14, 'B', '', ''],
["Ye", "Luan", 10, "B", "Angl.", "All."], ['Vié', 'Adrien', 15, 'B', '', ''],
["Zarka", "Amélie", 10, "B", "Angl.", "All."], ['Ye', 'Luan', 15, 'B', '', ''],
['Zarka', 'Amélie', 15, 'B', '', ''],
] ]
creneaux = [ creneaux = [
@ -98,7 +99,7 @@ class PDF(FPDF):
def liste_eleves(self, etudiants): def liste_eleves(self, etudiants):
with self.table( with self.table(
align="RIGHT", align="RIGHT",
col_widths=(50, 35, 12, 12, 12, 12), col_widths=(4, 3, 1, 1, 1, 1),
width=80, width=80,
line_height=3) as table: line_height=3) as table:
header = table.row() header = table.row()
@ -120,7 +121,7 @@ class PDF(FPDF):
align="LEFT", align="LEFT",
width=190, width=190,
line_height=3, 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: num_heading_rows=2) as table:
header = table.row() header = table.row()
@ -152,7 +153,22 @@ class PDF(FPDF):
else: else:
row.cell() 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(): def generate():
pdf = PDF(orientation="landscape", format="a4") pdf = PDF(orientation="landscape", format="a4")
@ -163,18 +179,14 @@ def generate():
pdf.set_author("projet colloscope") pdf.set_author("projet colloscope")
pdf.add_page() pdf.add_page()
pdf.cell(text="Colloscope MP2I Semestre 5/2", 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(etudiants) 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.table_travaux()
pdf.output("test.pdf") pdf.output("test.pdf")

BIN
test.pdf

Binary file not shown.