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): |
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') |
4418c732 |
41 | |
42 | def __unicode__(self): |
43 | return '%s [%s]' % (self.nom, self.id) |
df59fcab |
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): |
7f9e891e |
67 | # TODO : Automatiser le statut à la création à Nouveau |
8ea41642 |
68 | statut = models.CharField(max_length=4, choices=STATUT_CHOICES, |
69 | default='NOUV') |
df59fcab |
70 | offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi', |
7f9e891e |
71 | related_name='+') |
df59fcab |
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, |
4418c732 |
76 | db_column='nationalite', |
7f9e891e |
77 | related_name='+') |
df59fcab |
78 | date_naissance = models.DateField(verbose_name="Date de naissance") |
79 | situation_famille = models.CharField(max_length=1, |
4418c732 |
80 | choices=SITUATION_CHOICES) |
df59fcab |
81 | nombre_dependant = models.IntegerField(verbose_name="Nombre de dépendant") |
82 | niveau_diplome = models.CharField(max_length=255, |
4418c732 |
83 | verbose_name="Niveau du diplôme") |
df59fcab |
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, |
4418c732 |
92 | verbose_name="État/Province") |
df59fcab |
93 | pays = models.ForeignKey(ref.Pays, db_column='pays', |
7f9e891e |
94 | related_name='+') |
4418c732 |
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', |
2b3edf33 |
112 | related_name='candidat_piece') |
4418c732 |
113 | nom = models.CharField(max_length=255) |
362a3534 |
114 | #path = PrivateFileField("file", upload_to=candidat_piece_dispatch) |
4418c732 |
115 | path = models.FileField(upload_to=candidat_piece_dispatch, |
2b3edf33 |
116 | storage=storage_prive, ) |
4418c732 |
117 | |
118 | def __unicode__(self): |
119 | return '%s' % (self.nom) |
120 | |
121 | class Evaluateur(models.Model): |
596fe324 |
122 | candidats = models.ManyToManyField(Candidat, verbose_name='Candidats', |
362a3534 |
123 | related_name="evaluateurs", blank=True, null=True,) |
eb579d40 |
124 | nom = models.CharField(max_length=255) |
125 | prenom = models.CharField(max_length=255) |
126 | |
127 | def __unicode__(self): |
128 | return '%s %s' % (self.prenom, self.nom) |
4418c732 |
129 | |
130 | class CandidatEvaluation(models.Model): |
131 | candidat = models.ForeignKey(Candidat, db_column='candidat', |
7f9e891e |
132 | related_name='+') |
4418c732 |
133 | evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', |
7f9e891e |
134 | related_name='+') |
596fe324 |
135 | note = models.IntegerField(choices=NOTES, blank=True, null=True) |
362a3534 |
136 | commentaire = models.TextField(null=True, blank=True) |
4418c732 |
137 | date = models.DateField(auto_now_add=True) |