render_to_response -> render
[auf_rh_dae.git] / project / recrutement / models.py
CommitLineData
9372250c
OL
1# -=- encoding: utf-8 -=-
2
9372250c 3from django.contrib.auth.models import User
9372250c 4from django.db import models
c472b01a 5from django.db.models.signals import pre_save, pre_delete
3bc5ea42
OL
6from django.dispatch import receiver
7
75f0e87b 8from tinymce import models as tinymce_models
9372250c
OL
9from south.modelsinspector import add_introspection_rules
10add_introspection_rules([], ["^tinymce.models.HTMLField"])
9372250c 11
9372250c 12from auf.django.emploi import models as emploi
75f0e87b
DB
13
14from project.recrutement.workflow import grp_evaluateurs_recrutement
9372250c
OL
15
16### CONSTANTES
17#NOTES
18NOTE_MIN = 1
19NOTE_RANGE = 1
20NOTE_MAX = 11
21NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
22
23#HELP_TEXT
24HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
25HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
26 {{ nom_candidat }} {{ prenom_candidat }} \
27 {{ offre_emploi }} et {{ genre_candidat }} \
28 (Pour Monsieur/Madame). Ces champs seront \
29 automatiquement remplacés par les informations de \
30 chaque candidat."
31
b31ce2d7 32
9372250c
OL
33# Abstracts
34class Metadata(models.Model):
b31ce2d7
EMS
35 """
36 Méta-données AUF.
9372250c
OL
37 Metadata.actif = flag remplaçant la suppression.
38 actif == False : objet réputé supprimé.
39 """
40 actif = models.BooleanField(default=True)
41 date_creation = models.DateField(auto_now_add=True, )
b31ce2d7 42
9372250c
OL
43 class Meta:
44 abstract = True
45
b31ce2d7 46
9372250c
OL
47class Candidat(emploi.Candidat):
48 class Meta:
49 proxy = True
50
51 def moyenne_notes(self):
52 evaluations = CandidatEvaluation.objects.filter(candidat=self)
53 notes = [evaluation.note for evaluation in evaluations.all() \
54 if evaluation.note is not None]
55
56 if len(notes) > 0:
57 moyenne_votes = float(sum(notes)) / len(notes)
58 else:
59 moyenne_votes = "Non disponible"
60 return moyenne_votes
61
b31ce2d7 62
9372250c
OL
63class OffreEmploiManager(models.Manager):
64 def get_query_set(self):
65 fkeys = ('region',)
66 return super(OffreEmploiManager, self).get_query_set().\
67 select_related(*fkeys).all()
68
b31ce2d7 69
9372250c
OL
70class ProxyOffreEmploi(emploi.OffreEmploi):
71 class Meta:
72 proxy = True
73 verbose_name = u"Offre d'emploi (visualisation)"
74 verbose_name_plural = u"Offres d'emploi (visualisation)"
75
76 def __unicode__(self):
77 return '%s [%s] - View' % (self.nom, self.id)
78
b31ce2d7 79
9372250c
OL
80class ProxyCandidat(emploi.Candidat):
81 class Meta:
82 proxy = True
83 verbose_name = u"Candidat (visualisation)"
84 verbose_name_plural = u"Candidats (visualisation)"
85
86 def __unicode__(self):
87 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
88
b31ce2d7 89
9372250c
OL
90class Evaluateur(models.Model):
91 user = models.ForeignKey(User, unique=True, verbose_name=u"Évaluateur")
940c9dd8 92
9372250c
OL
93 class Meta:
94 verbose_name = u"évaluateur"
95
96 def __unicode__(self):
97 return '%s %s' % (self.user.first_name, self.user.last_name)
98
b31ce2d7 99
3bc5ea42
OL
100# Synchro des objets évaluateurs pour mettre les users Django dans le groupe
101# évaluateurs, afin d'y mettre des permissions
c472b01a 102@receiver(pre_save, sender=Evaluateur)
3bc5ea42
OL
103def sync_add_groupe_evaluateur(sender, **kwargs):
104 instance = kwargs['instance']
105 if grp_evaluateurs_recrutement not in instance.user.groups.all():
106 instance.user.groups.add(grp_evaluateurs_recrutement)
107 instance.user.save()
108
b31ce2d7 109
3bc5ea42
OL
110@receiver(pre_delete, sender=Evaluateur)
111def sync_delete_groupe_evaluateur(sender, **kwargs):
112 instance = kwargs['instance']
113 instance.user.groups.remove(grp_evaluateurs_recrutement)
114 instance.user.save()
115
116
9372250c 117class CandidatEvaluation(models.Model):
b31ce2d7
EMS
118 candidat = models.ForeignKey(emploi.Candidat, db_column='candidat',
119 related_name='evaluations',)
120 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
121 related_name='+', verbose_name=u'Évaluateur')
9372250c
OL
122 note = models.IntegerField(choices=NOTES, blank=True, null=True)
123 commentaire = models.TextField(null=True, blank=True, default='Aucun')
b31ce2d7 124 date = models.DateField(auto_now_add=True,)
9372250c
OL
125
126 class Meta:
127 verbose_name = u'évaluation du candidat'
128 verbose_name_plural = u'évaluations des candidats'
129
130 def __unicode__(self):
131 return u"Évaluation de %s" % self.candidat
132
bc4d0ce7
OL
133 def get_appreciation(self,):
134 if self.note is None:
135 return u"non disponible"
136 return u"%s %s" % (self.note, self.commentaire,)
3bc5ea42 137
b31ce2d7 138
3bc5ea42
OL
139class MesCandidatEvaluation(CandidatEvaluation):
140
141 class Meta:
142 proxy = True
143 verbose_name = u"Mon candidat à évaluer"
144 verbose_name_plural = u"Mes candidats à évaluer"
145
146
9372250c
OL
147#### TEMPLATE COURRIEL
148TEMPLATE_CHOICES = (
149 ('SEL', 'Sélectionné'),
150 ('REF', 'Refusé'),
151)
152
9372250c 153
b31ce2d7
EMS
154class CourrielTemplate(models.Model):
155 nom_modele = models.CharField(u'nom du modèle', max_length=100)
156 sujet = models.CharField(u'sujet du courriel', max_length=100)
157 plain_text = models.TextField(u'texte', help_text=HELP_TEXT_TAGS_ACCEPTES)
9372250c
OL
158
159 def __unicode__(self):
b31ce2d7 160 return self.nom_modele
9372250c
OL
161
162 class Meta:
b31ce2d7 163 ordering = ('nom_modele',)
9372250c
OL
164 verbose_name = "Modèle de courriel"
165 verbose_name_plural = "Modèles de courriel"
166
b31ce2d7 167
9372250c 168class CandidatCourriel(models.Model):
b31ce2d7
EMS
169 candidats = models.ManyToManyField(Candidat, verbose_name=u"Candidats")
170 template = models.ForeignKey(
171 CourrielTemplate, db_column='template', related_name='+',
172 verbose_name=u"Modèle de courriel"
173 )
174 sujet = models.CharField(
175 max_length=255, blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES
176 )
177 plain_text = models.TextField(
178 u'texte', blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES
179 )
180 html = tinymce_models.HTMLField(
181 verbose_name=u'texte en HTML', null=True, blank=True,
182 help_text=HELP_TEXT_TAGS_ACCEPTES
183 )
9372250c
OL
184
185 def __unicode__(self):
b31ce2d7 186 return self.titre
9372250c
OL
187
188 class Meta:
189 verbose_name = u"modèle de courriel"
190 verbose_name_plural = u"modèles de courriel"