1551: Ajout filtre par region. Ajout de champs pour listing.
[auf_rh_dae.git] / project / recrutement / models.py
index 71a8362..a8bb5fa 100755 (executable)
@@ -1,3 +1,124 @@
+# -=- encoding: utf-8 -=-
+
+import datetime
+
+from django.core.files.storage import FileSystemStorage
 from django.db import models
+import settings
+
+import datamaster_modeles.models as ref
+from project.rh import models as rh
+
+
+# Abstracts
+class Metadata(models.Model):
+    """Méta-données AUF.
+    Metadata.actif = flag remplaçant la suppression.
+    actif == False : objet réputé supprimé.
+    """
+    actif = models.BooleanField(default=True)
+    date_creation = models.DateField(auto_now_add=True)
+    
+    class Meta:
+        abstract = True
+
+
+class OffreEmploi(Metadata):
+    # TODO : Afficher les bureaux selon la région choisies?
+    nom = models.CharField(max_length=255)
+    resume = models.TextField()
+    description = models.TextField()
+    poste = models.ForeignKey(rh.Poste, db_column='poste')
+    date_limite = models.DateField(verbose_name="Date limite")  
+    region = models.ForeignKey(ref.Region, db_column='region')
+    bureau = models.ForeignKey(ref.Bureau, db_column='bureau')
+
+    def __unicode__(self):
+        return '%s [%s]' % (self.nom, self.id)
+### CANDIDAT
+  
+GENRE_CHOICES = (
+    ('M', 'Homme'),
+    ('F', 'Femme'),
+)
+SITUATION_CHOICES = (
+    ('C', 'Célibataire'),
+    ('F', 'Fiancé'),
+    ('M', 'Marié'),
+    ('D', 'Divorcé'),
+)
+STATUT_CHOICES = (
+    ('NOUV', 'Nouveau'),
+    ('REF', 'Refusé'),
+    ('SEL', 'Sélectionné'),
+    ('ACC', 'Accepté'),
+    ('REC', 'Recevable'), # Trouver une lettre plus appropriée?
+)
+
+class Candidat(Metadata):
+    # TODO : Automatiser le statut à la création à Nouveau    
+    statut = models.CharField(max_length=4, 
+                              choices=STATUT_CHOICES)
+    offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
+                    related_name='+')
+    prenom = models.CharField(max_length=255)
+    nom = models.CharField(max_length=255)
+    genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
+    nationalite = models.ForeignKey(ref.Pays, 
+                    db_column='nationalite',
+                    related_name='+')
+    date_naissance = models.DateField(verbose_name="Date de naissance")   
+    situation_famille = models.CharField(max_length=1, 
+                        choices=SITUATION_CHOICES)
+    nombre_dependant = models.IntegerField(verbose_name="Nombre de dépendant")
+    niveau_diplome = models.CharField(max_length=255,
+                        verbose_name="Niveau du diplôme")
+    employeur_actuel = models.CharField(max_length=255)
+    poste_actuel = models.CharField(max_length=255)
+    domaine_professionnel = models.CharField(max_length=255)
+
+    # Adresse
+    adresse = models.CharField(max_length=255)
+    ville = models.CharField(max_length=255)
+    etat_province = models.CharField(max_length=255, 
+                    verbose_name="État/Province")
+    pays = models.ForeignKey(ref.Pays, db_column='pays',
+            related_name='+')
+
+    def __unicode__(self):
+        return '%s %s [%s]' % (self.prenom, self.nom, self.id)
+
+### PIECE CANDIDAT
+# Upload de fichiers
+storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT, 
+                            base_url=settings.PRIVE_MEDIA_URL)
+
+def candidat_piece_dispatch(instance, filename):
+    path = "offre_emploi/%s_%s/%s/%s_%s" % (instance.candidat.nom, 
+                instance.candidat.prenom, instance.nom, instance.candidat.id,
+                filename)
+    return path
+
+class CandidatPiece(models.Model):
+    candidat = models.ForeignKey(Candidat, db_column='candidat',
+                related_name='+') 
+    nom = models.CharField(max_length=255)
+    path = models.FileField(upload_to=candidat_piece_dispatch, 
+            storage=storage_prive)
+
+    def __unicode__(self):
+        return '%s' % (self.nom)
+
+class Evaluateur(models.Model):
+    candidats = models.ManyToManyField(Candidat)
 
-# Create your models here.
+class CandidatEvaluation(models.Model):
+    candidat = models.ForeignKey(Candidat, db_column='candidat', 
+                related_name='+') 
+    evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', 
+                    related_name='+') 
+    note = models.IntegerField()
+    commentaire = models.TextField()
+    date = models.DateField(auto_now_add=True)