Add Candidate app/model

This commit is contained in:
Claude Paroz 2017-10-18 18:52:59 +02:00
parent 484e32e4a7
commit a823a89a78
6 changed files with 231 additions and 0 deletions

0
candidats/__init__.py Normal file
View file

55
candidats/admin.py Normal file
View file

@ -0,0 +1,55 @@
from django import forms
from django.contrib import admin
from .models import Candidate
class CandidateAdminForm(forms.ModelForm):
class Meta:
model = Candidate
widgets = {
'comment': forms.Textarea(attrs={'cols': 100, 'rows': 1}),
'pcode': forms.TextInput(attrs={'size': 10}),
}
fields = '__all__'
class CandidateAdmin(admin.ModelAdmin):
form = CandidateAdminForm
list_display = ('last_name', 'first_name', 'section', 'confirm_email')
list_filter = ('section', 'option')
readonly_fields = ('total_result_points', 'total_result_mark', 'date_confirmation_mail')
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', 'canceled_file'),
'comment',
),
}),
("FE", {
'classes': ('collapse',),
'fields': (('exemption_ecg', 'integration_second_year', 'validation_sfpo'),),
}),
("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')
),
}),
)
def confirm_email(self, obj):
return obj.date_confirmation_mail is not None
confirm_email.boolean = True
admin.site.register(Candidate, CandidateAdmin)

View file

@ -0,0 +1,69 @@
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
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=1, verbose_name='Genre')),
('birth_date', models.DateField(blank=True, null=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é')),
('district', models.CharField(blank=True, max_length=2, verbose_name='Canton')),
('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)),
('section', 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')),
('option', models.CharField(blank=True, 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')], max_length=20, verbose_name='Option')),
('exemption_ecg', models.BooleanField(default=False)),
('validation_sfpo', models.DateField(blank=True, null=True, verbose_name='Confirmation SFPO')),
('integration_second_year', models.BooleanField(default=False, verbose_name='Intégration')),
('date_confirmation_mail', models.DateField(blank=True, null=True, verbose_name='Mail de confirmation')),
('canceled_file', models.BooleanField(default=False, verbose_name='Dossier retiré')),
('has_photo', 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(blank=True, verbose_name='Remarques')),
('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(blank=True, null=True, verbose_name='Date dépôt dossier')),
('interview_date', models.DateTimeField(blank=True, null=True, verbose_name='Date entretien prof.')),
('interview_room', models.CharField(blank=True, max_length=50, verbose_name="Salle d'entretien prof.")),
('examination_result', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Points examen')),
('interview_result', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Points entretien prof.')),
('file_result', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Points dossier')),
('total_result_points', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Total points')),
('total_result_mark', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Note finale')),
('accepted', models.BooleanField(default=False, verbose_name='Admis')),
('corporation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.Corporation', verbose_name='Employeur')),
('file_resp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='stages.Teacher', verbose_name='Exp. dossier')),
('instructor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stages.CorpContact', verbose_name='FEE/FPP')),
('interview_resp', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='stages.Teacher', verbose_name='Exp. entretien')),
],
options={
'verbose_name': 'Candidat',
},
),
]

View file

106
candidats/models.py Normal file
View file

@ -0,0 +1,106 @@
from django.db import models
GENDER_CHOICES = (
('M', 'Masculin'),
('F', 'Féminin'),
('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 Candidate(models.Model):
"""
Inscriptions for new students
"""
first_name = models.CharField('Prénom', max_length=40)
last_name = models.CharField('Nom', max_length=40)
gender = models.CharField('Genre', max_length=1, choices=GENDER_CHOICES)
birth_date = models.DateField('Date de naissance', blank=True, null=True)
street = models.CharField('Rue', max_length=150, blank=True)
pcode = models.CharField('Code postal', max_length=4)
city = models.CharField('Localité', max_length=40)
district = models.CharField('Canton', max_length=2, blank=True)
mobile = models.CharField('Portable', max_length=40, blank=True)
email = models.EmailField('Courriel', blank=True)
avs = models.CharField('No AVS', max_length=15, blank=True)
handicap = models.BooleanField(default=False)
section = models.CharField('Filière', max_length=10, choices=SECTION_CHOICES)
option = models.CharField('Option', max_length=20, choices=OPTION_CHOICES, blank=True)
exemption_ecg = models.BooleanField(default=False)
validation_sfpo = models.DateField('Confirmation SFPO', blank=True, null=True)
integration_second_year = models.BooleanField('Intégration', default=False)
date_confirmation_mail = models.DateField('Mail de confirmation', blank=True, null=True)
canceled_file = models.BooleanField('Dossier retiré', default=False)
has_photo = models.BooleanField(default=False)
corporation = models.ForeignKey(
'stages.Corporation', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='Employeur'
)
instructor = models.ForeignKey(
'stages.CorpContact', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='FEE/FPP'
)
# Checking for registration file
registration_form = models.BooleanField("Formulaire d'inscription", default=False)
certificate_of_payement = models.BooleanField("Attest. paiement", default=False)
police_record = models.BooleanField("Casier judic.", default=False)
cv = models.BooleanField("CV", default=False)
certif_of_cfc = models.BooleanField("CFC", default=False)
certif_of_800h = models.BooleanField("Attest. 800h.", default=False)
reflexive_text = models.BooleanField("Texte réflexif", default=False)
promise = models.BooleanField("Promesse d'eng.", default=False)
contract = models.BooleanField("Contrat valide", default=False)
comment = models.TextField('Remarques', blank=True)
proc_admin_ext = models.BooleanField("Insc. autre école", default=False)
work_certificate = models.BooleanField("Certif. de travail", default=False)
marks_certificate = models.BooleanField("Bull. notes", default=False)
deposite_date = models.DateField('Date dépôt dossier', blank=True, null=True)
interview_date = models.DateTimeField('Date entretien prof.', blank=True, null=True)
interview_room = models.CharField("Salle d'entretien prof.", max_length=50, blank=True)
examination_result = models.PositiveSmallIntegerField('Points examen', blank=True, null=True)
interview_result = models.PositiveSmallIntegerField('Points entretien prof.', blank=True, null=True)
file_result = models.PositiveSmallIntegerField('Points dossier', blank=True, null=True)
total_result_points = models.PositiveSmallIntegerField('Total points', blank=True, null=True)
total_result_mark = models.PositiveSmallIntegerField('Note finale', blank=True, null=True)
accepted = models.BooleanField('Admis', default=False)
interview_resp = models.ForeignKey(
'stages.Teacher', null=True, blank=True, related_name='+', verbose_name='Exp. entretien'
)
file_resp = models.ForeignKey(
'stages.Teacher', null=True, blank=True, related_name='+', verbose_name='Exp. dossier'
)
class Meta:
verbose_name = 'Candidat'
def __str__(self):
return "%s %s" % (self.last_name, self.first_name)
@property
def civility(self):
if self.gender == 'M':
return 'Monsieur'
if self.gender == 'F':
return 'Madame'
else:
return ''

View file

@ -108,6 +108,7 @@ INSTALLED_APPS = (
'tabimport',
'stages',
'candidats',
)
FILE_UPLOAD_HANDLERS = ["django.core.files.uploadhandler.TemporaryFileUploadHandler"]