1 # -*- encoding: utf-8 -*
3 from django
.core
.files
.storage
import FileSystemStorage
4 from django
.db
import models
5 import datamaster_modeles
.models
as ref
6 from fields
import ContentTypeRestrictedFileField
11 HELP_TEXT_NB_DEPENDANT
= "Le nombre de personnes à charge"
12 HELP_TEXT_TAGS_ACCEPTES
= "Pour le texte, les variables disponibles sont : \
13 {{ nom_candidat }} {{ prenom_candidat }} \
14 {{ offre_emploi }}. Ces champs seront \
15 automatiquement remplacés par les informations de \
17 HELP_TEXT_EN_AFFICHAGE
= "En cochant cette case, l'offre d'emploi sera affichée\
18 sur le site institutionnel dès qu'elle aura le statut \
19 'En diffusion' et ce, jusqu'à la date limite."
21 STATUT_OFFRE_EMPLOI_CHOICES
= (
23 ('AFFI', 'En diffusion'),
24 ('EVAL', 'En évaluation des candidatures'),
25 ('ENTR', 'En entrevue'),
38 ('F', 'Conjoint de fait'),
45 ('SEL', 'Sélectionné pour entrevue'),
46 ('REF', 'Non retenu'),
47 ('ACC', 'À recruter'),
51 TYPE_PIECE_CHOICES
= (
58 class Metadata(models
.Model
):
61 Metadata.actif = flag remplaçant la suppression.
62 actif == False : objet réputé supprimé.
64 actif
= models
.BooleanField(default
=True)
65 date_creation
= models
.DateField(auto_now_add
=True, )
70 class OffreEmploi(Metadata
):
71 est_affiche
= models
.BooleanField(default
=False,
72 verbose_name
="À afficher sur le site institutionnel",
73 help_text
=HELP_TEXT_EN_AFFICHAGE
)
74 statut
= models
.CharField(max_length
=4, choices
=STATUT_OFFRE_EMPLOI_CHOICES
,
76 date_limite
= models
.DateField(verbose_name
="Date limite",)
77 nom
= models
.CharField(max_length
=255)
78 resume
= models
.TextField(verbose_name
="Résumé", blank
=True)
79 description
= models
.TextField()
80 poste
= models
.CharField(max_length
=255)
81 poste_nom
= models
.CharField(max_length
=255)
82 region
= models
.ForeignKey(ref
.Region
, db_column
='region',
83 verbose_name
="Région")
84 bureau
= models
.ForeignKey(ref
.Bureau
, db_column
='bureau', )
85 duree_affectation
= models
.CharField(max_length
=255,
86 verbose_name
="Durée de l'affectation")
87 renumeration
= models
.CharField(max_length
=255,
88 verbose_name
='Rénumération')
89 debut_affectation
= models
.DateField(verbose_name
="Début de l'affectation",)
90 lieu_affectation
= models
.ForeignKey(ref
.Implantation
,
91 db_column
='implantation',
92 verbose_name
="Lieu d'affectation")
95 db_table
= 'emploi_offreemploi'
96 verbose_name_plural
= "offres d'emploi"
98 def __unicode__(self
):
99 return '%s [%s]' % (self
.nom
, self
.id)
101 class Candidat(Metadata
):
102 statut
= models
.CharField(max_length
=4, choices
=STATUT_CHOICES
,
104 offre_emploi
= models
.ForeignKey('OffreEmploi', db_column
='offre_emploi',
106 prenom
= models
.CharField(max_length
=255, verbose_name
='Prénom', )
107 nom
= models
.CharField(max_length
=255)
108 genre
= models
.CharField(max_length
=1, choices
=GENRE_CHOICES
)
109 nationalite
= models
.ForeignKey(ref
.Pays
,
110 db_column
='nationalite', related_name
='+',
111 verbose_name
='Nationalité')
112 situation_famille
= models
.CharField(max_length
=1,
113 choices
=SITUATION_CHOICES
,
114 verbose_name
='Situation familiale', )
115 nombre_dependant
= models
.IntegerField(verbose_name
='Nombre de dépendant',
116 help_text
=HELP_TEXT_NB_DEPENDANT
, )
117 niveau_diplome
= models
.CharField(max_length
=255,
118 verbose_name
='Niveau du diplôme')
119 employeur_actuel
= models
.CharField(max_length
=255, )
120 poste_actuel
= models
.CharField(max_length
=255, )
121 domaine_professionnel
= models
.CharField(max_length
=255, )
122 telephone
= models
.CharField(max_length
=255, verbose_name
='Téléphone', )
123 email
= models
.EmailField(max_length
=255, verbose_name
= 'Courriel', )
126 adresse
= models
.CharField(max_length
=255)
127 ville
= models
.CharField(max_length
=255)
128 etat_province
= models
.CharField(max_length
=255,
129 verbose_name
="État/Province", blank
=True)
130 code_postal
= models
.CharField(max_length
=255, blank
=True)
131 pays
= models
.ForeignKey(ref
.Pays
, db_column
='pays',
135 db_table
= 'emploi_candidat'
137 def pieces_jointes(self
):
138 return CandidatPiece
.objects
.filter(candidat
=self
)
139 pieces_jointes
.allow_tags
= True
141 def __unicode__(self
):
142 return '%s %s [%s]' % (self
.nom
, self
.prenom
, self
.id)
146 storage_prive
= FileSystemStorage(settings
.OE_PRIVE_MEDIA_ROOT
,
147 base_url
=settings
.OE_PRIVE_MEDIA_URL
)
149 def candidat_piece_dispatch(instance
, filename
):
150 path
= u
'%s/%s/%s' % ('emplois', instance
.candidat
.id, filename
)
153 class CandidatPiece(models
.Model
):
154 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
155 related_name
='candidat_piece')
156 nom
= models
.CharField(max_length
=3, choices
=TYPE_PIECE_CHOICES
)
157 path
= ContentTypeRestrictedFileField(verbose_name
="Fichier",
158 upload_to
=candidat_piece_dispatch
,
159 storage
=storage_prive
,
160 content_types
=['application/pdf', ],
161 max_upload_size
=5242880,
165 db_table
= 'emploi_pieces'
166 verbose_name
= "pièce jointe"
167 verbose_name_plural
= "pièces jointes"
169 def __unicode__(self
):
170 return '%s' % (self
.nom
)