1643: Ne pas voir la moyenne d'un candidat, si l'offre d'emploi n'a pas atteint la...
[auf_rh_dae.git] / project / recrutement / models.py
CommitLineData
df59fcab 1# -=- encoding: utf-8 -=-
2
3import datetime
b235ec9d 4from django.contrib.auth.models import User
4418c732 5from django.core.files.storage import FileSystemStorage
ec517164 6from tinymce import models as tinymce_models
6f2d5d58 7from django.db import models
4418c732 8import settings
362a3534 9#from private_files import PrivateFileField
6f2d5d58 10
df59fcab 11import datamaster_modeles.models as ref
12from project.rh import models as rh
13
596fe324 14### CONSTANTES
15#NOTES
16NOTE_MIN = 1
17NOTE_RANGE = 1
e34a2ae0 18NOTE_MAX = 11
596fe324 19NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)]
20
df59fcab 21# Abstracts
22class Metadata(models.Model):
23 """Méta-données AUF.
24 Metadata.actif = flag remplaçant la suppression.
25 actif == False : objet réputé supprimé.
26 """
27 actif = models.BooleanField(default=True)
28 date_creation = models.DateField(auto_now_add=True)
29
30 class Meta:
31 abstract = True
32
4e8e178f 33class OffreEmploiManager(models.Manager):
34 def get_query_set(self):
61a4b478 35 fkeys = ('region',)
4e8e178f 36 return super(OffreEmploiManager, self).get_query_set().select_related(*fkeys).all()
37
38class ProxyPoste(rh.Poste):
39 class Meta:
40 proxy = True
41
42 def __unicode__(self):
43 return '%s [%s]' % (self.nom, self.id)
df59fcab 44
45class OffreEmploi(Metadata):
4e8e178f 46 objects = OffreEmploiManager()
df59fcab 47 nom = models.CharField(max_length=255)
b235ec9d 48 resume = models.TextField(verbose_name="Résumé")
ec517164 49 description = tinymce_models.HTMLField()
50 poste = models.ForeignKey(ProxyPoste, db_column='poste')
df59fcab 51 date_limite = models.DateField(verbose_name="Date limite")
b235ec9d 52 region = models.ForeignKey(ref.Region, db_column='region',
53 verbose_name="Région")
54 bureau = models.ForeignKey(ref.Bureau, db_column='bureau', )
ec517164 55 duree_affectation = models.CharField(max_length=255,
56 verbose_name="Durée de l'affectation")
57 renumeration = models.CharField(max_length=255,
58 verbose_name='Rénumération')
59 debut_affectation = models.DateField(verbose_name="Début de l'affectation")
60 lieu_affectation = models.ForeignKey(ref.Implantation,
61 db_column='implantation',
62 verbose_name="Lieu d'affectation")
b235ec9d 63
64 class Meta:
65 verbose_name_plural = "offres d'emploi"
4418c732 66
67 def __unicode__(self):
68 return '%s [%s]' % (self.nom, self.id)
df59fcab 69
70
71### CANDIDAT
72
73GENRE_CHOICES = (
74 ('M', 'Homme'),
75 ('F', 'Femme'),
76)
77SITUATION_CHOICES = (
78 ('C', 'Célibataire'),
79 ('F', 'Fiancé'),
80 ('M', 'Marié'),
81 ('D', 'Divorcé'),
82)
83STATUT_CHOICES = (
84 ('NOUV', 'Nouveau'),
85 ('REF', 'Refusé'),
86 ('SEL', 'Sélectionné'),
87 ('ACC', 'Accepté'),
88 ('REC', 'Recevable'), # Trouver une lettre plus appropriée?
89)
90
b235ec9d 91class Candidat(Metadata):
8ea41642 92 statut = models.CharField(max_length=4, choices=STATUT_CHOICES,
93 default='NOUV')
df59fcab 94 offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
7f9e891e 95 related_name='+')
3b4b948e 96 prenom = models.CharField(max_length=255, verbose_name='Prénom', )
df59fcab 97 nom = models.CharField(max_length=255)
98 genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
99 nationalite = models.ForeignKey(ref.Pays,
3b4b948e 100 db_column='nationalite', related_name='+',
101 verbose_name='Nationalité')
102 date_naissance = models.DateField(verbose_name='Date de naissance')
df59fcab 103 situation_famille = models.CharField(max_length=1,
ec517164 104 choices=SITUATION_CHOICES,
105 verbose_name='Situation familiale')
3b4b948e 106 nombre_dependant = models.IntegerField(verbose_name='Nombre de dépendant')
df59fcab 107 niveau_diplome = models.CharField(max_length=255,
3b4b948e 108 verbose_name='Niveau du diplôme')
df59fcab 109 employeur_actuel = models.CharField(max_length=255)
110 poste_actuel = models.CharField(max_length=255)
111 domaine_professionnel = models.CharField(max_length=255)
ec517164 112 telephone = models.CharField(max_length=255, verbose_name='Téléphone', )
113 email = models.EmailField(max_length=255, verbose_name = 'Courriel', )
df59fcab 114
115 # Adresse
116 adresse = models.CharField(max_length=255)
117 ville = models.CharField(max_length=255)
118 etat_province = models.CharField(max_length=255,
4418c732 119 verbose_name="État/Province")
ec517164 120 code_postal = models.CharField(max_length=255, blank=True)
df59fcab 121 pays = models.ForeignKey(ref.Pays, db_column='pays',
7f9e891e 122 related_name='+')
4418c732 123
124 def __unicode__(self):
125 return '%s %s [%s]' % (self.prenom, self.nom, self.id)
126
127### PIECE CANDIDAT
128# Upload de fichiers
129storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
130 base_url=settings.PRIVE_MEDIA_URL)
131
132def candidat_piece_dispatch(instance, filename):
133 path = "offre_emploi/%s_%s/%s/%s_%s" % (instance.candidat.nom,
134 instance.candidat.prenom, instance.nom, instance.candidat.id,
135 filename)
136 return path
137
138class CandidatPiece(models.Model):
139 candidat = models.ForeignKey(Candidat, db_column='candidat',
2b3edf33 140 related_name='candidat_piece')
4418c732 141 nom = models.CharField(max_length=255)
362a3534 142 #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
f6749f29 143 path = models.FileField(verbose_name="Fichier",
144 upload_to=candidat_piece_dispatch,
2b3edf33 145 storage=storage_prive, )
4418c732 146
b235ec9d 147 class Meta:
12767731 148 verbose_name = "pièce jointe"
149 verbose_name_plural = "pièces jointes"
b235ec9d 150
4418c732 151 def __unicode__(self):
152 return '%s' % (self.nom)
153
f6749f29 154class UserProfile(models.Model):
b235ec9d 155 user = models.ForeignKey("auth.User", unique=True,
d835c9f3 156 verbose_name="permission")
cced6a23 157 candidats = models.ManyToManyField(Candidat, verbose_name='candidats',
2adf9e0c 158 blank=True, null=True,related_name="evaluateurs")
3b4bfad3 159 regions = models.ManyToManyField(ref.Region,
160 verbose_name="Régions", )
eb579d40 161
b235ec9d 162 class Meta:
cced6a23 163 verbose_name = "évaluateur"
b235ec9d 164
2adf9e0c 165 def __unicode__(self):
166 return '%s %s' % (self.user.first_name, self.user.last_name)
167
f6749f29 168UserProfile.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
4418c732 169
170class CandidatEvaluation(models.Model):
171 candidat = models.ForeignKey(Candidat, db_column='candidat',
3b4b948e 172 related_name='+',)
f6749f29 173 evaluateur = models.ForeignKey(UserProfile, db_column='evaluateur',
cced6a23 174 related_name='+', verbose_name='Évaluateur')
596fe324 175 note = models.IntegerField(choices=NOTES, blank=True, null=True)
362a3534 176 commentaire = models.TextField(null=True, blank=True)
4418c732 177 date = models.DateField(auto_now_add=True)
b235ec9d 178
179 class Meta:
cced6a23 180 verbose_name = 'évaluation du candidat'
181 verbose_name_plural = 'évaluations des candidats'
ec517164 182
183'''class CandidatLettre(models.Model):
184 candidat = models.ForeignKey(Candidat, db_column='candidat',
185 related_name='+',)
186 titre = models.CharField(max_length=255, )
187 texte = models.TextField(null=True, blank=True)
188
189 def __unicode__(self):
190 return '%s' % (self.titre)
191'''
192