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
14 HELP_TEXT_NB_DEPENDANT
= "Le nombre de personnes à charge"
15 HELP_TEXT_FORMAT_DATE
= "Le format de la date est AAAA-MM-JJ"
16 HELP_TEXT_TAGS_ACCEPTES
= "Pour le texte, les variables disponibles sont : \
17 {{ nom_candidat }} {{ prenom_candidat }} \
18 {{ offre_emploi }}. Ces champs seront \
19 automatiquement remplacés par les informations de \
23 STATUT_OFFRE_EMPLOI_CHOICES
= (
25 ('AFFI', 'Offre d\'emploi en affichage'),
26 ('EVAL', 'En évaluation des candidatures'),
27 ('ENTR', 'En entrevue'),
38 ('F', 'Conjoint de fait'),
45 ('SEL', 'Sélectionné'),
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,
66 help_text
=HELP_TEXT_FORMAT_DATE
, )
71 class OffreEmploi(Metadata
):
72 est_affiche
= models
.BooleanField(default
=False,
73 verbose_name
="En affichage sur le site")
74 statut
= models
.CharField(max_length
=4, choices
=STATUT_OFFRE_EMPLOI_CHOICES
,
76 nom
= models
.CharField(max_length
=255)
77 resume
= models
.TextField(verbose_name
="Résumé")
78 description
= models
.TextField()
79 #poste_id = models.IntegerField(verbose_name="Nombre de dépendant")
80 #poste_nom = models.CharField(max_length=255, verbose_name="Nom du poste")
81 #poste = models.ForeignKey('rh.Poste', db_column='poste')
82 date_limite
= models
.DateField(verbose_name
="Date limite",
83 help_text
=HELP_TEXT_FORMAT_DATE
,)
84 region
= models
.ForeignKey(ref
.Region
, db_column
='region',
85 verbose_name
="Région")
86 bureau
= models
.ForeignKey(ref
.Bureau
, db_column
='bureau', )
87 duree_affectation
= models
.CharField(max_length
=255,
88 verbose_name
="Durée de l'affectation")
89 renumeration
= models
.CharField(max_length
=255,
90 verbose_name
='Rénumération')
91 debut_affectation
= models
.DateField(verbose_name
="Début de l'affectation",
92 help_text
=HELP_TEXT_FORMAT_DATE
,)
93 lieu_affectation
= models
.ForeignKey(ref
.Implantation
,
94 db_column
='implantation',
95 verbose_name
="Lieu d'affectation")
98 db_table
= 'emploi_offreemploi'
99 verbose_name_plural
= "offres d'emploi"
101 def __unicode__(self
):
102 return '%s [%s]' % (self
.nom
, self
.id)
104 class Candidat(Metadata
):
105 statut
= models
.CharField(max_length
=4, choices
=STATUT_CHOICES
,
107 offre_emploi
= models
.ForeignKey('OffreEmploi', db_column
='offre_emploi',
109 prenom
= models
.CharField(max_length
=255, verbose_name
='Prénom', )
110 nom
= models
.CharField(max_length
=255)
111 genre
= models
.CharField(max_length
=1, choices
=GENRE_CHOICES
)
112 nationalite
= models
.ForeignKey(ref
.Pays
,
113 db_column
='nationalite', related_name
='+',
114 verbose_name
='Nationalité')
115 situation_famille
= models
.CharField(max_length
=1,
116 choices
=SITUATION_CHOICES
,
117 verbose_name
='Situation familiale', )
118 nombre_dependant
= models
.IntegerField(verbose_name
='Nombre de dépendant',
119 help_text
=HELP_TEXT_NB_DEPENDANT
, )
120 niveau_diplome
= models
.CharField(max_length
=255,
121 verbose_name
='Niveau du diplôme')
122 employeur_actuel
= models
.CharField(max_length
=255, )
123 poste_actuel
= models
.CharField(max_length
=255, )
124 domaine_professionnel
= models
.CharField(max_length
=255, )
125 telephone
= models
.CharField(max_length
=255, verbose_name
='Téléphone', )
126 email
= models
.EmailField(max_length
=255, verbose_name
= 'Courriel', )
129 adresse
= models
.CharField(max_length
=255)
130 ville
= models
.CharField(max_length
=255)
131 etat_province
= models
.CharField(max_length
=255,
132 verbose_name
="État/Province")
133 code_postal
= models
.CharField(max_length
=255, blank
=True)
134 pays
= models
.ForeignKey(ref
.Pays
, db_column
='pays',
137 def __unicode__(self
):
138 return '%s %s [%s]' % (self
.nom
, self
.prenom
, self
.id)
140 def pieces_jointes(self
):
141 return CandidatPiece
.objects
.filter(candidat
=self
)
142 pieces_jointes
.allow_tags
= True
145 db_table
= 'emploi_candidat'
148 storage_prive
= FileSystemStorage(settings
.PRIVE_MEDIA_ROOT
,
149 base_url
=settings
.PRIVE_MEDIA_URL
)
151 def candidat_piece_dispatch(instance
, filename
):
152 path
= u
'%s/%s/%s_%s_%s/%s/%s' % ('emplois', instance
.candidat
.offre_emploi
.id,
153 instance
.candidat
.nom
, instance
.candidat
.prenom
, instance
.candidat
.id,
154 instance
.nom
, filename
)
157 class CandidatPiece(models
.Model
):
158 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
159 related_name
='candidat_piece')
160 nom
= models
.CharField(max_length
=3, choices
=TYPE_PIECE_CHOICES
)
161 path
= models
.FileField(verbose_name
="Fichier",
162 upload_to
=candidat_piece_dispatch
, storage
=storage_prive
)
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
)