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