Commit | Line | Data |
---|---|---|
df59fcab | 1 | # -=- encoding: utf-8 -=- |
2 | ||
3 | import datetime | |
b235ec9d | 4 | from django.contrib.auth.models import User |
4418c732 | 5 | from django.core.files.storage import FileSystemStorage |
ec517164 | 6 | from tinymce import models as tinymce_models |
6f2d5d58 | 7 | from django.db import models |
4418c732 | 8 | import settings |
6f2d5d58 | 9 | |
df59fcab | 10 | import datamaster_modeles.models as ref |
d0a50c0a | 11 | from project.rh.models import Poste |
0d9e7dce | 12 | from recrutement.workflow import grp_evaluateurs_recrutement |
fc2279db OL |
13 | from auf.django.emploi import models as emploi |
14 | from auf.django.emploi.models import TYPE_PIECE_CHOICES | |
df59fcab | 15 | |
2c3c54ee NBV |
16 | from recrutement.workflow import grp_evaluateurs_recrutement |
17 | ||
596fe324 | 18 | ### CONSTANTES |
19 | #NOTES | |
20 | NOTE_MIN = 1 | |
21 | NOTE_RANGE = 1 | |
e34a2ae0 | 22 | NOTE_MAX = 11 |
596fe324 | 23 | NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)] |
b903198b NBV |
24 | |
25 | #HELP_TEXT | |
ee42ad96 | 26 | HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge" |
b903198b | 27 | HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ" |
32834000 NBV |
28 | HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \ |
29 | {{ nom_candidat }} {{ prenom_candidat }} \ | |
ec02ae0f NBV |
30 | {{ offre_emploi }} et {{ genre_candidat }} \ |
31 | (Pour Monsieur/Madame). Ces champs seront \ | |
32834000 NBV |
32 | automatiquement remplacés par les informations de \ |
33 | chaque candidat." | |
596fe324 | 34 | |
df59fcab | 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) | |
b903198b NBV |
42 | date_creation = models.DateField(auto_now_add=True, |
43 | help_text=HELP_TEXT_FORMAT_DATE, ) | |
df59fcab | 44 | |
45 | class Meta: | |
46 | abstract = True | |
47 | ||
fc2279db OL |
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 | ||
4e8e178f | 60 | class OffreEmploiManager(models.Manager): |
61 | def get_query_set(self): | |
61a4b478 | 62 | fkeys = ('region',) |
720c3ad5 NBV |
63 | return super(OffreEmploiManager, self).get_query_set().\ |
64 | select_related(*fkeys).all() | |
4e8e178f | 65 | |
47cf4908 | 66 | class ProxyPoste(Poste): |
4e8e178f | 67 | class Meta: |
68 | proxy = True | |
69 | ||
70 | def __unicode__(self): | |
71 | return '%s [%s]' % (self.nom, self.id) | |
df59fcab | 72 | |
f6724c20 NBV |
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) | |
4418c732 | 81 | |
f6724c20 NBV |
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 | ||
4418c732 | 91 | |
4e8340cf | 92 | class Evaluateur(models.Model): |
dc7faf2b | 93 | user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur") |
720c3ad5 | 94 | candidats = models.ManyToManyField(Candidat, through='CandidatEvaluation', |
720c3ad5 | 95 | related_name="evaluateurs") |
4e8340cf | 96 | |
2c3c54ee NBV |
97 | def save(self, *args, **kwargs): |
98 | """ | |
99 | Assigner automatiquement l'évaluateurs d'une offre d'emploi à un | |
0d9e7dce | 100 | nouveau candidat. |
2c3c54ee | 101 | """ |
0d9e7dce NBV |
102 | self.user.groups.add(grp_evaluateurs_recrutement) |
103 | super(Evaluateur, self).save(*args, **kwargs) | |
2c3c54ee | 104 | |
4e8340cf | 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 | ||
b89fef74 | 111 | class AdministrateurRegional(models.Model): |
27c81d11 | 112 | user = models.ForeignKey(User, unique=True, |
dc7faf2b | 113 | verbose_name="Administrateur régionnal") |
3b4bfad3 | 114 | regions = models.ManyToManyField(ref.Region, |
115 | verbose_name="Régions", ) | |
eb579d40 | 116 | |
b235ec9d | 117 | class Meta: |
27c81d11 | 118 | verbose_name = "administrateur régional" |
4e8340cf | 119 | verbose_name_plural = "administrateurs régionaux" |
b235ec9d | 120 | |
2adf9e0c | 121 | def __unicode__(self): |
122 | return '%s %s' % (self.user.first_name, self.user.last_name) | |
123 | ||
572c8d08 NBV |
124 | #class ProxyCandidatEvaluation(CandidatEvaluation): |
125 | # class Meta: | |
126 | # proxy = True | |
127 | ||
4418c732 | 128 | class CandidatEvaluation(models.Model): |
129 | candidat = models.ForeignKey(Candidat, db_column='candidat', | |
3b4b948e | 130 | related_name='+',) |
27c81d11 | 131 | evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', |
cced6a23 | 132 | related_name='+', verbose_name='Évaluateur') |
596fe324 | 133 | note = models.IntegerField(choices=NOTES, blank=True, null=True) |
572c8d08 | 134 | commentaire = models.TextField(null=True, blank=True, default='Aucun') |
b903198b NBV |
135 | date = models.DateField(auto_now_add=True, |
136 | help_text=HELP_TEXT_FORMAT_DATE, ) | |
b235ec9d | 137 | |
138 | class Meta: | |
cced6a23 | 139 | verbose_name = 'évaluation du candidat' |
140 | verbose_name_plural = 'évaluations des candidats' | |
ec517164 | 141 | |
1df9fc7f | 142 | #### TEMPLATE COURRIEL |
d84c3a68 | 143 | TEMPLATE_CHOICES = ( |
144 | ('SEL', 'Sélectionné'), | |
145 | ('REF', 'Refusé'), | |
146 | ) | |
147 | ||
148 | class CourrielTemplate(models.Model): | |
32834000 NBV |
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, ) | |
d84c3a68 | 155 | |
156 | def __unicode__(self): | |
0b1bbb53 | 157 | return u'%s' % self.nom_modele |
d84c3a68 | 158 | |
159 | class Meta: | |
0b1bbb53 | 160 | ordering = ['nom_modele',] |
d84c3a68 | 161 | |
162 | class CandidatCourriel(models.Model): | |
32834000 NBV |
163 | candidats = models.ManyToManyField(Candidat, verbose_name="Candidats", ) |
164 | template = models.ForeignKey(CourrielTemplate, db_column='template', | |
0b1bbb53 | 165 | related_name='+', verbose_name="Modèle de courriel", ) |
32834000 NBV |
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, ) | |
dc7faf2b NBV |
170 | html = tinymce_models.HTMLField(verbose_name='Texte en HTML', null=True, |
171 | blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, ) | |
ec517164 | 172 | |
173 | def __unicode__(self): | |
174 | return '%s' % (self.titre) | |
2c3c54ee NBV |
175 | |
176 | class Meta: | |
177 | verbose_name = "modèle de courriel" | |
178 | verbose_name_plural = "modèles de courriel" | |
ec517164 | 179 |