Commit | Line | Data |
---|---|---|
df59fcab | 1 | # -=- encoding: utf-8 -=- |
2 | ||
3 | import datetime | |
b235ec9d | 4 | from django.contrib.auth.models import User |
4418c732 | 5 | from django.core.files.storage import FileSystemStorage |
ec517164 | 6 | from tinymce import models as tinymce_models |
6f2d5d58 | 7 | from django.db import models |
4418c732 | 8 | import settings |
6f2d5d58 | 9 | |
7b93eed4 NBV |
10 | from south.modelsinspector import add_introspection_rules |
11 | add_introspection_rules([], ["^tinymce.models.HTMLField"]) | |
df59fcab | 12 | import datamaster_modeles.models as ref |
d333c690 NBV |
13 | |
14 | from project.rh import models as rh | |
0d9e7dce | 15 | from recrutement.workflow import grp_evaluateurs_recrutement |
fc2279db OL |
16 | from auf.django.emploi import models as emploi |
17 | from auf.django.emploi.models import TYPE_PIECE_CHOICES | |
df59fcab | 18 | |
2c3c54ee NBV |
19 | from recrutement.workflow import grp_evaluateurs_recrutement |
20 | ||
596fe324 | 21 | ### CONSTANTES |
22 | #NOTES | |
23 | NOTE_MIN = 1 | |
24 | NOTE_RANGE = 1 | |
e34a2ae0 | 25 | NOTE_MAX = 11 |
596fe324 | 26 | NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)] |
b903198b NBV |
27 | |
28 | #HELP_TEXT | |
ee42ad96 | 29 | HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge" |
32834000 NBV |
30 | HELP_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 |
38 | class 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 |
49 | class 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 |
64 | class OffreEmploi(emploi.OffreEmploi): |
65 | class Meta: | |
66 | proxy = True | |
67 | ||
e2968e84 | 68 | |
fc2279db OL |
69 | class CandidatPiece(emploi.CandidatPiece): |
70 | class Meta: | |
71 | proxy = True | |
72 | ||
4e8e178f | 73 | class 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 | 79 | class 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 | 88 | class 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 | 97 | class 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 | 116 | class 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 | 133 | TEMPLATE_CHOICES = ( |
134 | ('SEL', 'Sélectionné'), | |
135 | ('REF', 'Refusé'), | |
136 | ) | |
137 | ||
138 | class 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 | |
155 | class 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" |