no app project dependance
[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 13from recrutement.workflow import grp_evaluateurs_recrutement
fc2279db
OL
14from auf.django.emploi import models as emploi
15from auf.django.emploi.models import TYPE_PIECE_CHOICES
df59fcab 16
596fe324 17### CONSTANTES
18#NOTES
19NOTE_MIN = 1
20NOTE_RANGE = 1
e34a2ae0 21NOTE_MAX = 11
596fe324 22NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
b903198b
NBV
23
24#HELP_TEXT
ee42ad96 25HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
b903198b 26HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ"
32834000
NBV
27HELP_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."
596fe324 32
df59fcab 33# Abstracts
34class 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)
b903198b
NBV
40 date_creation = models.DateField(auto_now_add=True,
41 help_text=HELP_TEXT_FORMAT_DATE, )
df59fcab 42
43 class Meta:
44 abstract = True
45
fc2279db
OL
46class Candidat(emploi.Candidat):
47 class Meta:
48 proxy = True
49
50class OffreEmploi(emploi.OffreEmploi):
51 class Meta:
52 proxy = True
53
54class CandidatPiece(emploi.CandidatPiece):
55 class Meta:
56 proxy = True
57
4e8e178f 58class OffreEmploiManager(models.Manager):
59 def get_query_set(self):
61a4b478 60 fkeys = ('region',)
720c3ad5
NBV
61 return super(OffreEmploiManager, self).get_query_set().\
62 select_related(*fkeys).all()
4e8e178f 63
47cf4908 64class ProxyPoste(Poste):
4e8e178f 65 class Meta:
66 proxy = True
67
68 def __unicode__(self):
69 return '%s [%s]' % (self.nom, self.id)
df59fcab 70
f6724c20
NBV
71class 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)
4418c732 79
f6724c20
NBV
80class 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
4418c732 89
4e8340cf 90class Evaluateur(models.Model):
dc7faf2b 91 user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur")
720c3ad5 92 candidats = models.ManyToManyField(Candidat, through='CandidatEvaluation',
720c3ad5 93 related_name="evaluateurs")
4e8340cf 94
0d9e7dce
NBV
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 """
4e8340cf 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
b89fef74 109class AdministrateurRegional(models.Model):
27c81d11 110 user = models.ForeignKey(User, unique=True,
dc7faf2b 111 verbose_name="Administrateur régionnal")
3b4bfad3 112 regions = models.ManyToManyField(ref.Region,
113 verbose_name="Régions", )
eb579d40 114
b235ec9d 115 class Meta:
27c81d11 116 verbose_name = "administrateur régional"
4e8340cf 117 verbose_name_plural = "administrateurs régionaux"
b235ec9d 118
2adf9e0c 119 def __unicode__(self):
120 return '%s %s' % (self.user.first_name, self.user.last_name)
121
4418c732 122class CandidatEvaluation(models.Model):
123 candidat = models.ForeignKey(Candidat, db_column='candidat',
3b4b948e 124 related_name='+',)
27c81d11 125 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
cced6a23 126 related_name='+', verbose_name='Évaluateur')
596fe324 127 note = models.IntegerField(choices=NOTES, blank=True, null=True)
362a3534 128 commentaire = models.TextField(null=True, blank=True)
b903198b
NBV
129 date = models.DateField(auto_now_add=True,
130 help_text=HELP_TEXT_FORMAT_DATE, )
b235ec9d 131
132 class Meta:
cced6a23 133 verbose_name = 'évaluation du candidat'
134 verbose_name_plural = 'évaluations des candidats'
ec517164 135
1df9fc7f 136#### TEMPLATE COURRIEL
d84c3a68 137TEMPLATE_CHOICES = (
138 ('SEL', 'Sélectionné'),
139 ('REF', 'Refusé'),
140)
141
142class CourrielTemplate(models.Model):
32834000
NBV
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, )
d84c3a68 149
150 def __unicode__(self):
0b1bbb53 151 return u'%s' % self.nom_modele
d84c3a68 152
153 class Meta:
0b1bbb53 154 ordering = ['nom_modele',]
d84c3a68 155
156class CandidatCourriel(models.Model):
32834000
NBV
157 candidats = models.ManyToManyField(Candidat, verbose_name="Candidats", )
158 template = models.ForeignKey(CourrielTemplate, db_column='template',
0b1bbb53 159 related_name='+', verbose_name="Modèle de courriel", )
32834000
NBV
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, )
dc7faf2b
NBV
164 html = tinymce_models.HTMLField(verbose_name='Texte en HTML', null=True,
165 blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, )
ec517164 166
167 def __unicode__(self):
168 return '%s' % (self.titre)
ec517164 169