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