df59fcab |
1 | # -=- encoding: utf-8 -=- |
2 | |
3 | import datetime |
4 | |
4418c732 |
5 | from django.core.files.storage import FileSystemStorage |
6f2d5d58 |
6 | from django.db import models |
4418c732 |
7 | import settings |
362a3534 |
8 | #from private_files import PrivateFileField |
6f2d5d58 |
9 | |
df59fcab |
10 | import datamaster_modeles.models as ref |
11 | from project.rh import models as rh |
12 | |
596fe324 |
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 | |
df59fcab |
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): |
4418c732 |
34 | # TODO : Afficher les bureaux selon la région choisies? |
df59fcab |
35 | nom = models.CharField(max_length=255) |
36 | resume = models.TextField() |
37 | description = models.TextField() |
38 | poste = models.ForeignKey(rh.Poste, db_column='poste') |
39 | date_limite = models.DateField(verbose_name="Date limite") |
40 | region = models.ForeignKey(ref.Region, db_column='region') |
41 | bureau = models.ForeignKey(ref.Bureau, db_column='bureau') |
4418c732 |
42 | |
43 | def __unicode__(self): |
44 | return '%s [%s]' % (self.nom, self.id) |
df59fcab |
45 | |
46 | |
47 | ### CANDIDAT |
48 | |
49 | GENRE_CHOICES = ( |
50 | ('M', 'Homme'), |
51 | ('F', 'Femme'), |
52 | ) |
53 | SITUATION_CHOICES = ( |
54 | ('C', 'Célibataire'), |
55 | ('F', 'Fiancé'), |
56 | ('M', 'Marié'), |
57 | ('D', 'Divorcé'), |
58 | ) |
59 | STATUT_CHOICES = ( |
60 | ('NOUV', 'Nouveau'), |
61 | ('REF', 'Refusé'), |
62 | ('SEL', 'Sélectionné'), |
63 | ('ACC', 'Accepté'), |
64 | ('REC', 'Recevable'), # Trouver une lettre plus appropriée? |
65 | ) |
66 | |
67 | class Candidat(Metadata): |
7f9e891e |
68 | # TODO : Automatiser le statut à la création à Nouveau |
69 | statut = models.CharField(max_length=4, |
70 | choices=STATUT_CHOICES) |
df59fcab |
71 | offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi', |
7f9e891e |
72 | related_name='+') |
df59fcab |
73 | prenom = models.CharField(max_length=255) |
74 | nom = models.CharField(max_length=255) |
75 | genre = models.CharField(max_length=1, choices=GENRE_CHOICES) |
76 | nationalite = models.ForeignKey(ref.Pays, |
4418c732 |
77 | db_column='nationalite', |
7f9e891e |
78 | related_name='+') |
df59fcab |
79 | date_naissance = models.DateField(verbose_name="Date de naissance") |
80 | situation_famille = models.CharField(max_length=1, |
4418c732 |
81 | choices=SITUATION_CHOICES) |
df59fcab |
82 | nombre_dependant = models.IntegerField(verbose_name="Nombre de dépendant") |
83 | niveau_diplome = models.CharField(max_length=255, |
4418c732 |
84 | verbose_name="Niveau du diplôme") |
df59fcab |
85 | employeur_actuel = models.CharField(max_length=255) |
86 | poste_actuel = models.CharField(max_length=255) |
87 | domaine_professionnel = models.CharField(max_length=255) |
88 | |
89 | # Adresse |
90 | adresse = models.CharField(max_length=255) |
91 | ville = models.CharField(max_length=255) |
92 | etat_province = models.CharField(max_length=255, |
4418c732 |
93 | verbose_name="État/Province") |
df59fcab |
94 | pays = models.ForeignKey(ref.Pays, db_column='pays', |
7f9e891e |
95 | related_name='+') |
4418c732 |
96 | |
97 | def __unicode__(self): |
98 | return '%s %s [%s]' % (self.prenom, self.nom, self.id) |
99 | |
100 | ### PIECE CANDIDAT |
101 | # Upload de fichiers |
102 | storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT, |
103 | base_url=settings.PRIVE_MEDIA_URL) |
104 | |
105 | def candidat_piece_dispatch(instance, filename): |
106 | path = "offre_emploi/%s_%s/%s/%s_%s" % (instance.candidat.nom, |
107 | instance.candidat.prenom, instance.nom, instance.candidat.id, |
108 | filename) |
109 | return path |
110 | |
111 | class CandidatPiece(models.Model): |
112 | candidat = models.ForeignKey(Candidat, db_column='candidat', |
113 | related_name='+') |
114 | nom = models.CharField(max_length=255) |
362a3534 |
115 | #path = PrivateFileField("file", upload_to=candidat_piece_dispatch) |
4418c732 |
116 | path = models.FileField(upload_to=candidat_piece_dispatch, |
117 | storage=storage_prive) |
118 | |
119 | def __unicode__(self): |
120 | return '%s' % (self.nom) |
121 | |
122 | class Evaluateur(models.Model): |
596fe324 |
123 | candidats = models.ManyToManyField(Candidat, verbose_name='Candidats', |
362a3534 |
124 | related_name="evaluateurs", blank=True, null=True,) |
eb579d40 |
125 | nom = models.CharField(max_length=255) |
126 | prenom = models.CharField(max_length=255) |
127 | |
128 | def __unicode__(self): |
129 | return '%s %s' % (self.prenom, self.nom) |
4418c732 |
130 | |
131 | class CandidatEvaluation(models.Model): |
132 | candidat = models.ForeignKey(Candidat, db_column='candidat', |
7f9e891e |
133 | related_name='+') |
4418c732 |
134 | evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', |
7f9e891e |
135 | related_name='+') |
596fe324 |
136 | note = models.IntegerField(choices=NOTES, blank=True, null=True) |
362a3534 |
137 | commentaire = models.TextField(null=True, blank=True) |
4418c732 |
138 | date = models.DateField(auto_now_add=True) |