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