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 post_init
, 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 \
33 class Metadata(models
.Model
):
35 Metadata.actif = flag remplaçant la suppression.
36 actif == False : objet réputé supprimé.
38 actif
= models
.BooleanField(default
=True)
39 date_creation
= models
.DateField(auto_now_add
=True, )
44 class Candidat(emploi
.Candidat
):
48 def moyenne_notes(self
):
49 evaluations
= CandidatEvaluation
.objects
.filter(candidat
=self
)
50 notes
= [evaluation
.note
for evaluation
in evaluations
.all() \
51 if evaluation
.note
is not None]
54 moyenne_votes
= float(sum(notes
)) / len(notes
)
56 moyenne_votes
= "Non disponible"
59 class OffreEmploi(emploi
.OffreEmploi
):
64 class CandidatPiece(emploi
.CandidatPiece
):
68 class OffreEmploiManager(models
.Manager
):
69 def get_query_set(self
):
71 return super(OffreEmploiManager
, self
).get_query_set().\
72 select_related(*fkeys
).all()
74 class ProxyOffreEmploi(emploi
.OffreEmploi
):
77 verbose_name
= u
"Offre d'emploi (visualisation)"
78 verbose_name_plural
= u
"Offres d'emploi (visualisation)"
80 def __unicode__(self
):
81 return '%s [%s] - View' % (self
.nom
, self
.id)
83 class ProxyCandidat(emploi
.Candidat
):
86 verbose_name
= u
"Candidat (visualisation)"
87 verbose_name_plural
= u
"Candidats (visualisation)"
89 def __unicode__(self
):
90 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
92 class Evaluateur(models
.Model
):
93 user
= models
.ForeignKey(User
, unique
=True, verbose_name
=u
"Évaluateur")
96 verbose_name
= u
"évaluateur"
98 def __unicode__(self
):
99 return '%s %s' % (self
.user
.first_name
, self
.user
.last_name
)
101 # Synchro des objets évaluateurs pour mettre les users Django dans le groupe
102 # évaluateurs, afin d'y mettre des permissions
103 @receiver(post_init
, sender
=Evaluateur
)
104 def sync_add_groupe_evaluateur(sender
, **kwargs
):
105 instance
= kwargs
['instance']
106 if grp_evaluateurs_recrutement
not in instance
.user
.groups
.all():
107 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
134 class MesCandidatEvaluation(CandidatEvaluation
):
138 verbose_name
= u
"Mon candidat à évaluer"
139 verbose_name_plural
= u
"Mes candidats à évaluer"
142 #### TEMPLATE COURRIEL
144 ('SEL', 'Sélectionné'),
148 class CourrielTemplate(models
.Model
):
149 nom_modele
= models
.CharField(max_length
=100, verbose_name
=u
'Nom du modèle',)
150 sujet
= models
.CharField(max_length
=100, verbose_name
=u
'Sujet du courriel')
151 plain_text
= models
.TextField(verbose_name
=u
'Texte',
152 help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
155 def __unicode__(self
):
156 return u
'%s' % self
.nom_modele
159 ordering
= ['nom_modele',]
160 verbose_name
= "Modèle de courriel"
161 verbose_name_plural
= "Modèles de courriel"
163 class CandidatCourriel(models
.Model
):
164 candidats
= models
.ManyToManyField(Candidat
, verbose_name
=u
"Candidats", )
165 template
= models
.ForeignKey(CourrielTemplate
, db_column
='template',
166 related_name
='+', verbose_name
=u
"Modèle de courriel", )
167 sujet
= models
.CharField(max_length
=255, blank
=True,
168 help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
169 plain_text
= models
.TextField(verbose_name
=u
'Texte', blank
=True,
170 help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
171 html
= tinymce_models
.HTMLField(verbose_name
=u
'Texte en HTML', null
=True,
172 blank
=True, help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
174 def __unicode__(self
):
175 return '%s' % (self
.titre
)
178 verbose_name
= u
"modèle de courriel"
179 verbose_name_plural
= u
"modèles de courriel"