1 # -=- encoding: utf-8 -=-
4 from django
.core
.files
.storage
import FileSystemStorage
5 from tinymce
import models
as tinymce_models
6 from django
.db
import models
8 #from private_files import PrivateFileField
10 import datamaster_modeles
.models
as ref
11 from project
.rh
.models
import Poste
15 HELP_TEXT_NB_DEPENDANT
= "Le nombre de personnes à charge"
16 HELP_TEXT_FORMAT_DATE
= "Le format de la date est AAAA-MM-JJ"
17 HELP_TEXT_TAGS_ACCEPTES
= "Pour le texte, les variables disponibles sont : \
18 {{ nom_candidat }} {{ prenom_candidat }} \
19 {{ offre_emploi }}. Ces champs seront \
20 automatiquement remplacés par les informations de \
24 STATUT_OFFRE_EMPLOI_CHOICES
= (
26 ('AFFI', 'Offre d\'emploi en affichage'),
27 ('EVAL', 'En évaluation des candidatures'),
28 ('ENTR', 'En entrevue'),
39 ('F', 'Conjoint de fait'),
46 ('SEL', 'Sélectionné'),
52 TYPE_PIECE_CHOICES
= (
59 class Metadata(models
.Model
):
62 Metadata.actif = flag remplaçant la suppression.
63 actif == False : objet réputé supprimé.
65 actif
= models
.BooleanField(default
=True)
66 date_creation
= models
.DateField(auto_now_add
=True,
67 help_text
=HELP_TEXT_FORMAT_DATE
, )
72 class ProxyPoste(Poste
):
76 def __unicode__(self
):
77 return '%s [%s]' % (self
.nom
, self
.id)
79 class OffreEmploi(Metadata
):
80 est_affiche
= models
.BooleanField(default
=False,
81 verbose_name
="En affichage sur le site")
82 statut
= models
.CharField(max_length
=4, choices
=STATUT_OFFRE_EMPLOI_CHOICES
,
84 nom
= models
.CharField(max_length
=255)
85 resume
= models
.TextField(verbose_name
="Résumé")
86 description
= tinymce_models
.HTMLField()
87 poste
= models
.ForeignKey(ProxyPoste
, db_column
='poste')
88 date_limite
= models
.DateField(verbose_name
="Date limite",
89 help_text
=HELP_TEXT_FORMAT_DATE
,)
90 region
= models
.ForeignKey(ref
.Region
, db_column
='region',
91 verbose_name
="Région")
92 bureau
= models
.ForeignKey(ref
.Bureau
, db_column
='bureau', )
93 duree_affectation
= models
.CharField(max_length
=255,
94 verbose_name
="Durée de l'affectation")
95 renumeration
= models
.CharField(max_length
=255,
96 verbose_name
='Rénumération')
97 debut_affectation
= models
.DateField(verbose_name
="Début de l'affectation",
98 help_text
=HELP_TEXT_FORMAT_DATE
,)
99 lieu_affectation
= models
.ForeignKey(ref
.Implantation
,
100 db_column
='implantation',
101 verbose_name
="Lieu d'affectation")
104 db_table
= 'emploi_offreemploi'
105 verbose_name_plural
= "offres d'emploi"
107 def __unicode__(self
):
108 return '%s [%s]' % (self
.nom
, self
.id)
110 class Candidat(Metadata
):
111 statut
= models
.CharField(max_length
=4, choices
=STATUT_CHOICES
,
113 offre_emploi
= models
.ForeignKey('OffreEmploi', db_column
='offre_emploi',
115 prenom
= models
.CharField(max_length
=255, verbose_name
='Prénom', )
116 nom
= models
.CharField(max_length
=255)
117 genre
= models
.CharField(max_length
=1, choices
=GENRE_CHOICES
)
118 nationalite
= models
.ForeignKey(ref
.Pays
,
119 db_column
='nationalite', related_name
='+',
120 verbose_name
='Nationalité')
121 situation_famille
= models
.CharField(max_length
=1,
122 choices
=SITUATION_CHOICES
,
123 verbose_name
='Situation familiale', )
124 nombre_dependant
= models
.IntegerField(verbose_name
='Nombre de dépendant',
125 help_text
=HELP_TEXT_NB_DEPENDANT
, )
126 niveau_diplome
= models
.CharField(max_length
=255,
127 verbose_name
='Niveau du diplôme')
128 employeur_actuel
= models
.CharField(max_length
=255, )
129 poste_actuel
= models
.CharField(max_length
=255, )
130 domaine_professionnel
= models
.CharField(max_length
=255, )
131 telephone
= models
.CharField(max_length
=255, verbose_name
='Téléphone', )
132 email
= models
.EmailField(max_length
=255, verbose_name
= 'Courriel', )
135 adresse
= models
.CharField(max_length
=255)
136 ville
= models
.CharField(max_length
=255)
137 etat_province
= models
.CharField(max_length
=255,
138 verbose_name
="État/Province")
139 code_postal
= models
.CharField(max_length
=255, blank
=True)
140 pays
= models
.ForeignKey(ref
.Pays
, db_column
='pays',
143 def __unicode__(self
):
144 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
147 db_table
= 'emploi_candidat'
150 storage_prive
= FileSystemStorage(settings
.PRIVE_MEDIA_ROOT
,
151 base_url
=settings
.PRIVE_MEDIA_URL
)
153 def candidat_piece_dispatch(instance
, filename
):
154 path
= "offre_emploi/%s_%s/%s/%s_%s" % (instance
.candidat
.nom
,
155 instance
.candidat
.prenom
, instance
.nom
, instance
.candidat
.id,
159 class CandidatPiece(models
.Model
):
160 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
161 related_name
='candidat_piece')
162 nom
= models
.CharField(max_length
=3, choices
=TYPE_PIECE_CHOICES
)
163 #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
164 path
= models
.FileField(verbose_name
="Fichier",
165 upload_to
=candidat_piece_dispatch
,
166 storage
=storage_prive
, )
169 db_table
= 'emploi_evaluateur'
170 verbose_name
= "pièce jointe"
171 verbose_name_plural
= "pièces jointes"
173 def __unicode__(self
):
174 return '%s' % (self
.nom
)