base de données + pdf
This commit is contained in:
parent
9c539785a8
commit
80d41c0561
|
@ -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')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -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,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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue