chmod
[auf_rh_dae.git] / project / recrutement / models.py
CommitLineData
df59fcab 1# -=- encoding: utf-8 -=-
2
3import datetime
b235ec9d 4from django.contrib.auth.models import User
4418c732 5from django.core.files.storage import FileSystemStorage
ec517164 6from tinymce import models as tinymce_models
6f2d5d58 7from django.db import models
4418c732 8import settings
6f2d5d58 9
7b93eed4
NBV
10from south.modelsinspector import add_introspection_rules
11add_introspection_rules([], ["^tinymce.models.HTMLField"])
df59fcab 12import datamaster_modeles.models as ref
d333c690
NBV
13
14from project.rh import models as rh
0d9e7dce 15from recrutement.workflow import grp_evaluateurs_recrutement
fc2279db
OL
16from auf.django.emploi import models as emploi
17from auf.django.emploi.models import TYPE_PIECE_CHOICES
df59fcab 18
2c3c54ee
NBV
19from recrutement.workflow import grp_evaluateurs_recrutement
20
596fe324 21### CONSTANTES
22#NOTES
23NOTE_MIN = 1
24NOTE_RANGE = 1
e34a2ae0 25NOTE_MAX = 11
596fe324 26NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
b903198b
NBV
27
28#HELP_TEXT
ee42ad96 29HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
32834000
NBV
30HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
31 {{ nom_candidat }} {{ prenom_candidat }} \
ec02ae0f
NBV
32 {{ offre_emploi }} et {{ genre_candidat }} \
33 (Pour Monsieur/Madame). Ces champs seront \
32834000
NBV
34 automatiquement remplacés par les informations de \
35 chaque candidat."
596fe324 36
df59fcab 37# Abstracts
38class Metadata(models.Model):
39 """Méta-données AUF.
40 Metadata.actif = flag remplaçant la suppression.
41 actif == False : objet réputé supprimé.
42 """
43 actif = models.BooleanField(default=True)
a25e1d5c 44 date_creation = models.DateField(auto_now_add=True, )
df59fcab 45
46 class Meta:
47 abstract = True
48
fc2279db
OL
49class Candidat(emploi.Candidat):
50 class Meta:
51 proxy = True
52
11f7b571
NBV
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]
57
7d0ae1ba 58 if len(notes) > 0:
11f7b571
NBV
59 moyenne_votes = float(sum(notes)) / len(notes)
60 else:
61 moyenne_votes = "Non disponible"
62 return moyenne_votes
63
fc2279db
OL
64class OffreEmploi(emploi.OffreEmploi):
65 class Meta:
66 proxy = True
67
e2968e84 68
fc2279db
OL
69class CandidatPiece(emploi.CandidatPiece):
70 class Meta:
71 proxy = True
72
4e8e178f 73class OffreEmploiManager(models.Manager):
74 def get_query_set(self):
61a4b478 75 fkeys = ('region',)
720c3ad5
NBV
76 return super(OffreEmploiManager, self).get_query_set().\
77 select_related(*fkeys).all()
4e8e178f 78
540dfae4 79class ProxyOffreEmploi(emploi.OffreEmploi):
f6724c20
NBV
80 class Meta:
81 proxy = True
3f5f3898
OL
82 verbose_name = u"Offre d'emploi (visualisation)"
83 verbose_name_plural = u"Offres d'emploi (visualisation)"
f6724c20
NBV
84
85 def __unicode__(self):
86 return '%s [%s] - View' % (self.nom, self.id)
4418c732 87
b8b74dee 88class ProxyCandidat(emploi.Candidat):
f6724c20
NBV
89 class Meta:
90 proxy = True
3f5f3898
OL
91 verbose_name = u"Candidat (visualisation)"
92 verbose_name_plural = u"Candidats (visualisation)"
f6724c20
NBV
93
94 def __unicode__(self):
95 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
96
4e8340cf 97class Evaluateur(models.Model):
3f5f3898 98 user = models.ForeignKey(User, unique=True, verbose_name=u"Évaluateur")
540dfae4
NBV
99 offres_emploi = models.ManyToManyField(emploi.OffreEmploi,
100 related_name="evaluateurs", blank=True)
4e8340cf 101
2c3c54ee
NBV
102 def save(self, *args, **kwargs):
103 """
104 Assigner automatiquement l'évaluateurs d'une offre d'emploi à un
0d9e7dce 105 nouveau candidat.
2c3c54ee 106 """
0d9e7dce
NBV
107 self.user.groups.add(grp_evaluateurs_recrutement)
108 super(Evaluateur, self).save(*args, **kwargs)
2c3c54ee 109
4e8340cf 110 class Meta:
3f5f3898 111 verbose_name = u"évaluateur"
4e8340cf 112
113 def __unicode__(self):
114 return '%s %s' % (self.user.first_name, self.user.last_name)
115
4418c732 116class CandidatEvaluation(models.Model):
b8b74dee 117 candidat = models.ForeignKey(emploi.Candidat, db_column='candidat',
3b4b948e 118 related_name='+',)
27c81d11 119 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
3f5f3898 120 related_name='+', verbose_name=u'Évaluateur')
596fe324 121 note = models.IntegerField(choices=NOTES, blank=True, null=True)
572c8d08 122 commentaire = models.TextField(null=True, blank=True, default='Aucun')
a25e1d5c 123 date = models.DateField(auto_now_add=True,)
b235ec9d 124
125 class Meta:
3f5f3898
OL
126 verbose_name = u'évaluation du candidat'
127 verbose_name_plural = u'évaluations des candidats'
ec517164 128
e34ba098
OL
129 def __unicode__(self):
130 return u"Évaluation de %s" % self.candidat
131
1df9fc7f 132#### TEMPLATE COURRIEL
d84c3a68 133TEMPLATE_CHOICES = (
134 ('SEL', 'Sélectionné'),
135 ('REF', 'Refusé'),
136)
137
138class CourrielTemplate(models.Model):
3f5f3898
OL
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',
32834000 142 help_text=HELP_TEXT_TAGS_ACCEPTES, )
3f5f3898 143 html = tinymce_models.HTMLField(verbose_name=u'Texte en HTML',
32834000 144 help_text=HELP_TEXT_TAGS_ACCEPTES, )
d84c3a68 145
7b93eed4 146
d84c3a68 147 def __unicode__(self):
0b1bbb53 148 return u'%s' % self.nom_modele
d84c3a68 149
150 class Meta:
0b1bbb53 151 ordering = ['nom_modele',]
7d0ae1ba
NBV
152 verbose_name = "Modèle de courriel"
153 verbose_name_plural = "Modèles de courriel"
d84c3a68 154
155class CandidatCourriel(models.Model):
3f5f3898 156 candidats = models.ManyToManyField(Candidat, verbose_name=u"Candidats", )
32834000 157 template = models.ForeignKey(CourrielTemplate, db_column='template',
3f5f3898 158 related_name='+', verbose_name=u"Modèle de courriel", )
32834000
NBV
159 sujet = models.CharField(max_length=255, blank=True,
160 help_text=HELP_TEXT_TAGS_ACCEPTES, )
3f5f3898 161 plain_text = models.TextField(verbose_name=u'Texte', blank=True,
32834000 162 help_text=HELP_TEXT_TAGS_ACCEPTES, )
3f5f3898 163 html = tinymce_models.HTMLField(verbose_name=u'Texte en HTML', null=True,
dc7faf2b 164 blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, )
ec517164 165
166 def __unicode__(self):
167 return '%s' % (self.titre)
2c3c54ee
NBV
168
169 class Meta:
3f5f3898
OL
170 verbose_name = u"modèle de courriel"
171 verbose_name_plural = u"modèles de courriel"