1561: Pièces jointes dans le formulaire du candidat.
[auf_rh_dae.git] / project / recrutement / models.py
1 # -=- encoding: utf-8 -=-
2
3 import datetime
4
5 from django.core.files.storage import FileSystemStorage
6 from django.db import models
7 import settings
8 #from private_files import PrivateFileField
9
10
11 import datamaster_modeles.models as ref
12 from project.rh import models as rh
13
14
15 # Abstracts
16 class Metadata(models.Model):
17 """Méta-données AUF.
18 Metadata.actif = flag remplaçant la suppression.
19 actif == False : objet réputé supprimé.
20 """
21 actif = models.BooleanField(default=True)
22 date_creation = models.DateField(auto_now_add=True)
23
24 class Meta:
25 abstract = True
26
27
28 class OffreEmploi(Metadata):
29 # TODO : Afficher les bureaux selon la région choisies?
30 nom = models.CharField(max_length=255)
31 resume = models.TextField()
32 description = models.TextField()
33 poste = models.ForeignKey(rh.Poste, db_column='poste')
34 date_limite = models.DateField(verbose_name="Date limite")
35 region = models.ForeignKey(ref.Region, db_column='region')
36 bureau = models.ForeignKey(ref.Bureau, db_column='bureau')
37
38 def __unicode__(self):
39 return '%s [%s]' % (self.nom, self.id)
40
41
42 ### CANDIDAT
43
44 GENRE_CHOICES = (
45 ('M', 'Homme'),
46 ('F', 'Femme'),
47 )
48 SITUATION_CHOICES = (
49 ('C', 'Célibataire'),
50 ('F', 'Fiancé'),
51 ('M', 'Marié'),
52 ('D', 'Divorcé'),
53 )
54 STATUT_CHOICES = (
55 ('NOUV', 'Nouveau'),
56 ('REF', 'Refusé'),
57 ('SEL', 'Sélectionné'),
58 ('ACC', 'Accepté'),
59 ('REC', 'Recevable'), # Trouver une lettre plus appropriée?
60 )
61
62 class Candidat(Metadata):
63 # TODO : Automatiser le statut à la création à Nouveau
64 statut = models.CharField(max_length=4,
65 choices=STATUT_CHOICES)
66 offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
67 related_name='+')
68 prenom = models.CharField(max_length=255)
69 nom = models.CharField(max_length=255)
70 genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
71 nationalite = models.ForeignKey(ref.Pays,
72 db_column='nationalite',
73 related_name='+')
74 date_naissance = models.DateField(verbose_name="Date de naissance")
75 situation_famille = models.CharField(max_length=1,
76 choices=SITUATION_CHOICES)
77 nombre_dependant = models.IntegerField(verbose_name="Nombre de dépendant")
78 niveau_diplome = models.CharField(max_length=255,
79 verbose_name="Niveau du diplôme")
80 employeur_actuel = models.CharField(max_length=255)
81 poste_actuel = models.CharField(max_length=255)
82 domaine_professionnel = models.CharField(max_length=255)
83
84 # Adresse
85 adresse = models.CharField(max_length=255)
86 ville = models.CharField(max_length=255)
87 etat_province = models.CharField(max_length=255,
88 verbose_name="État/Province")
89 pays = models.ForeignKey(ref.Pays, db_column='pays',
90 related_name='+')
91
92 def __unicode__(self):
93 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
94
95 ### PIECE CANDIDAT
96 # Upload de fichiers
97 storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
98 base_url=settings.PRIVE_MEDIA_URL)
99
100 def candidat_piece_dispatch(instance, filename):
101 path = "offre_emploi/%s_%s/%s/%s_%s" % (instance.candidat.nom,
102 instance.candidat.prenom, instance.nom, instance.candidat.id,
103 filename)
104 return path
105
106 class CandidatPiece(models.Model):
107 candidat = models.ForeignKey(Candidat, db_column='candidat',
108 related_name='+')
109 nom = models.CharField(max_length=255)
110 path = models.FileField(upload_to=candidat_piece_dispatch,
111 storage=storage_prive)
112
113 def __unicode__(self):
114 return '%s' % (self.nom)
115
116 class Evaluateur(models.Model):
117 candidats = models.ManyToManyField(Candidat)
118
119 class CandidatEvaluation(models.Model):
120 candidat = models.ForeignKey(Candidat, db_column='candidat',
121 related_name='+')
122 evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
123 related_name='+')
124 note = models.IntegerField()
125 commentaire = models.TextField()
126 date = models.DateField(auto_now_add=True)