1 # -=- encoding: utf-8 -=-
4 from django
.contrib
.auth
.models
import User
5 from django
.core
.files
.storage
import FileSystemStorage
6 from tinymce
import models
as tinymce_models
7 from django
.db
import models
10 from south
.modelsinspector
import add_introspection_rules
11 add_introspection_rules([], ["^tinymce.models.HTMLField"])
12 import datamaster_modeles
.models
as ref
14 from project
.rh
import models
as rh
15 from recrutement
.workflow
import grp_evaluateurs_recrutement
16 from auf
.django
.emploi
import models
as emploi
17 from auf
.django
.emploi
.models
import TYPE_PIECE_CHOICES
19 from recrutement
.workflow
import grp_evaluateurs_recrutement
26 NOTES
= [(i
, i
) for i
in range(NOTE_MIN
, NOTE_MAX
, NOTE_RANGE
)]
29 HELP_TEXT_NB_DEPENDANT
= "Le nombre de personnes à charge"
30 HELP_TEXT_TAGS_ACCEPTES
= "Pour le texte, les variables disponibles sont : \
31 {{ nom_candidat }} {{ prenom_candidat }} \
32 {{ offre_emploi }} et {{ genre_candidat }} \
33 (Pour Monsieur/Madame). Ces champs seront \
34 automatiquement remplacés par les informations de \
38 class Metadata(models
.Model
):
40 Metadata.actif = flag remplaçant la suppression.
41 actif == False : objet réputé supprimé.
43 actif
= models
.BooleanField(default
=True)
44 date_creation
= models
.DateField(auto_now_add
=True, )
49 class Candidat(emploi
.Candidat
):
53 def moyenne_notes(self
):
54 evaluations
= CandidatEvaluation
.objects
.filter(candidat
=self
)
55 notes
= [evaluation
.note
for evaluation
in evaluations
.all() \
56 if evaluation
.note
is not None]
59 moyenne_votes
= float(sum(notes
)) / len(notes
)
61 moyenne_votes
= "Non disponible"
64 class OffreEmploi(emploi
.OffreEmploi
):
69 class CandidatPiece(emploi
.CandidatPiece
):
73 class OffreEmploiManager(models
.Manager
):
74 def get_query_set(self
):
76 return super(OffreEmploiManager
, self
).get_query_set().\
77 select_related(*fkeys
).all()
79 class ProxyOffreEmploi(emploi
.OffreEmploi
):
82 verbose_name
= u
"Offre d'emploi (visualisation)"
83 verbose_name_plural
= u
"Offres d'emploi (visualisation)"
85 def __unicode__(self
):
86 return '%s [%s] - View' % (self
.nom
, self
.id)
88 class ProxyCandidat(emploi
.Candidat
):
91 verbose_name
= u
"Candidat (visualisation)"
92 verbose_name_plural
= u
"Candidats (visualisation)"
94 def __unicode__(self
):
95 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
97 class Evaluateur(models
.Model
):
98 user
= models
.ForeignKey(User
, unique
=True, verbose_name
=u
"Évaluateur")
99 offres_emploi
= models
.ManyToManyField(emploi
.OffreEmploi
,
100 related_name
="evaluateurs", blank
=True)
102 def save(self
, *args
, **kwargs
):
104 Assigner automatiquement l'évaluateurs d'une offre d'emploi à un
107 self
.user
.groups
.add(grp_evaluateurs_recrutement
)
108 super(Evaluateur
, self
).save(*args
, **kwargs
)
111 verbose_name
= u
"évaluateur"
113 def __unicode__(self
):
114 return '%s %s' % (self
.user
.first_name
, self
.user
.last_name
)
116 class CandidatEvaluation(models
.Model
):
117 candidat
= models
.ForeignKey(emploi
.Candidat
, db_column
='candidat',
119 evaluateur
= models
.ForeignKey(Evaluateur
, db_column
='evaluateur',
120 related_name
='+', verbose_name
=u
'Évaluateur')
121 note
= models
.IntegerField(choices
=NOTES
, blank
=True, null
=True)
122 commentaire
= models
.TextField(null
=True, blank
=True, default
='Aucun')
123 date
= models
.DateField(auto_now_add
=True,)
126 verbose_name
= u
'évaluation du candidat'
127 verbose_name_plural
= u
'évaluations des candidats'
129 def __unicode__(self
):
130 return u
"Évaluation de %s" % self
.candidat
132 #### TEMPLATE COURRIEL
134 ('SEL', 'Sélectionné'),
138 class CourrielTemplate(models
.Model
):
139 nom_modele
= models
.CharField(max_length
=100, verbose_name
=u
'Nom du modèle',)
140 sujet
= models
.CharField(max_length
=100, verbose_name
=u
'Sujet du courriel')
141 plain_text
= models
.TextField(verbose_name
=u
'Texte',
142 help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
143 html
= tinymce_models
.HTMLField(verbose_name
=u
'Texte en HTML',
144 help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
147 def __unicode__(self
):
148 return u
'%s' % self
.nom_modele
151 ordering
= ['nom_modele',]
152 verbose_name
= "Modèle de courriel"
153 verbose_name_plural
= "Modèles de courriel"
155 class CandidatCourriel(models
.Model
):
156 candidats
= models
.ManyToManyField(Candidat
, verbose_name
=u
"Candidats", )
157 template
= models
.ForeignKey(CourrielTemplate
, db_column
='template',
158 related_name
='+', verbose_name
=u
"Modèle de courriel", )
159 sujet
= models
.CharField(max_length
=255, blank
=True,
160 help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
161 plain_text
= models
.TextField(verbose_name
=u
'Texte', blank
=True,
162 help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
163 html
= tinymce_models
.HTMLField(verbose_name
=u
'Texte en HTML', null
=True,
164 blank
=True, help_text
=HELP_TEXT_TAGS_ACCEPTES
, )
166 def __unicode__(self
):
167 return '%s' % (self
.titre
)
170 verbose_name
= u
"modèle de courriel"
171 verbose_name_plural
= u
"modèles de courriel"