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