+import settings
+
+import datamaster_modeles.models as ref
+
+
+# Upload de fichiers
+storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
+ base_url=settings.PRIVE_MEDIA_URL)
+
+def poste_piece_dispatch(instance, filename):
+ path = "poste/%s/%s" % (instance.poste_id, filename)
+ return path
+
+def dossier_piece_dispatch(instance, filename):
+ path = "dossier/%s/%s" % (instance.dossier_id, filename)
+ return path
+
+
+### POSTE
+
+POSTE_APPEL_CHOICES = (
+ ('interne', 'Interne'),
+ ('externe', 'Externe'),
+)
+
+class Poste(models.Model):
+ # Identification
+ id = models.IntegerField(primary_key=True)
+ nom = models.CharField(verbose_name="Titre du poste", max_length=255)
+ implantation = models.ForeignKey(ref.Implantation)
+ type_poste = models.ForeignKey(rh.TypePoste, null=True, related_name='+')
+ service = models.ForeignKey(rh.Service, related_name='+',
+ verbose_name=u"Direction/Service/Pôle support")
+ responsable = models.ForeignKey(rh.Poste, related_name='+',
+ verbose_name="Poste du responsable")
+
+ # Contrat
+ regime_travail = models.DecimalField(max_digits=12, decimal_places=2,
+ default=100,
+ verbose_name="Temps de travail",
+ help_text="% du temps complet")
+ regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
+ decimal_places=2,
+ default=35,
+ verbose_name="Nb. heures par semaine")
+
+ # Recrutement
+ local = models.BooleanField(verbose_name="Local", default=True, blank=True)
+ expatrie = models.BooleanField(verbose_name="Expatrié", default=False,
+ blank=True)
+
+ # TODO null?
+ mise_a_disposition = models.BooleanField(verbose_name="Mise à disposition")
+ appel = models.CharField(max_length=10, default='interne',
+ verbose_name="Appel à candidature",
+ choices=POSTE_APPEL_CHOICES)
+
+ # Rémunération
+ classement_min = models.ForeignKey(rh.Classement, related_name='+')
+ classement_max = models.ForeignKey(rh.Classement, related_name='+')
+ valeur_point_min = models.ForeignKey(rh.ValeurPoint, related_name='+',
+ blank=True, null=True)
+ valeur_point_max = models.ForeignKey(rh.ValeurPoint, related_name='+',
+ blank=True, null=True)
+ devise_min = models.ForeignKey(rh.Devise, default=5, related_name='+')
+ devise_max = models.ForeignKey(rh.Devise, default=5, related_name='+')
+ salaire_min = models.DecimalField(max_digits=12, decimal_places=2,
+ default=0)
+ salaire_max = models.DecimalField(max_digits=12, decimal_places=2,
+ default=0)
+ indemn_min = models.DecimalField(max_digits=12, decimal_places=2,
+ default=0)
+ indemn_max = models.DecimalField(max_digits=12, decimal_places=2,
+ default=0)
+ autre_min = models.DecimalField(max_digits=12, decimal_places=2,
+ default=0)
+ autre_max = models.DecimalField(max_digits=12, decimal_places=2,
+ default=0)
+
+ # Comparatifs de rémunération
+ devise_comparaison = models.ForeignKey(rh.Devise, related_name='+',
+ default=5)
+ comp_locale_min = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_locale_max = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_universite_min = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_universite_max = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_fonctionpub_min = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_fonctionpub_max = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_ong_min = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_ong_max = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_autre_min = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+ comp_autre_max = models.DecimalField(max_digits=12, decimal_places=2,
+ null=True, blank=True)
+
+ # Justification
+ justification = models.TextField()
+
+ # Méta
+ date_validation = models.DateTimeField() #dae
+ date_creation = models.DateTimeField(auto_now_add=True)
+ date_modification = models.DateTimeField(auto_now=True)
+ date_debut = models.DateField(verbose_name="Date de début",
+ help_text="format: aaaa-mm-jj")
+ date_fin = models.DateField(null=True, blank=True,
+ verbose_name="Date de fin",
+ help_text="format: aaaa-mm-jj")
+ actif = models.BooleanField(default=True)
+
+ def __unicode__(self):
+ # gérer si poste est vacant ou non dans affichage
+ return u'%s - %s [%s]' % (self.implantation, self.nom, self.id)
+
+
+POSTE_FINANCEMENT_CHOICES = (
+ ('A', 'A - Frais de personnel'),
+ ('B', 'B - Projet(s)-Titre(s)'),
+ ('C', 'C - Autre')
+)
+
+class PosteFinancement(models.Model):
+ poste = models.ForeignKey('Poste', related_name='financements')
+ type = models.CharField(max_length=1, choices=POSTE_FINANCEMENT_CHOICES)
+ pourcentage = models.DecimalField(max_digits=12, decimal_places=2,
+ help_text="ex.: 33.33 % (décimale avec point)")
+ commentaire = models.TextField(
+ help_text="Spécifiez la source de financement.")
+
+ class Meta:
+ ordering = ['type']
+
+class PostePiece(models.Model):
+ poste = models.ForeignKey("Poste")
+ nom = models.CharField(verbose_name="Nom", max_length=255)
+ fichier = models.FileField(verbose_name="Fichier",
+ upload_to=poste_piece_dispatch,
+ storage=storage_prive)
+
+
+### EMPLOYÉ/PERSONNE