1592: Modeles- Remplacer Evaluateur par User
[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 import datamaster_modeles.models as ref
11 from project.rh import models as rh
12
13 ### CONSTANTES
14 #NOTES
15 NOTE_MIN = 1
16 NOTE_RANGE = 1
17 NOTE_MAX = 10
18 NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
19
20 # Abstracts
21 class Metadata(models.Model):
22 """Méta-données AUF.
23 Metadata.actif = flag remplaçant la suppression.
24 actif == False : objet réputé supprimé.
25 """
26 actif = models.BooleanField(default=True)
27 date_creation = models.DateField(auto_now_add=True)
28
29 class Meta:
30 abstract = True
31
32
33 class OffreEmploi(Metadata):
34 nom = models.CharField(max_length=255)
35 resume = models.TextField()
36 description = models.TextField()
37 poste = models.ForeignKey(rh.Poste, db_column='poste')
38 date_limite = models.DateField(verbose_name="Date limite")
39 region = models.ForeignKey(ref.Region, db_column='region')
40 bureau = models.ForeignKey(ref.Bureau, db_column='bureau')
41
42 def __unicode__(self):
43 return '%s [%s]' % (self.nom, self.id)
44
45
46 ### CANDIDAT
47
48 GENRE_CHOICES = (
49 ('M', 'Homme'),
50 ('F', 'Femme'),
51 )
52 SITUATION_CHOICES = (
53 ('C', 'Célibataire'),
54 ('F', 'Fiancé'),
55 ('M', 'Marié'),
56 ('D', 'Divorcé'),
57 )
58 STATUT_CHOICES = (
59 ('NOUV', 'Nouveau'),
60 ('REF', 'Refusé'),
61 ('SEL', 'Sélectionné'),
62 ('ACC', 'Accepté'),
63 ('REC', 'Recevable'), # Trouver une lettre plus appropriée?
64 )
65
66 class Candidat(Metadata):
67 # TODO : Automatiser le statut à la création à Nouveau
68 statut = models.CharField(max_length=4, choices=STATUT_CHOICES,
69 default='NOUV')
70 offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
71 related_name='+')
72 prenom = models.CharField(max_length=255)
73 nom = models.CharField(max_length=255)
74 genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
75 nationalite = models.ForeignKey(ref.Pays,
76 db_column='nationalite',
77 related_name='+')
78 date_naissance = models.DateField(verbose_name="Date de naissance")
79 situation_famille = models.CharField(max_length=1,
80 choices=SITUATION_CHOICES)
81 nombre_dependant = models.IntegerField(verbose_name="Nombre de dépendant")
82 niveau_diplome = models.CharField(max_length=255,
83 verbose_name="Niveau du diplôme")
84 employeur_actuel = models.CharField(max_length=255)
85 poste_actuel = models.CharField(max_length=255)
86 domaine_professionnel = models.CharField(max_length=255)
87
88 # Adresse
89 adresse = models.CharField(max_length=255)
90 ville = models.CharField(max_length=255)
91 etat_province = models.CharField(max_length=255,
92 verbose_name="État/Province")
93 pays = models.ForeignKey(ref.Pays, db_column='pays',
94 related_name='+')
95
96 def __unicode__(self):
97 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
98
99 ### PIECE CANDIDAT
100 # Upload de fichiers
101 storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
102 base_url=settings.PRIVE_MEDIA_URL)
103
104 def candidat_piece_dispatch(instance, filename):
105 path = "offre_emploi/%s_%s/%s/%s_%s" % (instance.candidat.nom,
106 instance.candidat.prenom, instance.nom, instance.candidat.id,
107 filename)
108 return path
109
110 class CandidatPiece(models.Model):
111 candidat = models.ForeignKey(Candidat, db_column='candidat',
112 related_name='candidat_piece')
113 nom = models.CharField(max_length=255)
114 #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
115 path = models.FileField(upload_to=candidat_piece_dispatch,
116 storage=storage_prive, )
117
118 def __unicode__(self):
119 return '%s' % (self.nom)
120
121 class User(models.Model):
122 user = models.ForeignKey("auth.User", unique=True)
123 candidats = models.ManyToManyField(Candidat, verbose_name='Candidats', blank=True, null=True,)
124 region = models.ForeignKey(ref.Region, db_column='region')
125
126 #User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
127 # def __unicode__(self):
128 # return '%s %s' % (self.prenom, self.nom)
129
130 class CandidatEvaluation(models.Model):
131 candidat = models.ForeignKey(Candidat, db_column='candidat',
132 related_name='+')
133 evaluateur = models.ForeignKey(User, db_column='evaluateur',
134 related_name='+')
135 note = models.IntegerField(choices=NOTES, blank=True, null=True)
136 commentaire = models.TextField(null=True, blank=True)
137 date = models.DateField(auto_now_add=True)