1 # -=- encoding: utf-8 -=-
3 from django
.contrib
.auth
.models
import User
4 from tinymce
import models
as tinymce_models
5 from django
.db
import models
6 from django
.db
.models
.signals
import pre_save
, pre_delete
7 from django
.dispatch
import receiver
10 from south
.modelsinspector
import add_introspection_rules
11 add_introspection_rules([], ["^tinymce.models.HTMLField"])
13 from auf
.django
.emploi
import models
as emploi
14 from recrutement
.workflow
import grp_evaluateurs_recrutement
21 NOTES
= [(i
, i
) for i
in range(NOTE_MIN
, NOTE_MAX
, NOTE_RANGE
)]
24 HELP_TEXT_NB_DEPENDANT
= "Le nombre de personnes à charge"
25 HELP_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 \
34 class Metadata(models
.Model
):
37 Metadata.actif = flag remplaçant la suppression.
38 actif == False : objet réputé supprimé.
40 actif
= models
.BooleanField(default
=True)
41 date_creation
= models
.DateField(auto_now_add
=True, )
47 class Candidat(emploi
.Candidat
):
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]
57 moyenne_votes
= float(sum(notes
)) / len(notes
)
59 moyenne_votes
= "Non disponible"
63 class OffreEmploiManager(models
.Manager
):
64 def get_query_set(self
):
66 return super(OffreEmploiManager
, self
).get_query_set().\
67 select_related(*fkeys
).all()
70 class ProxyOffreEmploi(emploi
.OffreEmploi
):
73 verbose_name
= u
"Offre d'emploi (visualisation)"
74 verbose_name_plural
= u
"Offres d'emploi (visualisation)"
76 def __unicode__(self
):
77 return '%s [%s] - View' % (self
.nom
, self
.id)
80 class ProxyCandidat(emploi
.Candidat
):
83 verbose_name
= u
"Candidat (visualisation)"
84 verbose_name_plural
= u
"Candidats (visualisation)"
86 def __unicode__(self
):
87 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
90 class Evaluateur(models
.Model
):
91 user
= models
.ForeignKey(User
, unique
=True, verbose_name
=u
"Évaluateur")
94 verbose_name
= u
"évaluateur"
96 def __unicode__(self
):
97 return '%s %s' % (self
.user
.first_name
, self
.user
.last_name
)
100 # Synchro des objets évaluateurs pour mettre les users Django dans le groupe
101 # évaluateurs, afin d'y mettre des permissions
102 @receiver(pre_save
, sender
=Evaluateur
)
103 def 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
)
110 @receiver(pre_delete
, sender
=Evaluateur
)
111 def sync_delete_groupe_evaluateur(sender
, **kwargs
):
112 instance
= kwargs
['instance']
113 instance
.user
.groups
.remove(grp_evaluateurs_recrutement
)
117 class CandidatEvaluation(models
.Model
):
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')
122 note
= models
.IntegerField(choices
=NOTES
, blank
=True, null
=True)
123 commentaire
= models
.TextField(null
=True, blank
=True, default
='Aucun')
124 date
= models
.DateField(auto_now_add
=True,)
127 verbose_name
= u
'évaluation du candidat'
128 verbose_name_plural
= u
'évaluations des candidats'
130 def __unicode__(self
):
131 return u
"Évaluation de %s" % self
.candidat
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
,)
139 class MesCandidatEvaluation(CandidatEvaluation
):
143 verbose_name
= u
"Mon candidat à évaluer"
144 verbose_name_plural
= u
"Mes candidats à évaluer"
147 #### TEMPLATE COURRIEL
149 ('SEL', 'Sélectionné'),
154 class 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
)
159 def __unicode__(self
):
160 return self
.nom_modele
163 ordering
= ('nom_modele',)
164 verbose_name
= "Modèle de courriel"
165 verbose_name_plural
= "Modèles de courriel"
168 class CandidatCourriel(models
.Model
):
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"
174 sujet
= models
.CharField(
175 max_length
=255, blank
=True, help_text
=HELP_TEXT_TAGS_ACCEPTES
177 plain_text
= models
.TextField(
178 u
'texte', blank
=True, help_text
=HELP_TEXT_TAGS_ACCEPTES
180 html
= tinymce_models
.HTMLField(
181 verbose_name
=u
'texte en HTML', null
=True, blank
=True,
182 help_text
=HELP_TEXT_TAGS_ACCEPTES
185 def __unicode__(self
):
189 verbose_name
= u
"modèle de courriel"
190 verbose_name_plural
= u
"modèles de courriel"