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