merge qbe in rh : conflits réglés
[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"
b903198b 30HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ"
32834000
NBV
31HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
32 {{ nom_candidat }} {{ prenom_candidat }} \
ec02ae0f
NBV
33 {{ offre_emploi }} et {{ genre_candidat }} \
34 (Pour Monsieur/Madame). Ces champs seront \
32834000
NBV
35 automatiquement remplacés par les informations de \
36 chaque candidat."
596fe324 37
df59fcab 38# Abstracts
39class Metadata(models.Model):
40 """Méta-données AUF.
41 Metadata.actif = flag remplaçant la suppression.
42 actif == False : objet réputé supprimé.
43 """
44 actif = models.BooleanField(default=True)
b903198b
NBV
45 date_creation = models.DateField(auto_now_add=True,
46 help_text=HELP_TEXT_FORMAT_DATE, )
df59fcab 47
48 class Meta:
49 abstract = True
50
fc2279db
OL
51class Candidat(emploi.Candidat):
52 class Meta:
53 proxy = True
54
11f7b571
NBV
55 def moyenne_notes(self):
56 evaluations = CandidatEvaluation.objects.filter(candidat=self)
57 notes = [evaluation.note for evaluation in evaluations.all() \
58 if evaluation.note is not None]
59
7d0ae1ba 60 if len(notes) > 0:
11f7b571
NBV
61 moyenne_votes = float(sum(notes)) / len(notes)
62 else:
63 moyenne_votes = "Non disponible"
64 return moyenne_votes
65
fc2279db
OL
66class OffreEmploi(emploi.OffreEmploi):
67 class Meta:
68 proxy = True
69
e2968e84 70
fc2279db
OL
71class CandidatPiece(emploi.CandidatPiece):
72 class Meta:
73 proxy = True
74
4e8e178f 75class OffreEmploiManager(models.Manager):
76 def get_query_set(self):
61a4b478 77 fkeys = ('region',)
720c3ad5
NBV
78 return super(OffreEmploiManager, self).get_query_set().\
79 select_related(*fkeys).all()
4e8e178f 80
540dfae4 81class ProxyOffreEmploi(emploi.OffreEmploi):
f6724c20
NBV
82 class Meta:
83 proxy = True
3f5f3898
OL
84 verbose_name = u"Offre d'emploi (visualisation)"
85 verbose_name_plural = u"Offres d'emploi (visualisation)"
f6724c20
NBV
86
87 def __unicode__(self):
88 return '%s [%s] - View' % (self.nom, self.id)
4418c732 89
b8b74dee 90class ProxyCandidat(emploi.Candidat):
f6724c20
NBV
91 class Meta:
92 proxy = True
3f5f3898
OL
93 verbose_name = u"Candidat (visualisation)"
94 verbose_name_plural = u"Candidats (visualisation)"
f6724c20
NBV
95
96 def __unicode__(self):
97 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
98
4e8340cf 99class Evaluateur(models.Model):
3f5f3898 100 user = models.ForeignKey(User, unique=True, verbose_name=u"Évaluateur")
540dfae4
NBV
101 offres_emploi = models.ManyToManyField(emploi.OffreEmploi,
102 related_name="evaluateurs", blank=True)
4e8340cf 103
2c3c54ee
NBV
104 def save(self, *args, **kwargs):
105 """
106 Assigner automatiquement l'évaluateurs d'une offre d'emploi à un
0d9e7dce 107 nouveau candidat.
2c3c54ee 108 """
0d9e7dce
NBV
109 self.user.groups.add(grp_evaluateurs_recrutement)
110 super(Evaluateur, self).save(*args, **kwargs)
2c3c54ee 111
4e8340cf 112 class Meta:
3f5f3898 113 verbose_name = u"évaluateur"
4e8340cf 114
115 def __unicode__(self):
116 return '%s %s' % (self.user.first_name, self.user.last_name)
117
4418c732 118class CandidatEvaluation(models.Model):
b8b74dee 119 candidat = models.ForeignKey(emploi.Candidat, db_column='candidat',
3b4b948e 120 related_name='+',)
27c81d11 121 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
3f5f3898 122 related_name='+', verbose_name=u'Évaluateur')
596fe324 123 note = models.IntegerField(choices=NOTES, blank=True, null=True)
572c8d08 124 commentaire = models.TextField(null=True, blank=True, default='Aucun')
b903198b
NBV
125 date = models.DateField(auto_now_add=True,
126 help_text=HELP_TEXT_FORMAT_DATE, )
b235ec9d 127
128 class Meta:
3f5f3898
OL
129 verbose_name = u'évaluation du candidat'
130 verbose_name_plural = u'évaluations des candidats'
ec517164 131
e34ba098
OL
132 def __unicode__(self):
133 return u"Évaluation de %s" % self.candidat
134
1df9fc7f 135#### TEMPLATE COURRIEL
d84c3a68 136TEMPLATE_CHOICES = (
137 ('SEL', 'Sélectionné'),
138 ('REF', 'Refusé'),
139)
140
141class CourrielTemplate(models.Model):
3f5f3898
OL
142 nom_modele = models.CharField(max_length=100, verbose_name=u'Nom du modèle',)
143 sujet = models.CharField(max_length=100, verbose_name=u'Sujet du courriel')
144 plain_text = models.TextField(verbose_name=u'Texte',
32834000 145 help_text=HELP_TEXT_TAGS_ACCEPTES, )
3f5f3898 146 html = tinymce_models.HTMLField(verbose_name=u'Texte en HTML',
32834000 147 help_text=HELP_TEXT_TAGS_ACCEPTES, )
d84c3a68 148
7b93eed4 149
d84c3a68 150 def __unicode__(self):
0b1bbb53 151 return u'%s' % self.nom_modele
d84c3a68 152
153 class Meta:
0b1bbb53 154 ordering = ['nom_modele',]
7d0ae1ba
NBV
155 verbose_name = "Modèle de courriel"
156 verbose_name_plural = "Modèles de courriel"
d84c3a68 157
158class CandidatCourriel(models.Model):
3f5f3898 159 candidats = models.ManyToManyField(Candidat, verbose_name=u"Candidats", )
32834000 160 template = models.ForeignKey(CourrielTemplate, db_column='template',
3f5f3898 161 related_name='+', verbose_name=u"Modèle de courriel", )
32834000
NBV
162 sujet = models.CharField(max_length=255, blank=True,
163 help_text=HELP_TEXT_TAGS_ACCEPTES, )
3f5f3898 164 plain_text = models.TextField(verbose_name=u'Texte', blank=True,
32834000 165 help_text=HELP_TEXT_TAGS_ACCEPTES, )
3f5f3898 166 html = tinymce_models.HTMLField(verbose_name=u'Texte en HTML', null=True,
dc7faf2b 167 blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, )
ec517164 168
169 def __unicode__(self):
170 return '%s' % (self.titre)
2c3c54ee
NBV
171
172 class Meta:
3f5f3898
OL
173 verbose_name = u"modèle de courriel"
174 verbose_name_plural = u"modèles de courriel"