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