1 # -=- encoding: utf-8 -=-
4 from django
.contrib
.auth
.models
import User
5 from django
.core
.files
.storage
import FileSystemStorage
6 from tinymce
import models
as tinymce_models
7 from django
.db
import models
9 #from private_files import PrivateFileField
11 import datamaster_modeles
.models
as ref
12 from project
.rh
.models
import Poste
19 NOTES
= [(i
, i
) for i
in range(NOTE_MIN
, NOTE_MAX
, NOTE_RANGE
)]
20 HELP_TEXT_NB_DEPENDANT
= "Le nombre de personnes à charge"
23 class Metadata(models
.Model
):
25 Metadata.actif = flag remplaçant la suppression.
26 actif == False : objet réputé supprimé.
28 actif
= models
.BooleanField(default
=True)
29 date_creation
= models
.DateField(auto_now_add
=True)
34 class OffreEmploiManager(models
.Manager
):
35 def get_query_set(self
):
37 return super(OffreEmploiManager
, self
).get_query_set().\
38 select_related(*fkeys
).all()
40 class ProxyPoste(Poste
):
44 def __unicode__(self
):
45 return '%s [%s]' % (self
.nom
, self
.id)
47 class OffreEmploi(Metadata
):
48 #objects = OffreEmploiManager()
49 nom
= models
.CharField(max_length
=255)
50 resume
= models
.TextField(verbose_name
="Résumé")
51 description
= tinymce_models
.HTMLField()
52 poste
= models
.ForeignKey(ProxyPoste
, db_column
='poste')
53 date_limite
= models
.DateField(verbose_name
="Date limite")
54 region
= models
.ForeignKey(ref
.Region
, db_column
='region',
55 verbose_name
="Région")
56 bureau
= models
.ForeignKey(ref
.Bureau
, db_column
='bureau', )
57 duree_affectation
= models
.CharField(max_length
=255,
58 verbose_name
="Durée de l'affectation")
59 renumeration
= models
.CharField(max_length
=255,
60 verbose_name
='Rénumération')
61 debut_affectation
= models
.DateField(verbose_name
="Début de l'affectation")
62 lieu_affectation
= models
.ForeignKey(ref
.Implantation
,
63 db_column
='implantation',
64 verbose_name
="Lieu d'affectation")
67 verbose_name_plural
= "offres d'emploi"
69 def __unicode__(self
):
70 return '%s [%s]' % (self
.nom
, self
.id)
72 class ProxyOffreEmploi(OffreEmploi
):
75 verbose_name
= "Offre d'emploi (visualisation)"
76 verbose_name_plural
= "Offres d'emploi (visualisation)"
78 def __unicode__(self
):
79 return '%s [%s] - View' % (self
.nom
, self
.id)
96 ('SEL', 'Sélectionné'),
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 date_naissance
= models
.DateField(verbose_name
='Date de naissance')
113 situation_famille
= models
.CharField(max_length
=1,
114 choices
=SITUATION_CHOICES
,
115 verbose_name
='Situation familiale')
116 nombre_dependant
= models
.IntegerField(verbose_name
='Nombre de dépendant',
117 help_text
=HELP_TEXT_NB_DEPENDANT
)
118 niveau_diplome
= models
.CharField(max_length
=255,
119 verbose_name
='Niveau du diplôme')
120 employeur_actuel
= models
.CharField(max_length
=255)
121 poste_actuel
= models
.CharField(max_length
=255)
122 domaine_professionnel
= models
.CharField(max_length
=255)
123 telephone
= models
.CharField(max_length
=255, verbose_name
='Téléphone', )
124 email
= models
.EmailField(max_length
=255, verbose_name
= 'Courriel', )
127 adresse
= models
.CharField(max_length
=255)
128 ville
= models
.CharField(max_length
=255)
129 etat_province
= models
.CharField(max_length
=255,
130 verbose_name
="État/Province")
131 code_postal
= models
.CharField(max_length
=255, blank
=True)
132 pays
= models
.ForeignKey(ref
.Pays
, db_column
='pays',
135 def __unicode__(self
):
136 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
138 class ProxyCandidat(Candidat
):
141 verbose_name
= "Candidat (visualisation)"
142 verbose_name_plural
= "Candidats (visualisation)"
144 def __unicode__(self
):
145 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
149 TYPE_PIECE_CHOICES
= (
155 storage_prive
= FileSystemStorage(settings
.PRIVE_MEDIA_ROOT
,
156 base_url
=settings
.PRIVE_MEDIA_URL
)
158 def candidat_piece_dispatch(instance
, filename
):
159 path
= "offre_emploi/%s_%s/%s/%s_%s" % (instance
.candidat
.nom
,
160 instance
.candidat
.prenom
, instance
.nom
, instance
.candidat
.id,
164 class CandidatPiece(models
.Model
):
165 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
166 related_name
='candidat_piece')
167 nom
= models
.CharField(max_length
=3, choices
=TYPE_PIECE_CHOICES
)
168 #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
169 path
= models
.FileField(verbose_name
="Fichier",
170 upload_to
=candidat_piece_dispatch
,
171 storage
=storage_prive
, )
174 verbose_name
= "pièce jointe"
175 verbose_name_plural
= "pièces jointes"
177 def __unicode__(self
):
178 return '%s' % (self
.nom
)
180 class Evaluateur(models
.Model
):
181 user
= models
.ForeignKey(User
, unique
=True, verbose_name
="permission")
182 candidats
= models
.ManyToManyField(Candidat
, through
='CandidatEvaluation',
183 #verbose_name='candidats', blank=True, null=True,
184 related_name
="evaluateurs")
187 verbose_name
= "évaluateur"
189 def __unicode__(self
):
190 return '%s %s' % (self
.user
.first_name
, self
.user
.last_name
)
192 class AdministrateurRegional(models
.Model
):
193 user
= models
.ForeignKey(User
, unique
=True,
194 verbose_name
="permission")
195 regions
= models
.ManyToManyField(ref
.Region
,
196 verbose_name
="Régions", )
199 verbose_name
= "administrateur régional"
200 verbose_name_plural
= "administrateurs régionaux"
202 def __unicode__(self
):
203 return '%s %s' % (self
.user
.first_name
, self
.user
.last_name
)
205 class CandidatEvaluation(models
.Model
):
206 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
208 evaluateur
= models
.ForeignKey(Evaluateur
, db_column
='evaluateur',
209 related_name
='+', verbose_name
='Évaluateur')
210 note
= models
.IntegerField(choices
=NOTES
, blank
=True, null
=True)
211 commentaire
= models
.TextField(null
=True, blank
=True)
212 date
= models
.DateField(auto_now_add
=True)
215 verbose_name
= 'évaluation du candidat'
216 verbose_name_plural
= 'évaluations des candidats'
218 #### TEMPLATE COURRIEL
220 ('SEL', 'Sélectionné'),
224 class CourrielTemplate(models
.Model
):
225 nom_modele
= models
.CharField(max_length
=100, verbose_name
='Nom modèle', )
226 sujet
= models
.CharField(max_length
=100, )
227 plain_text
= models
.TextField(verbose_name
='Texte', )
228 html
= tinymce_models
.HTMLField(verbose_name
='Texte HTML', )
230 def __unicode__(self
):
231 return u
'%s' % self
.nom_modele
234 ordering
= ['nom_modele',]
236 class CandidatCourriel(models
.Model
):
237 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
239 template
= models
.ForeignKey(CourrielTemplate
, db_column
='nom',
240 related_name
='+', verbose_name
="Modèle de courriel", )
241 titre
= models
.CharField(max_length
=255, )
242 texte
= models
.TextField(null
=True, blank
=True, )
244 def __unicode__(self
):
245 return '%s' % (self
.titre
)