06b01e0fae21bf1d08172491410bec3eb040ee6d
1 # -=- encoding: utf-8 -=-
3 from auf
.django
.emploi
import models
as emploi
4 from django
.contrib
.auth
.models
import User
, Group
5 from django
.db
import models
6 from django
.db
.models
.signals
import pre_save
, pre_delete
7 from django
.dispatch
import receiver
8 from south
.modelsinspector
import add_introspection_rules
9 from tinymce
import models
as tinymce_models
11 from project
.recrutement
import groups
as recrutement_groups
19 NOTES
= [(i
, i
) for i
in range(NOTE_MIN
, NOTE_MAX
, NOTE_RANGE
)]
22 HELP_TEXT_NB_DEPENDANT
= "Le nombre de personnes à charge"
23 HELP_TEXT_TAGS_ACCEPTES
= "Pour le texte, les variables disponibles sont : \
24 {{ nom_candidat }} {{ prenom_candidat }} \
25 {{ offre_emploi }} et {{ genre_candidat }} \
26 (Pour Monsieur/Madame). Ces champs seront \
27 automatiquement remplacés par les informations de \
31 add_introspection_rules([], ["^tinymce.models.HTMLField"])
34 class Candidat(emploi
.Candidat
):
39 def moyenne_notes(self
):
40 evaluations
= CandidatEvaluation
.objects
.filter(candidat
=self
)
41 notes
= [evaluation
.note
for evaluation
in evaluations
.all() \
42 if evaluation
.note
is not None]
45 moyenne_votes
= float(sum(notes
)) / len(notes
)
47 moyenne_votes
= "Non disponible"
51 class OffreEmploiManager(models
.Manager
):
53 def get_query_set(self
):
55 return super(OffreEmploiManager
, self
).get_query_set().\
56 select_related(*fkeys
).all()
59 class ProxyOffreEmploi(emploi
.OffreEmploi
):
63 verbose_name
= u
"offre d'emploi (visualisation)"
64 verbose_name_plural
= u
"offres d'emploi (visualisation)"
66 def __unicode__(self
):
67 return '%s [%s] - View' % (self
.nom
, self
.id)
70 class ProxyCandidat(emploi
.Candidat
):
74 verbose_name
= u
"candidat (visualisation)"
75 verbose_name_plural
= u
"candidats (visualisation)"
77 def __unicode__(self
):
78 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
81 class Evaluateur(models
.Model
):
82 user
= models
.ForeignKey(User
, unique
=True, verbose_name
=u
"évaluateur")
85 verbose_name
= u
"évaluateur"
87 def __unicode__(self
):
88 return '%s %s' % (self
.user
.first_name
, self
.user
.last_name
)
91 # Synchro des objets évaluateurs pour mettre les users Django dans le groupe
92 # évaluateurs, afin d'y mettre des permissions
93 @receiver(pre_save
, sender
=Evaluateur
)
94 def sync_add_groupe_evaluateur(sender
, **kwargs
):
95 instance
= kwargs
['instance']
96 user_groups
= [g
.name
for g
in instance
.user
.groups
.all()]
97 if recrutement_groups
.EVALUATEURS
not in user_groups
:
98 grp_evaluateurs
= Group
.objects
.get(name
=recrutement_groups
.EVALUATEURS
)
99 instance
.user
.groups
.add(grp_evaluateurs
)
103 @receiver(pre_delete
, sender
=Evaluateur
)
104 def sync_delete_groupe_evaluateur(sender
, **kwargs
):
105 instance
= kwargs
['instance']
106 grp_evaluateurs
= Group
.objects
.get(name
=recrutement_groups
.EVALUATEURS
)
107 instance
.user
.groups
.remove(grp_evaluateurs
)
111 class CandidatEvaluation(models
.Model
):
112 candidat
= models
.ForeignKey(emploi
.Candidat
, db_column
='candidat',
113 related_name
='evaluations',)
114 evaluateur
= models
.ForeignKey(Evaluateur
, db_column
='evaluateur',
115 related_name
='+', verbose_name
=u
'évaluateur')
116 note
= models
.IntegerField(choices
=NOTES
, blank
=True, null
=True)
117 commentaire
= models
.TextField(null
=True, blank
=True, default
='Aucun')
118 date
= models
.DateField(auto_now_add
=True,)
121 verbose_name
= u
'évaluation du candidat'
122 verbose_name_plural
= u
'évaluations des candidats'
124 def __unicode__(self
):
125 return u
"Évaluation de %s" % self
.candidat
127 def get_appreciation(self
,):
128 if self
.note
is None:
129 return u
"non disponible"
130 return u
"%s %s" % (self
.note
, self
.commentaire
,)
133 class MesCandidatEvaluation(CandidatEvaluation
):
137 verbose_name
= u
"mon candidat à évaluer"
138 verbose_name_plural
= u
"mes candidats à évaluer"
141 #### TEMPLATE COURRIEL
143 ('SEL', 'Sélectionné'),
148 class CourrielTemplate(models
.Model
):
149 nom_modele
= models
.CharField(u
'nom du modèle', max_length
=100)
150 sujet
= models
.CharField(u
'sujet du courriel', max_length
=100)
151 plain_text
= models
.TextField(u
'texte', help_text
=HELP_TEXT_TAGS_ACCEPTES
)
153 def __unicode__(self
):
154 return self
.nom_modele
157 ordering
= ('nom_modele',)
158 verbose_name
= u
"modèle de courriel"
159 verbose_name_plural
= u
"modèles de courriel"
162 class CandidatCourriel(models
.Model
):
163 candidats
= models
.ManyToManyField(Candidat
, verbose_name
=u
"candidats")
164 template
= models
.ForeignKey(
165 CourrielTemplate
, db_column
='template', related_name
='+',
166 verbose_name
=u
"modèle de courriel"
168 sujet
= models
.CharField(
169 max_length
=255, blank
=True, help_text
=HELP_TEXT_TAGS_ACCEPTES
171 plain_text
= models
.TextField(
172 u
'texte', blank
=True, help_text
=HELP_TEXT_TAGS_ACCEPTES
174 html
= tinymce_models
.HTMLField(
175 verbose_name
=u
'texte en HTML', null
=True, blank
=True,
176 help_text
=HELP_TEXT_TAGS_ACCEPTES
179 def __unicode__(self
):
183 verbose_name
= u
"modèle de courriel"
184 verbose_name_plural
= u
"modèles de courriel"