Routeur: Ajout temporaire des modules workflow et dae en écriture
[auf_rh_dae.git] / src / auf.django.emploi / auf / django / emploi / models.py
CommitLineData
8e0d552d 1# -*- encoding: utf-8 -*
0d9e7dce 2
0d9e7dce 3from django.core.files.storage import FileSystemStorage
0d9e7dce 4from django.db import models
0d9e7dce 5import datamaster_modeles.models as ref
ab72a5f9 6from fields import ContentTypeRestrictedFileField
7f25c8a6 7import settings
0d9e7dce
NBV
8
9### CONSTANTES ###
10# HELP_TEXT
11HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
0d9e7dce
NBV
12HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
13 {{ nom_candidat }} {{ prenom_candidat }} \
14 {{ offre_emploi }}. Ces champs seront \
15 automatiquement remplacés par les informations de \
16 chaque candidat."
c18058ac
NBV
17HELP_TEXT_EN_AFFICHAGE = "En cochant cette case, l'offre d'emploi sera affichée\
18 sur le site institutionnel dès qu'elle aura le statut \
19 'En diffusion' et ce, jusqu'à la date limite."
0d9e7dce
NBV
20
21STATUT_OFFRE_EMPLOI_CHOICES = (
22 ('NOUV', 'Nouveau'),
c18058ac 23 ('AFFI', 'En diffusion'),
0d9e7dce
NBV
24 ('EVAL', 'En évaluation des candidatures'),
25 ('ENTR', 'En entrevue'),
26 ('TERM', 'Terminé'),
27)
28
29# CANDIDAT
30GENRE_CHOICES = (
31 ('M', 'Homme'),
32 ('F', 'Femme'),
33)
cf3b67c0 34
0d9e7dce
NBV
35SITUATION_CHOICES = (
36 ('C', 'Célibataire'),
0d9e7dce 37 ('M', 'Marié'),
cf3b67c0
OL
38 ('F', 'Conjoint de fait'),
39 ('P', 'Pacsé'),
0d9e7dce 40)
cf3b67c0 41
0d9e7dce
NBV
42STATUT_CHOICES = (
43 ('NOUV', 'Nouveau'),
44 ('REC', 'Recevable'),
940c9dd8
OL
45 ('SEL', 'Sélectionné pour entrevue'),
46 ('REF', 'Non retenu'),
47 ('ACC', 'À recruter'),
0d9e7dce
NBV
48)
49
50# PIECE CANDIDAT
51TYPE_PIECE_CHOICES = (
52 ('CV','CV'),
53 ('LET','Lettre'),
54 ('AUT','Autre'),
55)
56
57# Abstracts
58class Metadata(models.Model):
59 """
60 Méta-données AUF.
61 Metadata.actif = flag remplaçant la suppression.
62 actif == False : objet réputé supprimé.
63 """
64 actif = models.BooleanField(default=True)
a25e1d5c 65 date_creation = models.DateField(auto_now_add=True, )
0d9e7dce
NBV
66
67 class Meta:
68 abstract = True
69
0d9e7dce
NBV
70class OffreEmploi(Metadata):
71 est_affiche = models.BooleanField(default=False,
c18058ac
NBV
72 verbose_name="À afficher sur le site institutionnel",
73 help_text=HELP_TEXT_EN_AFFICHAGE)
0d9e7dce
NBV
74 statut = models.CharField(max_length=4, choices=STATUT_OFFRE_EMPLOI_CHOICES,
75 default='NOUV')
a25e1d5c 76 date_limite = models.DateField(verbose_name="Date limite",)
0d9e7dce 77 nom = models.CharField(max_length=255)
c281435b 78 resume = models.TextField(verbose_name="Résumé", blank=True)
2c3c54ee 79 description = models.TextField()
e2968e84
NBV
80 poste = models.CharField(max_length=255)
81 poste_nom = models.CharField(max_length=255)
0d9e7dce
NBV
82 region = models.ForeignKey(ref.Region, db_column='region',
83 verbose_name="Région")
84 bureau = models.ForeignKey(ref.Bureau, db_column='bureau', )
85 duree_affectation = models.CharField(max_length=255,
86 verbose_name="Durée de l'affectation")
87 renumeration = models.CharField(max_length=255,
88 verbose_name='Rénumération')
a25e1d5c 89 debut_affectation = models.DateField(verbose_name="Début de l'affectation",)
0d9e7dce
NBV
90 lieu_affectation = models.ForeignKey(ref.Implantation,
91 db_column='implantation',
92 verbose_name="Lieu d'affectation")
93
94 class Meta:
95 db_table = 'emploi_offreemploi'
96 verbose_name_plural = "offres d'emploi"
97
98 def __unicode__(self):
99 return '%s [%s]' % (self.nom, self.id)
100
101class Candidat(Metadata):
102 statut = models.CharField(max_length=4, choices=STATUT_CHOICES,
103 default='NOUV')
104 offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
105 related_name='+')
106 prenom = models.CharField(max_length=255, verbose_name='Prénom', )
107 nom = models.CharField(max_length=255)
108 genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
109 nationalite = models.ForeignKey(ref.Pays,
110 db_column='nationalite', related_name='+',
111 verbose_name='Nationalité')
112 situation_famille = models.CharField(max_length=1,
113 choices=SITUATION_CHOICES,
114 verbose_name='Situation familiale', )
115 nombre_dependant = models.IntegerField(verbose_name='Nombre de dépendant',
116 help_text=HELP_TEXT_NB_DEPENDANT, )
117 niveau_diplome = models.CharField(max_length=255,
118 verbose_name='Niveau du diplôme')
119 employeur_actuel = models.CharField(max_length=255, )
120 poste_actuel = models.CharField(max_length=255, )
121 domaine_professionnel = models.CharField(max_length=255, )
122 telephone = models.CharField(max_length=255, verbose_name='Téléphone', )
123 email = models.EmailField(max_length=255, verbose_name = 'Courriel', )
124
125 # Adresse
126 adresse = models.CharField(max_length=255)
127 ville = models.CharField(max_length=255)
128 etat_province = models.CharField(max_length=255,
7cd4d744 129 verbose_name="État/Province", blank=True)
0d9e7dce
NBV
130 code_postal = models.CharField(max_length=255, blank=True)
131 pays = models.ForeignKey(ref.Pays, db_column='pays',
132 related_name='+')
133
1dd2d51f
NBV
134 class Meta:
135 db_table = 'emploi_candidat'
136
8e0d552d
NBV
137 def pieces_jointes(self):
138 return CandidatPiece.objects.filter(candidat=self)
139 pieces_jointes.allow_tags = True
140
1dd2d51f
NBV
141 def __unicode__(self):
142 return '%s %s [%s]' % (self.nom, self.prenom, self.id)
143
0d9e7dce
NBV
144
145# Upload de fichiers
7f25c8a6
OL
146storage_prive = FileSystemStorage(settings.OE_PRIVE_MEDIA_ROOT,
147 base_url=settings.OE_PRIVE_MEDIA_URL)
0d9e7dce
NBV
148
149def candidat_piece_dispatch(instance, filename):
7f25c8a6 150 path = u'%s/%s/%s' % ('emplois', instance.candidat.id, filename)
0d9e7dce
NBV
151 return path
152
153class CandidatPiece(models.Model):
154 candidat = models.ForeignKey(Candidat, db_column='candidat',
155 related_name='candidat_piece')
156 nom = models.CharField(max_length=3, choices=TYPE_PIECE_CHOICES)
ab72a5f9
OL
157 path = ContentTypeRestrictedFileField(verbose_name="Fichier",
158 upload_to=candidat_piece_dispatch,
159 storage=storage_prive,
160 content_types=['application/pdf', ],
161 max_upload_size=5242880,
162 )
0d9e7dce
NBV
163
164 class Meta:
8e0d552d 165 db_table = 'emploi_pieces'
0d9e7dce
NBV
166 verbose_name = "pièce jointe"
167 verbose_name_plural = "pièces jointes"
168
169 def __unicode__(self):
170 return '%s' % (self.nom)