1941: permissions régionales (Partie 1)
[auf_rh_dae.git] / project / recrutement / models.py
1 # -=- encoding: utf-8 -=-
2
3 import datetime
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
8 import settings
9
10 from south.modelsinspector import add_introspection_rules
11 add_introspection_rules([], ["^tinymce.models.HTMLField"])
12 import datamaster_modeles.models as ref
13
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
18
19 from recrutement.workflow import grp_evaluateurs_recrutement
20
21 ### CONSTANTES
22 #NOTES
23 NOTE_MIN = 1
24 NOTE_RANGE = 1
25 NOTE_MAX = 11
26 NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
27
28 #HELP_TEXT
29 HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
30 HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ"
31 HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
32 {{ nom_candidat }} {{ prenom_candidat }} \
33 {{ offre_emploi }} et {{ genre_candidat }} \
34 (Pour Monsieur/Madame). Ces champs seront \
35 automatiquement remplacés par les informations de \
36 chaque candidat."
37
38 # Abstracts
39 class 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)
45 date_creation = models.DateField(auto_now_add=True,
46 help_text=HELP_TEXT_FORMAT_DATE, )
47
48 class Meta:
49 abstract = True
50
51 class Candidat(emploi.Candidat):
52 class Meta:
53 proxy = True
54
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
60 if len(notes) > 0:
61 moyenne_votes = float(sum(notes)) / len(notes)
62 else:
63 moyenne_votes = "Non disponible"
64 return moyenne_votes
65
66 class OffreEmploi(emploi.OffreEmploi):
67 class Meta:
68 proxy = True
69
70
71 class CandidatPiece(emploi.CandidatPiece):
72 class Meta:
73 proxy = True
74
75 class OffreEmploiManager(models.Manager):
76 def get_query_set(self):
77 fkeys = ('region',)
78 return super(OffreEmploiManager, self).get_query_set().\
79 select_related(*fkeys).all()
80
81 class ProxyOffreEmploi(emploi.OffreEmploi):
82 class Meta:
83 proxy = True
84 verbose_name = "Offre d'emploi (visualisation)"
85 verbose_name_plural = "Offres d'emploi (visualisation)"
86
87 def __unicode__(self):
88 return '%s [%s] - View' % (self.nom, self.id)
89
90 class ProxyCandidat(emploi.Candidat):
91 class Meta:
92 proxy = True
93 verbose_name = "Candidat (visualisation)"
94 verbose_name_plural = "Candidats (visualisation)"
95
96 def __unicode__(self):
97 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
98
99 class Evaluateur(models.Model):
100 user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur")
101 offres_emploi = models.ManyToManyField(emploi.OffreEmploi,
102 related_name="evaluateurs", blank=True)
103
104 def save(self, *args, **kwargs):
105 """
106 Assigner automatiquement l'évaluateurs d'une offre d'emploi à un
107 nouveau candidat.
108 """
109 self.user.groups.add(grp_evaluateurs_recrutement)
110 super(Evaluateur, self).save(*args, **kwargs)
111
112 class Meta:
113 verbose_name = "évaluateur"
114
115 def __unicode__(self):
116 return '%s %s' % (self.user.first_name, self.user.last_name)
117
118 class AdministrateurRegional(models.Model):
119 user = models.ForeignKey(User, unique=True,
120 verbose_name="Administrateur régionnal")
121 regions = models.ManyToManyField(ref.Region,
122 verbose_name="Régions", )
123
124 class Meta:
125 verbose_name = "administrateur régional"
126 verbose_name_plural = "administrateurs régionaux"
127
128 def __unicode__(self):
129 return '%s %s' % (self.user.first_name, self.user.last_name)
130
131 class CandidatEvaluation(models.Model):
132 candidat = models.ForeignKey(emploi.Candidat, db_column='candidat',
133 related_name='+',)
134 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
135 related_name='+', verbose_name='Évaluateur')
136 note = models.IntegerField(choices=NOTES, blank=True, null=True)
137 commentaire = models.TextField(null=True, blank=True, default='Aucun')
138 date = models.DateField(auto_now_add=True,
139 help_text=HELP_TEXT_FORMAT_DATE, )
140
141 class Meta:
142 verbose_name = 'évaluation du candidat'
143 verbose_name_plural = 'évaluations des candidats'
144
145 #### TEMPLATE COURRIEL
146 TEMPLATE_CHOICES = (
147 ('SEL', 'Sélectionné'),
148 ('REF', 'Refusé'),
149 )
150
151 class CourrielTemplate(models.Model):
152 nom_modele = models.CharField(max_length=100, verbose_name='Nom du modèle',)
153 sujet = models.CharField(max_length=100, verbose_name='Sujet du courriel')
154 plain_text = models.TextField(verbose_name='Texte',
155 help_text=HELP_TEXT_TAGS_ACCEPTES, )
156 html = tinymce_models.HTMLField(verbose_name='Texte en HTML',
157 help_text=HELP_TEXT_TAGS_ACCEPTES, )
158
159
160 def __unicode__(self):
161 return u'%s' % self.nom_modele
162
163 class Meta:
164 ordering = ['nom_modele',]
165 verbose_name = "Modèle de courriel"
166 verbose_name_plural = "Modèles de courriel"
167
168 class CandidatCourriel(models.Model):
169 candidats = models.ManyToManyField(Candidat, verbose_name="Candidats", )
170 template = models.ForeignKey(CourrielTemplate, db_column='template',
171 related_name='+', verbose_name="Modèle de courriel", )
172 sujet = models.CharField(max_length=255, blank=True,
173 help_text=HELP_TEXT_TAGS_ACCEPTES, )
174 plain_text = models.TextField(verbose_name='Texte', blank=True,
175 help_text=HELP_TEXT_TAGS_ACCEPTES, )
176 html = tinymce_models.HTMLField(verbose_name='Texte en HTML', null=True,
177 blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, )
178
179 def __unicode__(self):
180 return '%s' % (self.titre)
181
182 class Meta:
183 verbose_name = "modèle de courriel"
184 verbose_name_plural = "modèles de courriel"