From 041bc6cdabbd9232529014599203258489e4fdbc Mon Sep 17 00:00:00 2001 From: alazo Date: Mon, 19 Mar 2018 18:36:28 +0100 Subject: [PATCH] Add new examEDEsession model and more Student fields --- stages/admin.py | 3 +- .../0010_add_fields_for_examEDEsession.py | 83 +++++++++++++++++++ stages/models.py | 28 ++++++- 3 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 stages/migrations/0010_add_fields_for_examEDEsession.py diff --git a/stages/admin.py b/stages/admin.py index e18e7cf..71325d7 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -11,7 +11,7 @@ from django.http import HttpResponse from .models import ( Teacher, Option, Student, Section, Level, Klass, Corporation, CorpContact, Domain, Period, Availability, Training, Course, - LogBookReason, LogBook, + LogBookReason, LogBook, ExamEDESession ) from .pdf import ChargeSheetPDF @@ -273,3 +273,4 @@ admin.site.register(Availability, AvailabilityAdmin) admin.site.register(Training, TrainingAdmin) admin.site.register(LogBookReason) admin.site.register(LogBook) +admin.site.register(ExamEDESession) diff --git a/stages/migrations/0010_add_fields_for_examEDEsession.py b/stages/migrations/0010_add_fields_for_examEDEsession.py new file mode 100644 index 0000000..abcf1d1 --- /dev/null +++ b/stages/migrations/0010_add_fields_for_examEDEsession.py @@ -0,0 +1,83 @@ +# Generated by Django 2.0.1 on 2018-03-19 18:35 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('stages', '0009_corpcontact_corp_nullable'), + ] + + operations = [ + migrations.CreateModel( + name='ExamEDESession', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.PositiveIntegerField()), + ('season', models.CharField(max_length=10, verbose_name='saison')), + ], + options={'verbose_name': 'Session d’examen EDE'}, + ), + migrations.AddField( + model_name='student', + name='date_exam', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='student', + name='internal_expert', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rel_internal_expert', to='stages.Teacher', verbose_name='Expert interne'), + ), + migrations.AddField( + model_name='student', + name='last_appointment', + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name='student', + name='mark', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=3, null=True, verbose_name='Note'), + ), + migrations.AddField( + model_name='student', + name='referent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rel_referent', to='stages.Teacher', verbose_name='Référent avant-projet'), + ), + migrations.AddField( + model_name='student', + name='room', + field=models.CharField(blank=True, max_length=15, verbose_name='Salle'), + ), + migrations.AddField( + model_name='student', + name='subject', + field=models.TextField(blank=True, verbose_name='Résumé TD'), + ), + migrations.AddField( + model_name='student', + name='title', + field=models.TextField(blank=True, verbose_name='Titre du TD'), + ), + migrations.AddField( + model_name='student', + name='training_referent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rel_training_referent', to='stages.Teacher', verbose_name='Référent de stage'), + ), + migrations.AlterField( + model_name='period', + name='section', + field=models.ForeignKey(limit_choices_to={'name__startswith': 'MP'}, on_delete=django.db.models.deletion.PROTECT, to='stages.Section', verbose_name='Filière'), + ), + migrations.AlterField( + model_name='student', + name='expert', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rel_expert', to='stages.CorpContact', verbose_name='Expert externe'), + ), + migrations.AddField( + model_name='student', + name='session', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.ExamEDESession'), + ), + ] diff --git a/stages/models.py b/stages/models.py index 0031a0a..f773b78 100644 --- a/stages/models.py +++ b/stages/models.py @@ -182,6 +182,17 @@ class Option(models.Model): return self.name +class ExamEDESession(models.Model): + year = models.PositiveIntegerField() + season = models.CharField('saison', max_length=10) + + class Meta: + verbose_name = "Session d’examen EDE" + + def __str__(self): + return '{0} {1}'.format(self.year, self.season) + + GENDER_CHOICES = ( ('M', 'Masculin'), ('F', 'Féminin'), @@ -213,7 +224,7 @@ class Student(models.Model): null=True, blank=True, on_delete=models.SET_NULL) mentor = models.ForeignKey('CorpContact', related_name='rel_mentor', verbose_name='Mentor', null=True, blank=True, on_delete=models.SET_NULL) - expert = models.ForeignKey('CorpContact', related_name='rel_expert', verbose_name='Expert', + expert = models.ForeignKey('CorpContact', related_name='rel_expert', verbose_name='Expert externe', null=True, blank=True, on_delete=models.SET_NULL) klass = models.ForeignKey(Klass, verbose_name='Classe', blank=True, null=True, on_delete=models.PROTECT) @@ -223,6 +234,21 @@ class Student(models.Model): report_sem2_sent = models.DateTimeField('Date envoi bull. sem 2', null=True, blank=True) archived = models.BooleanField(default=False, verbose_name='Archivé') archived_text = models.TextField(blank=True) + # ============== Fields for examination ====================== + subject = models.TextField('Résumé TD', blank=True) + title = models.TextField('Titre du TD', blank=True) + training_referent = models.ForeignKey(Teacher, null=True, blank=True, related_name='rel_training_referent', + on_delete=models.SET_NULL, verbose_name='Référent de stage') + referent = models.ForeignKey(Teacher, null=True, blank=True, related_name='rel_referent', + on_delete=models.SET_NULL, verbose_name='Référent avant-projet') + internal_expert = models.ForeignKey(Teacher, related_name='rel_internal_expert', verbose_name='Expert interne', + null=True, blank=True, on_delete=models.SET_NULL) + session = models.ForeignKey(ExamEDESession, null=True, blank=True, on_delete=models.SET_NULL) + date_exam = models.DateTimeField(blank=True, null=True) + last_appointment = models.DateField(blank=True, null=True) + room = models.CharField('Salle', max_length=15, blank=True) + mark = models.DecimalField('Note', max_digits=3, decimal_places=2, blank=True, null=True) + # ============== Fields for examination ====================== support_tabimport = True