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