From 3a74057ec0673ef90430f6fbbfd7e6b742ca9f3d Mon Sep 17 00:00:00 2001 From: alazo Date: Tue, 5 Sep 2017 20:35:25 +0200 Subject: [PATCH] candidate_01 --- stages/admin.py | 8 ++ .../0003_ame=Add_Candidate_model.py | 116 ++++++++++++++++ .../0004_ame=Add_EdsCandidate_model.py | 38 ++++++ stages/models.py | 127 ++++++++++++++++-- 4 files changed, 277 insertions(+), 12 deletions(-) create mode 100644 stages/migrations/0003_ame=Add_Candidate_model.py create mode 100644 stages/migrations/0004_ame=Add_EdsCandidate_model.py diff --git a/stages/admin.py b/stages/admin.py index b4ad258..fa3bf2b 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -11,6 +11,8 @@ from django.http import HttpResponse from stages.models import ( Teacher, Option, Student, Section, Level, Klass, Corporation, CorpContact, Domain, Period, Availability, Training, Course, + AsaCandidate, AseCandidate, EdePECandidate, EdePSCandidate, AsscCandidate, + EdsCandidate, ) from stages.pdf import ChargeSheetPDF @@ -238,3 +240,9 @@ admin.site.register(Domain) admin.site.register(Period, PeriodAdmin) admin.site.register(Availability, AvailabilityAdmin) admin.site.register(Training, TrainingAdmin) +admin.site.register(AsaCandidate) +admin.site.register(AseCandidate) +admin.site.register(AsscCandidate) +admin.site.register(EdePECandidate) +admin.site.register(EdePSCandidate) +admin.site.register(EdsCandidate) \ No newline at end of file diff --git a/stages/migrations/0003_ame=Add_Candidate_model.py b/stages/migrations/0003_ame=Add_Candidate_model.py new file mode 100644 index 0000000..470530a --- /dev/null +++ b/stages/migrations/0003_ame=Add_Candidate_model.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-09-05 16:56 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('stages', '0002_add_student_option_ase'), + ] + + operations = [ + migrations.CreateModel( + name='Candidate', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('first_name', models.CharField(max_length=40, verbose_name='Prénom')), + ('last_name', models.CharField(max_length=40, verbose_name='Nom')), + ('gender', models.CharField(choices=[('M', 'Masculin'), ('F', 'Féminin'), ('I', 'Inconnu')], max_length=3, verbose_name='Genre')), + ('birth_date', models.DateField(blank=True, verbose_name='Date de naissance')), + ('street', models.CharField(blank=True, max_length=150, verbose_name='Rue')), + ('pcode', models.CharField(max_length=4, verbose_name='Code postal')), + ('city', models.CharField(max_length=40, verbose_name='Localité')), + ('tel', models.CharField(blank=True, max_length=40, verbose_name='Téléphone')), + ('mobile', models.CharField(blank=True, max_length=40, verbose_name='Portable')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='Courriel')), + ('avs', models.CharField(blank=True, max_length=15, verbose_name='No AVS')), + ('handicap', models.BooleanField(default=False)), + ('exemption_ecg', models.BooleanField(default=False)), + ('date_confirmation_mail', models.DateField(auto_now_add=True, verbose_name='Mail de confirmation')), + ], + ), + migrations.CreateModel( + name='District', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('abrev', models.CharField(max_length=10)), + ('name', models.CharField(max_length=30)), + ], + ), + migrations.CreateModel( + name='AsaAsscCandidate', + fields=[ + ('candidate_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='stages.Candidate')), + ('corporation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Corporation', verbose_name='Employeur')), + ('instructor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.CorpContact', verbose_name='FEE/FPP')), + ], + bases=('stages.candidate',), + ), + migrations.CreateModel( + name='AseCandidate', + fields=[ + ('candidate_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='stages.Candidate')), + ('corporation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Corporation', verbose_name='Employeur')), + ('instructor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.CorpContact', verbose_name='FEE/FPP')), + ], + bases=('stages.candidate',), + ), + migrations.CreateModel( + name='EdePECandidate', + fields=[ + ('candidate_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='stages.Candidate')), + ('registration_form', models.BooleanField(default=False)), + ('certificate_of_payement', models.BooleanField(default=False)), + ('police_record', models.BooleanField(default=False)), + ('cv', models.BooleanField(default=False)), + ('certif_of_cfc', models.BooleanField(default=False)), + ('certif_of_800h', models.BooleanField(default=False)), + ('reflexive_text', models.BooleanField(default=False)), + ('proc_admin_ext', models.BooleanField(default=False)), + ('work_certificate', models.BooleanField(default=False)), + ('marks_certificate', models.BooleanField(default=False)), + ('deposite_date', models.DateField(default=django.utils.timezone.now, verbose_name='Date dépôt dossier')), + ('corporation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Corporation', verbose_name='Employeur')), + ('instructor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.CorpContact', verbose_name='FEE/FPP')), + ], + bases=('stages.candidate',), + ), + migrations.CreateModel( + name='EdePSCandidate', + fields=[ + ('candidate_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='stages.Candidate')), + ('registration_form', models.BooleanField(default=False)), + ('certificate_of_payement', models.BooleanField(default=False)), + ('police_record', models.BooleanField(default=False)), + ('cv', models.BooleanField(default=False)), + ('certif_of_cfc', models.BooleanField(default=False)), + ('certif_of_800h', models.BooleanField(default=False)), + ('reflexive_text', models.BooleanField(default=False)), + ('proc_admin_ext', models.BooleanField(default=False)), + ('work_certificate', models.BooleanField(default=False)), + ('marks_certificate', models.BooleanField(default=False)), + ('deposite_date', models.DateField(default=django.utils.timezone.now, verbose_name='Date dépôt dossier')), + ], + bases=('stages.candidate',), + ), + migrations.AddField( + model_name='candidate', + name='district', + field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='stages.District'), + ), + migrations.AddField( + model_name='candidate', + name='option', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Option'), + ), + migrations.AddField( + model_name='candidate', + name='section', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='stages.Section'), + ), + ] diff --git a/stages/migrations/0004_ame=Add_EdsCandidate_model.py b/stages/migrations/0004_ame=Add_EdsCandidate_model.py new file mode 100644 index 0000000..5cb1636 --- /dev/null +++ b/stages/migrations/0004_ame=Add_EdsCandidate_model.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-09-05 17:06 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('stages', '0003_ame=Add_Candidate_model'), + ] + + operations = [ + migrations.CreateModel( + name='AsscCandidate', + fields=[ + ('candidate_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='stages.Candidate')), + ('corporation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Corporation', verbose_name='Employeur')), + ('instructor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.CorpContact', verbose_name='FEE/FPP')), + ], + bases=('stages.candidate',), + ), + migrations.CreateModel( + name='EdsCandidate', + fields=[ + ('candidate_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='stages.Candidate')), + ('corporation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Corporation', verbose_name='Employeur')), + ('instructor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.CorpContact', verbose_name='FEE/FPP')), + ], + bases=('stages.candidate',), + ), + migrations.RenameModel( + old_name='AsaAsscCandidate', + new_name='AsaCandidate', + ), + ] diff --git a/stages/models.py b/stages/models.py index 15cfba3..cc48b8c 100644 --- a/stages/models.py +++ b/stages/models.py @@ -1,4 +1,5 @@ import json +from django.utils import timezone from collections import OrderedDict from datetime import date, timedelta @@ -67,7 +68,7 @@ class Teacher(models.Model): archived = models.BooleanField(default=False) class Meta: - verbose_name='Enseignant' + verbose_name ='Enseignant' ordering = ('last_name', 'first_name') def __str__(self): @@ -166,11 +167,11 @@ class Student(models.Model): dispense_eps = models.BooleanField(default=False) soutien_dys = models.BooleanField(default=False) corporation = models.ForeignKey('Corporation', null=True, blank=True, - on_delete=models.SET_NULL, verbose_name='Employeur') + on_delete=models.SET_NULL, verbose_name='Employeur') instructor = models.ForeignKey('CorpContact', null=True, blank=True, - on_delete=models.SET_NULL, verbose_name='FEE/FPP') + on_delete=models.SET_NULL, verbose_name='FEE/FPP') klass = models.ForeignKey(Klass, verbose_name='Classe', blank=True, null=True, - on_delete=models.PROTECT) + on_delete=models.PROTECT) archived = models.BooleanField(default=False, verbose_name='Archivé') archived_text = models.TextField(blank=True) @@ -235,7 +236,7 @@ class Corporation(models.Model): short_name = models.CharField(max_length=40, blank=True, verbose_name='Nom court') district = models.CharField(max_length=20, blank=True, verbose_name='Canton') parent = models.ForeignKey('self', null=True, blank=True, verbose_name='Institution mère', - on_delete=models.SET_NULL) + on_delete=models.SET_NULL) sector = models.CharField(max_length=40, blank=True, verbose_name='Secteur') typ = models.CharField(max_length=40, blank=True, verbose_name='Type de structure') street = models.CharField(max_length=100, blank=True, verbose_name='Rue') @@ -296,7 +297,7 @@ class Period(models.Model): """ Périodes de stages """ title = models.CharField(max_length=150, verbose_name='Titre') section = models.ForeignKey(Section, verbose_name='Filière', on_delete=models.PROTECT, - limit_choices_to={'name__startswith': 'MP'}) + limit_choices_to={'name__startswith': 'MP'}) level = models.ForeignKey(Level, verbose_name='Niveau', on_delete=models.PROTECT) start_date = models.DateField(verbose_name='Date de début') end_date = models.DateField(verbose_name='Date de fin') @@ -338,7 +339,7 @@ class Availability(models.Model): period = models.ForeignKey(Period, verbose_name='Période', on_delete=models.CASCADE) domain = models.ForeignKey(Domain, verbose_name='Domaine', on_delete=models.CASCADE) contact = models.ForeignKey(CorpContact, null=True, blank=True, verbose_name='Contact institution', - on_delete=models.SET_NULL) + on_delete=models.SET_NULL) priority = models.BooleanField('Prioritaire', default=False) comment = models.TextField(blank=True, verbose_name='Remarques') @@ -402,8 +403,8 @@ IMPUTATION_CHOICES = ( class Course(models.Model): """Cours et mandats attribués aux enseignants""" - teacher = models.ForeignKey(Teacher, blank=True, null=True, - verbose_name="Enseignant-e", on_delete=models.SET_NULL) + teacher = models.ForeignKey(Teacher, blank=True, null=True, verbose_name="Enseignant-e", + on_delete=models.SET_NULL) public = models.CharField("Classe(s)", max_length=200, default='') subject = models.CharField("Sujet", max_length=100, default='') period = models.IntegerField("Nb de périodes", default=0) @@ -415,6 +416,108 @@ class Course(models.Model): verbose_name_plural = 'Cours' def __str__(self): - return '{0} - {1} - {2} - {3}'.format( - self.teacher, self.public, self.subject, self.period - ) + return '{0} - {1} - {2} - {3}'.format(self.teacher, self.public, self.subject, self.period) + + +GENDER_CHOICES = ( + ('M', 'Masculin'), + ('F', 'Féminin'), + ('I', 'Inconnu') +) + + +class District(models.Model): + abrev = models.CharField(max_length=10) + name = models.CharField(max_length=30) + + def __str__(self): + return '{0} - {1}'.format(self.abrev, self.name) + + +class Candidate(models.Model): + first_name = models.CharField(max_length=40, verbose_name='Prénom') + last_name = models.CharField(max_length=40, verbose_name='Nom') + gender = models.CharField(max_length=3, choices=GENDER_CHOICES, verbose_name='Genre') + birth_date = models.DateField(blank=True, verbose_name='Date de naissance') + street = models.CharField(max_length=150, blank=True, verbose_name='Rue') + pcode = models.CharField(max_length=4, verbose_name='Code postal') + city = models.CharField(max_length=40, verbose_name='Localité') + district = models.ForeignKey(District, default=None, null=True) + tel = models.CharField(max_length=40, blank=True, verbose_name='Téléphone') + mobile = models.CharField(max_length=40, blank=True, verbose_name='Portable') + email = models.EmailField(verbose_name='Courriel', blank=True) + avs = models.CharField(max_length=15, blank=True, verbose_name='No AVS') + handicap = models.BooleanField(default=False) + + section = models.ForeignKey(Section, null=False) + option = models.ForeignKey(Option, null=True, blank=True, on_delete=models.SET_NULL) + exemption_ecg = models.BooleanField(default=False) + + date_confirmation_mail = models.DateField(auto_now_add=True, verbose_name='Mail de confirmation') + + +class AsaCandidate(Candidate): + corporation = models.ForeignKey('Corporation', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='Employeur') + instructor = models.ForeignKey('CorpContact', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='FEE/FPP') + + +class AsscCandidate(Candidate): + corporation = models.ForeignKey('Corporation', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='Employeur') + instructor = models.ForeignKey('CorpContact', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='FEE/FPP') + + +class AseCandidate(Candidate): + + corporation = models.ForeignKey('Corporation', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='Employeur') + instructor = models.ForeignKey('CorpContact', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='FEE/FPP') + + +class EdePECandidate(Candidate): + corporation = models.ForeignKey('Corporation', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='Employeur') + instructor = models.ForeignKey('CorpContact', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='FEE/FPP') + + # Checking for registration file + registration_form = models.BooleanField(default=False) + certificate_of_payement = models.BooleanField(default=False) + police_record = models.BooleanField(default=False) + cv = models.BooleanField(default=False) + certif_of_cfc = models.BooleanField(default=False) + certif_of_800h = models.BooleanField(default=False) + reflexive_text = models.BooleanField(default=False) + + proc_admin_ext = models.BooleanField(default=False) + work_certificate = models.BooleanField(default=False) + marks_certificate = models.BooleanField(default=False) + deposite_date = models.DateField(default=timezone.now, verbose_name='Date dépôt dossier') + + +class EdePSCandidate(Candidate): + + # Checking for registration file + registration_form = models.BooleanField(default=False) + certificate_of_payement = models.BooleanField(default=False) + police_record = models.BooleanField(default=False) + cv = models.BooleanField(default=False) + certif_of_cfc = models.BooleanField(default=False) + certif_of_800h = models.BooleanField(default=False) + reflexive_text = models.BooleanField(default=False) + + proc_admin_ext = models.BooleanField(default=False) + work_certificate = models.BooleanField(default=False) + marks_certificate = models.BooleanField(default=False) + deposite_date = models.DateField(default=timezone.now, verbose_name='Date dépôt dossier') + + +class EdsCandidate(Candidate): + corporation = models.ForeignKey('Corporation', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='Employeur') + instructor = models.ForeignKey('CorpContact', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='FEE/FPP')