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