diff --git a/.idea/dictionaries/alzo.xml b/.idea/dictionaries/alzo.xml new file mode 100644 index 0000000..331a0fe --- /dev/null +++ b/.idea/dictionaries/alzo.xml @@ -0,0 +1,17 @@ + + + + créés + domaine + erreurs + klass + modifiés + naissance + objets + pcode + prénom + rencontrées + étudiants + + + \ No newline at end of file diff --git a/.idea/epcstages.iml b/.idea/epcstages.iml new file mode 100644 index 0000000..6711606 --- /dev/null +++ b/.idea/epcstages.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..411e19c --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,39 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b29c312 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..212be0b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..ad3d640 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,746 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1502127797453 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/stages/admin.py b/stages/admin.py index fa3bf2b..3da0b1a 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -2,21 +2,30 @@ import os import tempfile import zipfile +from collections import OrderedDict +from datetime import date, datetime from django import forms from django.contrib import admin from django.db import models from django.db.models import Case, Count, When from django.http import HttpResponse +from django.core.mail import send_mail + +from openpyxl import Workbook +from openpyxl.styles import Font, Style +from openpyxl.writer.excel import save_virtual_workbook from stages.models import ( Teacher, Option, Student, Section, Level, Klass, Corporation, CorpContact, Domain, Period, Availability, Training, Course, - AsaCandidate, AseCandidate, EdePECandidate, EdePSCandidate, AsscCandidate, - EdsCandidate, + Candidate, District, Config ) from stages.pdf import ChargeSheetPDF +openxml_contenttype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + + def print_charge_sheet(modeladmin, request, queryset): """ Génère un pdf pour chaque enseignant, écrit le fichier créé @@ -192,7 +201,7 @@ class AvailabilityInline(admin.StackedInline): ordering = ('corporation__name',) extra = 1 formfield_overrides = { - models.TextField: {'widget': forms.Textarea(attrs={'rows':2, 'cols':40})}, + models.TextField: {'widget': forms.Textarea(attrs={'rows': 2, 'cols': 40})}, } @@ -227,6 +236,79 @@ class CourseAdmin(admin.ModelAdmin): search_fields = ('teacher__last_name', 'public', 'subject') +def send_confirmation_mail(modeladmin, request, queryset): + send_mail( + 'Subject here', + 'Here is the message.', + 'alain.zosso@webzos.com', + ['azo@rpn.ch'], + fail_silently=False, + ) +send_confirmation_mail.short_description = "Envoyer email de confirmation" + + +def export_candidates(modeladmin, request, queryset): + # Tous les champs du modèle + export_fields = OrderedDict([(f.verbose_name, f.name) for f in Candidate._meta.get_fields()]) + export_fields['Canton'] = 'district__abrev' + export_fields['Employeur'] = 'corporation__name' + export_fields['FEE/FPP'] = 'instructor__last_name' + del export_fields['ID'] + + wb = Workbook() + ws = wb.active + ws.title = 'Exportation' + bold = Style(font=Font(bold=True)) + for col_idx, header in enumerate(export_fields.keys(), start=1): + cell = ws.cell(row=1, column=col_idx) + cell.value = header + cell.style = bold + query_keys = [f for f in export_fields.values() if f is not None] + for row_idx, tr in enumerate(queryset.values(*query_keys), start=2): + for col_idx, field in enumerate(query_keys, start=1): + ws.cell(row=row_idx, column=col_idx).value = tr[field] + + response = HttpResponse(save_virtual_workbook(wb), content_type=openxml_contenttype) + response['Content-Disposition'] = 'attachment; filename=%s%s.xlsx' % ( + 'candidats_export_', date.strftime(date.today(), '%Y-%m-%d')) + return response + export_candidates.short_description = "Exporter les candidats sélectionnés" + + +class CandidateAdmin(admin.ModelAdmin): + list_display = ('last_name', 'first_name', 'section', 'confirm_email') + list_filter = ('section', 'option', ) + readonly_fields = ('total_result_points', 'total_result_mark', 'date_confirmation_mail', ) + actions = [send_confirmation_mail, export_candidates] + fieldsets = ( + (None, { + 'fields': (('first_name', 'last_name', 'gender'), + ('street', 'pcode', 'city', 'district'), + ('mobile', 'email'), + ('birth_date', 'avs', 'handicap', ), + ('section', 'option'), + ('corporation', 'instructor'), + ('deposite_date', 'date_confirmation_mail') + ), + }), + ("FE", { + 'classes': ('collapse',), + 'fields': ('exemption_ecg',), + }), + ("EDE/EDS", { + 'classes': ('collapse',), + 'fields': (('registration_form', 'certificate_of_payement', 'cv', 'certif_of_cfc', + 'police_record', 'certif_of_800h', 'reflexive_text', 'work_certificate', 'marks_certificate', + 'proc_admin_ext', 'promise', 'contract'), + 'comment', + ('interview_date', 'interview_room'), + ('examination_result', 'interview_result', 'file_result', 'total_result_points', + 'total_result_mark') + ), + }), + ) + + admin.site.register(Section) admin.site.register(Level) admin.site.register(Klass, KlassAdmin) @@ -240,9 +322,6 @@ 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 +admin.site.register(Candidate, CandidateAdmin) +admin.site.register(District) +admin.site.register(Config) diff --git a/stages/migrations/0003_ame=Add_Candidate_model.py b/stages/migrations/0003_ame=Add_Candidate_model.py index 470530a..e32b44d 100644 --- a/stages/migrations/0003_ame=Add_Candidate_model.py +++ b/stages/migrations/0003_ame=Add_Candidate_model.py @@ -42,62 +42,7 @@ class Migration(migrations.Migration): ('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', diff --git a/stages/migrations/0004_ame=Add_EdsCandidate_model.py b/stages/migrations/0004_ame=Add_EdsCandidate_model.py index 5cb1636..2666f4f 100644 --- a/stages/migrations/0004_ame=Add_EdsCandidate_model.py +++ b/stages/migrations/0004_ame=Add_EdsCandidate_model.py @@ -13,26 +13,4 @@ class Migration(migrations.Migration): ] 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/migrations/0005_ame=Ame_Candidate.py b/stages/migrations/0005_ame=Ame_Candidate.py new file mode 100644 index 0000000..76aafbe --- /dev/null +++ b/stages/migrations/0005_ame=Ame_Candidate.py @@ -0,0 +1,169 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-09-07 14:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('stages', '0004_ame=Add_EdsCandidate_model'), + ] + + operations = [ + migrations.CreateModel( + name='Config', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(max_length=100)), + ('value', models.TextField()), + ('comment', models.TextField()), + ], + ), + migrations.RemoveField( + model_name='candidate', + name='tel', + ), + migrations.AddField( + model_name='candidate', + name='certif_of_800h', + field=models.BooleanField(default=False, verbose_name='Attest. 800h.'), + ), + migrations.AddField( + model_name='candidate', + name='certif_of_cfc', + field=models.BooleanField(default=False, verbose_name='CFC'), + ), + migrations.AddField( + model_name='candidate', + name='certificate_of_payement', + field=models.BooleanField(default=False, verbose_name='Attest. paiement'), + ), + migrations.AddField( + model_name='candidate', + name='comment', + field=models.TextField(blank=True, default='', verbose_name='Remarques'), + ), + migrations.AddField( + model_name='candidate', + name='contract', + field=models.BooleanField(default=False, verbose_name='Contrat valide'), + ), + migrations.AddField( + model_name='candidate', + name='corporation', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Corporation', verbose_name='Employeur'), + ), + migrations.AddField( + model_name='candidate', + name='cv', + field=models.BooleanField(default=False, verbose_name='CV'), + ), + migrations.AddField( + model_name='candidate', + name='deposite_date', + field=models.DateField(blank=True, default=None, null=True, verbose_name='Date dépôt dossier'), + ), + migrations.AddField( + model_name='candidate', + name='examination_result', + field=models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Points examen'), + ), + migrations.AddField( + model_name='candidate', + name='file_result', + field=models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Points dossier'), + ), + migrations.AddField( + model_name='candidate', + name='instructor', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.CorpContact', verbose_name='FEE/FPP'), + ), + migrations.AddField( + model_name='candidate', + name='interview_date', + field=models.DateTimeField(blank=True, default=None, null=True, verbose_name='Date entretien prof.'), + ), + migrations.AddField( + model_name='candidate', + name='interview_result', + field=models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Points entretien prof.'), + ), + migrations.AddField( + model_name='candidate', + name='interview_room', + field=models.CharField(blank=True, max_length=50, verbose_name="Salle d'entretien prof."), + ), + migrations.AddField( + model_name='candidate', + name='marks_certificate', + field=models.BooleanField(default=False, verbose_name='Bull. notes'), + ), + migrations.AddField( + model_name='candidate', + name='police_record', + field=models.BooleanField(default=False, verbose_name='Casier judic.'), + ), + migrations.AddField( + model_name='candidate', + name='proc_admin_ext', + field=models.BooleanField(default=False, verbose_name='Insc. autre école'), + ), + migrations.AddField( + model_name='candidate', + name='promise', + field=models.BooleanField(default=False, verbose_name="Promesse d'eng."), + ), + migrations.AddField( + model_name='candidate', + name='reflexive_text', + field=models.BooleanField(default=False, verbose_name='Texte réflexif'), + ), + migrations.AddField( + model_name='candidate', + name='registration_form', + field=models.BooleanField(default=False, verbose_name="Formulaire d'inscription"), + ), + migrations.AddField( + model_name='candidate', + name='total_result_mark', + field=models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Note finale'), + ), + migrations.AddField( + model_name='candidate', + name='total_result_points', + field=models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Total points'), + ), + migrations.AddField( + model_name='candidate', + name='work_certificate', + field=models.BooleanField(default=False, verbose_name='Certif. de travail'), + ), + migrations.AlterField( + model_name='candidate', + name='birth_date', + field=models.DateField(blank=True, default=None, null=True, verbose_name='Date de naissance'), + ), + migrations.AlterField( + model_name='candidate', + name='date_confirmation_mail', + field=models.DateField(blank=True, default=None, null=True, verbose_name='Mail de confirmation'), + ), + migrations.AlterField( + model_name='candidate', + name='district', + field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='stages.District', verbose_name='Canton'), + ), + migrations.AlterField( + model_name='candidate', + name='option', + field=models.CharField(blank=True, max_length=20, null=True), + ), + migrations.AlterField( + model_name='candidate', + name='section', + field=models.CharField(choices=[('ASA', 'Aide en soin et accompagnement AFP'), ('ASE', 'Assist. socio-éducatif-ve CFC'), ('ASSC', 'Assist. en soin et santé communautaire CFC'), ('EDE', "Educ. de l'enfance, dipl. ES"), ('EDS', 'Educ. social-e, dipl. ES')], max_length=10, verbose_name='Filière'), + ), + ] diff --git a/stages/models.py b/stages/models.py index cc48b8c..b6273ba 100644 --- a/stages/models.py +++ b/stages/models.py @@ -425,8 +425,40 @@ GENDER_CHOICES = ( ('I', 'Inconnu') ) +SECTION_CHOICES = ( + ('ASA', 'Aide en soin et accompagnement AFP'), + ('ASE', 'Assist. socio-éducatif-ve CFC'), + ('ASSC', 'Assist. en soin et santé communautaire CFC'), + ('EDE', 'Educ. de l\'enfance, dipl. ES'), + ('EDS', 'Educ. social-e, dipl. ES'), +) + + +OPTION_CHOICES = ( + ('GEN', 'Généraliste'), + ('ENF', 'Enfance'), + ('PAG', 'Personnes âgées'), + ('HAN', 'Handicap'), + ('PE-5400h', 'Parcours Emploi 5400h.'), + ('PE-3600h', 'Parcours Emploi 3600h.'), + ('PS', 'Parcours stage'), +) + + +class Config(models.Model): + key = models.CharField(max_length=100) + value = models.TextField() + comment = models.TextField() + + def __str__(self): + return '{0} : {1}'.format(self.key, self.value) + + class District(models.Model): + class Meta: + verbose_name = 'Canton' + abrev = models.CharField(max_length=10) name = models.CharField(max_length=30) @@ -435,89 +467,61 @@ class District(models.Model): class Candidate(models.Model): + + class Meta: + verbose_name = 'Candidat' + 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') + birth_date = models.DateField(default=None, blank=True, null=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') + district = models.ForeignKey(District, default=None, null=True, verbose_name='Canton') 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) + section = models.CharField(max_length=10, choices=SECTION_CHOICES, null=False, verbose_name='Filière') + option = models.CharField(max_length=20, null=True, blank=True) exemption_ecg = models.BooleanField(default=False) - date_confirmation_mail = models.DateField(auto_now_add=True, verbose_name='Mail de confirmation') + date_confirmation_mail = models.DateField(default=None, blank=True, null=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) + registration_form = models.BooleanField(default=False, verbose_name="Formulaire d'inscription") + certificate_of_payement = models.BooleanField(default=False, verbose_name="Attest. paiement") + police_record = models.BooleanField(default=False, verbose_name="Casier judic.") + cv = models.BooleanField(default=False, verbose_name="CV") + certif_of_cfc = models.BooleanField(default=False, verbose_name="CFC") + certif_of_800h = models.BooleanField(default=False, verbose_name="Attest. 800h.") + reflexive_text = models.BooleanField(default=False, verbose_name="Texte réflexif") + promise = models.BooleanField(default=False, verbose_name="Promesse d'eng.") + contract = models.BooleanField(default=False, verbose_name="Contrat valide") + comment = models.TextField(default='', blank=True, verbose_name='Remarques') - 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') + proc_admin_ext = models.BooleanField(default=False, verbose_name="Insc. autre école") + work_certificate = models.BooleanField(default=False, verbose_name="Certif. de travail") + marks_certificate = models.BooleanField(default=False, verbose_name="Bull. notes") + deposite_date = models.DateField(default=None, blank=True, null=True, verbose_name='Date dépôt dossier') + interview_date = models.DateTimeField(default=None, blank=True, null=True, verbose_name='Date entretien prof.') + interview_room = models.CharField(max_length=50, blank=True, verbose_name="Salle d'entretien prof.") + examination_result = models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Points examen') + interview_result = models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Points entretien prof.') + file_result = models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Points dossier') + total_result_points = models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Total points') + total_result_mark = models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='Note finale') - -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') + def confirm_email(self): + if self.date_confirmation_mail is None: + return u''.format('/static/img/no_ok.jpg') + else: + return u''.format('/static/img/ok.jpeg') + confirm_email.allow_tags = True diff --git a/stages/static/img/no_ok.jpg b/stages/static/img/no_ok.jpg new file mode 100644 index 0000000..3ee7540 Binary files /dev/null and b/stages/static/img/no_ok.jpg differ diff --git a/stages/static/img/ok.jpeg b/stages/static/img/ok.jpeg new file mode 100644 index 0000000..6bc7f9e Binary files /dev/null and b/stages/static/img/ok.jpeg differ