1 # -=- encoding: utf-8 -=-
4 from django
.contrib
.auth
.models
import User
5 from django
.core
.files
.storage
import FileSystemStorage
6 from django
.db
import models
8 #from private_files import PrivateFileField
10 import datamaster_modeles
.models
as ref
11 from project
.rh
import models
as rh
18 NOTES
= [(i
, i
) for i
in range(NOTE_MIN
, NOTE_MAX
, NOTE_RANGE
)]
21 class Metadata(models
.Model
):
23 Metadata.actif = flag remplaçant la suppression.
24 actif == False : objet réputé supprimé.
26 actif
= models
.BooleanField(default
=True)
27 date_creation
= models
.DateField(auto_now_add
=True)
32 class OffreEmploiManager(models
.Manager
):
33 def get_query_set(self
):
34 fkeys
= ('poste', 'region',)
35 return super(OffreEmploiManager
, self
).get_query_set().select_related(*fkeys
).all()
37 class ProxyPoste(rh
.Poste
):
41 def __unicode__(self
):
42 return '%s [%s]' % (self
.nom
, self
.id)
44 class OffreEmploi(Metadata
):
45 objects
= OffreEmploiManager()
46 nom
= models
.CharField(max_length
=255)
47 resume
= models
.TextField(verbose_name
="Résumé")
48 description
= models
.TextField()
49 poste
= models
.ForeignKey(ProxyPoste
, )#db_column='poste')
50 date_limite
= models
.DateField(verbose_name
="Date limite")
51 region
= models
.ForeignKey(ref
.Region
, db_column
='region',
52 verbose_name
="Région")
53 bureau
= models
.ForeignKey(ref
.Bureau
, db_column
='bureau', )
56 verbose_name_plural
= "offres d'emploi"
58 def __unicode__(self
):
59 return '%s [%s]' % (self
.nom
, self
.id)
77 ('SEL', 'Sélectionné'),
79 ('REC', 'Recevable'), # Trouver une lettre plus appropriée?
82 class Candidat(Metadata
):
83 statut
= models
.CharField(max_length
=4, choices
=STATUT_CHOICES
,
85 offre_emploi
= models
.ForeignKey('OffreEmploi', db_column
='offre_emploi',
87 prenom
= models
.CharField(max_length
=255)
88 nom
= models
.CharField(max_length
=255)
89 genre
= models
.CharField(max_length
=1, choices
=GENRE_CHOICES
)
90 nationalite
= models
.ForeignKey(ref
.Pays
,
91 db_column
='nationalite',
93 date_naissance
= models
.DateField(verbose_name
="Date de naissance")
94 situation_famille
= models
.CharField(max_length
=1,
95 choices
=SITUATION_CHOICES
)
96 nombre_dependant
= models
.IntegerField(verbose_name
="Nombre de dépendant")
97 niveau_diplome
= models
.CharField(max_length
=255,
98 verbose_name
="Niveau du diplôme")
99 employeur_actuel
= models
.CharField(max_length
=255)
100 poste_actuel
= models
.CharField(max_length
=255)
101 domaine_professionnel
= models
.CharField(max_length
=255)
104 adresse
= models
.CharField(max_length
=255)
105 ville
= models
.CharField(max_length
=255)
106 etat_province
= models
.CharField(max_length
=255,
107 verbose_name
="État/Province")
108 pays
= models
.ForeignKey(ref
.Pays
, db_column
='pays',
111 def __unicode__(self
):
112 return '%s %s [%s]' % (self
.prenom
, self
.nom
, self
.id)
116 storage_prive
= FileSystemStorage(settings
.PRIVE_MEDIA_ROOT
,
117 base_url
=settings
.PRIVE_MEDIA_URL
)
119 def candidat_piece_dispatch(instance
, filename
):
120 path
= "offre_emploi/%s_%s/%s/%s_%s" % (instance
.candidat
.nom
,
121 instance
.candidat
.prenom
, instance
.nom
, instance
.candidat
.id,
125 class CandidatPiece(models
.Model
):
126 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
127 related_name
='candidat_piece')
128 nom
= models
.CharField(max_length
=255)
129 #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
130 path
= models
.FileField(verbose_name
="Fichier",
131 upload_to
=candidat_piece_dispatch
,
132 storage
=storage_prive
, )
135 verbose_name
= "pièce jointe du candidats"
136 verbose_name_plural
= "pièces jointes des candidats"
138 def __unicode__(self
):
139 return '%s' % (self
.nom
)
141 class UserProfile(models
.Model
):
142 user
= models
.ForeignKey("auth.User", unique
=True,
143 verbose_name
="Permission")
144 candidats
= models
.ManyToManyField(Candidat
, verbose_name
='Candidats',
145 blank
=True, null
=True,related_name
="evaluateurs")
146 regions
= models
.ManyToManyField(ref
.Region
,
147 verbose_name
="Régions", )
150 verbose_name
= "permission"
152 def __unicode__(self
):
153 return '%s %s' % (self
.user
.first_name
, self
.user
.last_name
)
155 UserProfile
.profile
= property(lambda u
: UserProfile
.objects
.get_or_create(user
=u
)[0])
157 class CandidatEvaluation(models
.Model
):
158 candidat
= models
.ForeignKey(Candidat
, db_column
='candidat',
160 evaluateur
= models
.ForeignKey(UserProfile
, db_column
='evaluateur',
161 related_name
='+', verbose_name
="Évaluateur")
162 note
= models
.IntegerField(choices
=NOTES
, blank
=True, null
=True)
163 commentaire
= models
.TextField(null
=True, blank
=True)
164 date
= models
.DateField(auto_now_add
=True)
167 verbose_name
= "évaluation du candidat"
168 verbose_name_plural
= "évaluations des candidats"