1835: Un CandidatEvaluation doit se créer si l'évaluateur a déjà été assigné à une...
[auf_rh_dae.git] / project / recrutement / models.py
CommitLineData
df59fcab 1# -=- encoding: utf-8 -=-
2
3import datetime
b235ec9d 4from django.contrib.auth.models import User
4418c732 5from django.core.files.storage import FileSystemStorage
ec517164 6from tinymce import models as tinymce_models
6f2d5d58 7from django.db import models
4418c732 8import settings
6f2d5d58 9
df59fcab 10import datamaster_modeles.models as ref
d0a50c0a 11from project.rh.models import Poste
0d9e7dce 12from recrutement.workflow import grp_evaluateurs_recrutement
fc2279db
OL
13from auf.django.emploi import models as emploi
14from auf.django.emploi.models import TYPE_PIECE_CHOICES
df59fcab 15
2c3c54ee
NBV
16from recrutement.workflow import grp_evaluateurs_recrutement
17
596fe324 18### CONSTANTES
19#NOTES
20NOTE_MIN = 1
21NOTE_RANGE = 1
e34a2ae0 22NOTE_MAX = 11
596fe324 23NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
b903198b
NBV
24
25#HELP_TEXT
ee42ad96 26HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
b903198b 27HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ"
32834000
NBV
28HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
29 {{ nom_candidat }} {{ prenom_candidat }} \
ec02ae0f
NBV
30 {{ offre_emploi }} et {{ genre_candidat }} \
31 (Pour Monsieur/Madame). Ces champs seront \
32834000
NBV
32 automatiquement remplacés par les informations de \
33 chaque candidat."
596fe324 34
df59fcab 35# Abstracts
36class Metadata(models.Model):
37 """Méta-données AUF.
38 Metadata.actif = flag remplaçant la suppression.
39 actif == False : objet réputé supprimé.
40 """
41 actif = models.BooleanField(default=True)
b903198b
NBV
42 date_creation = models.DateField(auto_now_add=True,
43 help_text=HELP_TEXT_FORMAT_DATE, )
df59fcab 44
45 class Meta:
46 abstract = True
47
fc2279db
OL
48class Candidat(emploi.Candidat):
49 class Meta:
50 proxy = True
51
52class OffreEmploi(emploi.OffreEmploi):
53 class Meta:
54 proxy = True
55
56class CandidatPiece(emploi.CandidatPiece):
57 class Meta:
58 proxy = True
59
4e8e178f 60class OffreEmploiManager(models.Manager):
61 def get_query_set(self):
61a4b478 62 fkeys = ('region',)
720c3ad5
NBV
63 return super(OffreEmploiManager, self).get_query_set().\
64 select_related(*fkeys).all()
4e8e178f 65
47cf4908 66class ProxyPoste(Poste):
4e8e178f 67 class Meta:
68 proxy = True
69
70 def __unicode__(self):
71 return '%s [%s]' % (self.nom, self.id)
df59fcab 72
540dfae4 73class ProxyOffreEmploi(emploi.OffreEmploi):
f6724c20
NBV
74 class Meta:
75 proxy = True
76 verbose_name = "Offre d'emploi (visualisation)"
77 verbose_name_plural = "Offres d'emploi (visualisation)"
78
79 def __unicode__(self):
80 return '%s [%s] - View' % (self.nom, self.id)
4418c732 81
b8b74dee 82class ProxyCandidat(emploi.Candidat):
f6724c20
NBV
83 class Meta:
84 proxy = True
85 verbose_name = "Candidat (visualisation)"
86 verbose_name_plural = "Candidats (visualisation)"
87
88 def __unicode__(self):
89 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
90
4e8340cf 91class Evaluateur(models.Model):
dc7faf2b 92 user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur")
540dfae4
NBV
93 offres_emploi = models.ManyToManyField(emploi.OffreEmploi,
94 related_name="evaluateurs", blank=True)
4e8340cf 95
2c3c54ee
NBV
96 def save(self, *args, **kwargs):
97 """
98 Assigner automatiquement l'évaluateurs d'une offre d'emploi à un
0d9e7dce 99 nouveau candidat.
2c3c54ee 100 """
0d9e7dce
NBV
101 self.user.groups.add(grp_evaluateurs_recrutement)
102 super(Evaluateur, self).save(*args, **kwargs)
2c3c54ee 103
4e8340cf 104 class Meta:
105 verbose_name = "évaluateur"
106
107 def __unicode__(self):
108 return '%s %s' % (self.user.first_name, self.user.last_name)
109
b89fef74 110class AdministrateurRegional(models.Model):
27c81d11 111 user = models.ForeignKey(User, unique=True,
dc7faf2b 112 verbose_name="Administrateur régionnal")
3b4bfad3 113 regions = models.ManyToManyField(ref.Region,
114 verbose_name="Régions", )
eb579d40 115
b235ec9d 116 class Meta:
27c81d11 117 verbose_name = "administrateur régional"
4e8340cf 118 verbose_name_plural = "administrateurs régionaux"
b235ec9d 119
2adf9e0c 120 def __unicode__(self):
121 return '%s %s' % (self.user.first_name, self.user.last_name)
122
4418c732 123class CandidatEvaluation(models.Model):
b8b74dee 124 candidat = models.ForeignKey(emploi.Candidat, db_column='candidat',
3b4b948e 125 related_name='+',)
27c81d11 126 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
cced6a23 127 related_name='+', verbose_name='Évaluateur')
596fe324 128 note = models.IntegerField(choices=NOTES, blank=True, null=True)
572c8d08 129 commentaire = models.TextField(null=True, blank=True, default='Aucun')
b903198b
NBV
130 date = models.DateField(auto_now_add=True,
131 help_text=HELP_TEXT_FORMAT_DATE, )
b235ec9d 132
133 class Meta:
cced6a23 134 verbose_name = 'évaluation du candidat'
135 verbose_name_plural = 'évaluations des candidats'
ec517164 136
1df9fc7f 137#### TEMPLATE COURRIEL
d84c3a68 138TEMPLATE_CHOICES = (
139 ('SEL', 'Sélectionné'),
140 ('REF', 'Refusé'),
141)
142
143class CourrielTemplate(models.Model):
32834000
NBV
144 nom_modele = models.CharField(max_length=100, verbose_name='Nom du modèle',)
145 sujet = models.CharField(max_length=100, verbose_name='Sujet du courriel')
146 plain_text = models.TextField(verbose_name='Texte',
147 help_text=HELP_TEXT_TAGS_ACCEPTES, )
148 html = tinymce_models.HTMLField(verbose_name='Texte en HTML',
149 help_text=HELP_TEXT_TAGS_ACCEPTES, )
d84c3a68 150
151 def __unicode__(self):
0b1bbb53 152 return u'%s' % self.nom_modele
d84c3a68 153
154 class Meta:
0b1bbb53 155 ordering = ['nom_modele',]
d84c3a68 156
157class CandidatCourriel(models.Model):
32834000
NBV
158 candidats = models.ManyToManyField(Candidat, verbose_name="Candidats", )
159 template = models.ForeignKey(CourrielTemplate, db_column='template',
0b1bbb53 160 related_name='+', verbose_name="Modèle de courriel", )
32834000
NBV
161 sujet = models.CharField(max_length=255, blank=True,
162 help_text=HELP_TEXT_TAGS_ACCEPTES, )
163 plain_text = models.TextField(verbose_name='Texte', blank=True,
164 help_text=HELP_TEXT_TAGS_ACCEPTES, )
dc7faf2b
NBV
165 html = tinymce_models.HTMLField(verbose_name='Texte en HTML', null=True,
166 blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, )
ec517164 167
168 def __unicode__(self):
169 return '%s' % (self.titre)
2c3c54ee
NBV
170
171 class Meta:
172 verbose_name = "modèle de courriel"
173 verbose_name_plural = "modèles de courriel"
ec517164 174