1503: Permettre aux évaluateurs d'entrer des notes/commentaires sur les candidatures
[auf_rh_dae.git] / project / recrutement / models.py
CommitLineData
df59fcab 1# -=- encoding: utf-8 -=-
2
3import datetime
4
4418c732 5from django.core.files.storage import FileSystemStorage
6f2d5d58 6from django.db import models
4418c732 7import settings
362a3534 8#from private_files import PrivateFileField
6f2d5d58 9
df59fcab 10import datamaster_modeles.models as ref
11from project.rh import models as rh
12
596fe324 13### CONSTANTES
14#NOTES
15NOTE_MIN = 1
16NOTE_RANGE = 1
17NOTE_MAX = 10
18NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
19
df59fcab 20# Abstracts
21class Metadata(models.Model):
22 """Méta-données AUF.
23 Metadata.actif = flag remplaçant la suppression.
24 actif == False : objet réputé supprimé.
25 """
26 actif = models.BooleanField(default=True)
27 date_creation = models.DateField(auto_now_add=True)
28
29 class Meta:
30 abstract = True
31
32
33class OffreEmploi(Metadata):
4418c732 34 # TODO : Afficher les bureaux selon la région choisies?
df59fcab 35 nom = models.CharField(max_length=255)
36 resume = models.TextField()
37 description = models.TextField()
38 poste = models.ForeignKey(rh.Poste, db_column='poste')
39 date_limite = models.DateField(verbose_name="Date limite")
40 region = models.ForeignKey(ref.Region, db_column='region')
41 bureau = models.ForeignKey(ref.Bureau, db_column='bureau')
4418c732 42
43 def __unicode__(self):
44 return '%s [%s]' % (self.nom, self.id)
df59fcab 45
46
47### CANDIDAT
48
49GENRE_CHOICES = (
50 ('M', 'Homme'),
51 ('F', 'Femme'),
52)
53SITUATION_CHOICES = (
54 ('C', 'Célibataire'),
55 ('F', 'Fiancé'),
56 ('M', 'Marié'),
57 ('D', 'Divorcé'),
58)
59STATUT_CHOICES = (
60 ('NOUV', 'Nouveau'),
61 ('REF', 'Refusé'),
62 ('SEL', 'Sélectionné'),
63 ('ACC', 'Accepté'),
64 ('REC', 'Recevable'), # Trouver une lettre plus appropriée?
65)
66
67class Candidat(Metadata):
7f9e891e 68 # TODO : Automatiser le statut à la création à Nouveau
69 statut = models.CharField(max_length=4,
70 choices=STATUT_CHOICES)
df59fcab 71 offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
7f9e891e 72 related_name='+')
df59fcab 73 prenom = models.CharField(max_length=255)
74 nom = models.CharField(max_length=255)
75 genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
76 nationalite = models.ForeignKey(ref.Pays,
4418c732 77 db_column='nationalite',
7f9e891e 78 related_name='+')
df59fcab 79 date_naissance = models.DateField(verbose_name="Date de naissance")
80 situation_famille = models.CharField(max_length=1,
4418c732 81 choices=SITUATION_CHOICES)
df59fcab 82 nombre_dependant = models.IntegerField(verbose_name="Nombre de dépendant")
83 niveau_diplome = models.CharField(max_length=255,
4418c732 84 verbose_name="Niveau du diplôme")
df59fcab 85 employeur_actuel = models.CharField(max_length=255)
86 poste_actuel = models.CharField(max_length=255)
87 domaine_professionnel = models.CharField(max_length=255)
88
89 # Adresse
90 adresse = models.CharField(max_length=255)
91 ville = models.CharField(max_length=255)
92 etat_province = models.CharField(max_length=255,
4418c732 93 verbose_name="État/Province")
df59fcab 94 pays = models.ForeignKey(ref.Pays, db_column='pays',
7f9e891e 95 related_name='+')
4418c732 96
97 def __unicode__(self):
98 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
99
100### PIECE CANDIDAT
101# Upload de fichiers
102storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
103 base_url=settings.PRIVE_MEDIA_URL)
104
105def candidat_piece_dispatch(instance, filename):
106 path = "offre_emploi/%s_%s/%s/%s_%s" % (instance.candidat.nom,
107 instance.candidat.prenom, instance.nom, instance.candidat.id,
108 filename)
109 return path
110
111class CandidatPiece(models.Model):
112 candidat = models.ForeignKey(Candidat, db_column='candidat',
113 related_name='+')
114 nom = models.CharField(max_length=255)
362a3534 115 #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
4418c732 116 path = models.FileField(upload_to=candidat_piece_dispatch,
117 storage=storage_prive)
118
119 def __unicode__(self):
120 return '%s' % (self.nom)
121
122class Evaluateur(models.Model):
596fe324 123 candidats = models.ManyToManyField(Candidat, verbose_name='Candidats',
362a3534 124 related_name="evaluateurs", blank=True, null=True,)
eb579d40 125 nom = models.CharField(max_length=255)
126 prenom = models.CharField(max_length=255)
127
128 def __unicode__(self):
129 return '%s %s' % (self.prenom, self.nom)
4418c732 130
131class CandidatEvaluation(models.Model):
132 candidat = models.ForeignKey(Candidat, db_column='candidat',
7f9e891e 133 related_name='+')
4418c732 134 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
7f9e891e 135 related_name='+')
596fe324 136 note = models.IntegerField(choices=NOTES, blank=True, null=True)
362a3534 137 commentaire = models.TextField(null=True, blank=True)
4418c732 138 date = models.DateField(auto_now_add=True)