[#2658] Retrait du hack app_label() dans rh.models
[auf_rh_dae.git] / project / rh / models.py
index e2db9d3..a1a2191 100644 (file)
@@ -24,17 +24,6 @@ from managers import \
 from validators import validate_date_passee
 
 
-# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe
-# pour l'héritage.  Cela permet de faire du dynamic loading par app sans
-# avoir à redéfinir dans DAE la FK
-def app_context():
-    import inspect
-    models_stack = [s[1].split('/')[-2]
-                    for s in inspect.stack()
-                    if s[1].endswith('models.py')]
-    return models_stack[-1]
-
-
 # Constantes
 HELP_TEXT_DATE = "format: jj-mm-aaaa"
 REGIME_TRAVAIL_DEFAULT = Decimal('100.00')
@@ -362,10 +351,6 @@ class PosteFinancement_(models.Model):
     Pour un Poste, structure d'informations décrivant comment on prévoit
     financer ce Poste.
     """
-    poste = models.ForeignKey(
-        '%s.Poste' % app_context(), db_column='poste',
-        related_name='%(app_label)s_financements'
-    )
     type = models.CharField(max_length=1, choices=POSTE_FINANCEMENT_CHOICES)
     pourcentage = models.DecimalField(
         max_digits=12, decimal_places=2,
@@ -387,7 +372,9 @@ class PosteFinancement_(models.Model):
 
 
 class PosteFinancement(PosteFinancement_):
-    pass
+    poste = models.ForeignKey(
+        Poste, db_column='poste', related_name='rh_financements'
+    )
 
 
 class PostePiece_(models.Model):
@@ -395,10 +382,6 @@ class PostePiece_(models.Model):
     Documents relatifs au Poste.
     Ex.: Description de poste
     """
-    poste = models.ForeignKey(
-        '%s.Poste' % app_context(), db_column='poste',
-        related_name='%(app_label)s_pieces'
-    )
     nom = models.CharField(u"Nom", max_length=255)
     fichier = models.FileField(
         u"Fichier", upload_to=poste_piece_dispatch, storage=storage_prive
@@ -413,7 +396,9 @@ class PostePiece_(models.Model):
 
 
 class PostePiece(PostePiece_):
-    pass
+    poste = models.ForeignKey(
+        Poste, db_column='poste', related_name='rh_pieces'
+    )
 
 
 class PosteComparaison_(AUFMetadata, DevisableMixin):
@@ -421,10 +406,6 @@ class PosteComparaison_(AUFMetadata, DevisableMixin):
     De la même manière qu'un dossier, un poste peut-être comparé à un autre
     poste.
     """
-    poste = models.ForeignKey(
-        '%s.Poste' % app_context(),
-        related_name='%(app_label)s_comparaisons_internes'
-    )
     objects = PosteComparaisonManager()
 
     implantation = models.ForeignKey(
@@ -444,20 +425,18 @@ class PosteComparaison_(AUFMetadata, DevisableMixin):
 
 
 class PosteComparaison(PosteComparaison_):
+    poste = models.ForeignKey(
+        Poste, related_name='rh_comparaisons_internes'
+    )
+
     objects = NoDeleteManager()
 
 
-class PosteCommentaire_(Commentaire):
+class PosteCommentaire(Commentaire):
     poste = models.ForeignKey(
-        '%s.Poste' % app_context(), db_column='poste', related_name='+'
+        Poste, db_column='poste', related_name='commentaires'
     )
 
-    class Meta:
-        abstract = True
-
-
-class PosteCommentaire(PosteCommentaire_):
-    pass
 
 
 ### EMPLOYÉ/PERSONNE
@@ -967,15 +946,15 @@ class Dossier_(AUFMetadata, DevisableMixin):
 
 class Dossier(Dossier_):
     __doc__ = Dossier_.__doc__
-    poste = models.ForeignKey('%s.Poste' % app_context(),
-        db_column='poste',
-        related_name='%(app_label)s_dossiers',
+    poste = models.ForeignKey(
+        Poste, db_column='poste', related_name='rh_dossiers',
         help_text=u"Taper le nom du poste ou du type de poste",
-        )
+    )
     employe = models.ForeignKey(
         'Employe', db_column='employe',
         help_text=u"Taper le nom de l'employé",
-        related_name='%(app_label)s_dossiers', verbose_name=u"employé")
+        related_name='rh_dossiers', verbose_name=u"employé"
+    )
     principal = models.BooleanField(
         u"Principal?", default=True,
         help_text=(
@@ -989,10 +968,6 @@ class DossierPiece_(models.Model):
     Documents relatifs au Dossier (à l'occupation de ce poste par employé).
     Ex.: Lettre de motivation.
     """
-    dossier = models.ForeignKey(
-        '%s.Dossier' % app_context(),
-        db_column='dossier', related_name='%(app_label)s_dossierpieces'
-    )
     nom = models.CharField(max_length=255)
     fichier = models.FileField(
         upload_to=dossier_piece_dispatch, storage=storage_prive
@@ -1007,29 +982,22 @@ class DossierPiece_(models.Model):
 
 
 class DossierPiece(DossierPiece_):
-    pass
-
-
-class DossierCommentaire_(Commentaire):
     dossier = models.ForeignKey(
-        '%s.Dossier' % app_context(), db_column='dossier', related_name='+'
+        Dossier, db_column='dossier', related_name='rh_dossierpieces'
     )
 
-    class Meta:
-        abstract = True
 
 
-class DossierCommentaire(DossierCommentaire_):
-    pass
+class DossierCommentaire(Commentaire):
+    dossier = models.ForeignKey(
+        Dossier, db_column='dossier', related_name='commentaires'
+    )
 
 
 class DossierComparaison_(models.Model, DevisableMixin):
     """
     Photo d'une comparaison salariale au moment de l'embauche.
     """
-    dossier = models.ForeignKey(
-        '%s.Dossier' % app_context(), related_name='%(app_label)s_comparaisons'
-    )
     objects = DossierComparaisonManager()
 
     implantation = models.ForeignKey(
@@ -1050,16 +1018,14 @@ class DossierComparaison_(models.Model, DevisableMixin):
 
 
 class DossierComparaison(DossierComparaison_):
-    pass
+    dossier = models.ForeignKey(
+        Dossier, related_name='rh_comparaisons'
+    )
 
 
 ### RÉMUNÉRATION
 
 class RemunerationMixin(AUFMetadata):
-    dossier = models.ForeignKey(
-        '%s.Dossier' % app_context(), db_column='dossier',
-        related_name='%(app_label)s_remunerations'
-    )
 
     # Identification
     type = models.ForeignKey(
@@ -1122,7 +1088,9 @@ class Remuneration_(RemunerationMixin, DevisableMixin):
 
 
 class Remuneration(Remuneration_):
-    pass
+    dossier = models.ForeignKey(
+        Dossier, db_column='dossier', related_name='rh_remunerations'
+    )
 
 
 ### CONTRATS
@@ -1140,10 +1108,6 @@ class Contrat_(AUFMetadata):
     relation de travail) plusieurs contrats peuvent être associés.
     """
     objects = ContratManager()
-    dossier = models.ForeignKey(
-        '%s.Dossier' % app_context(), db_column='dossier',
-        related_name='%(app_label)s_contrats'
-    )
     type_contrat = models.ForeignKey(
         'TypeContrat', db_column='type_contrat',
         verbose_name=u'type de contrat', related_name='+'
@@ -1166,75 +1130,9 @@ class Contrat_(AUFMetadata):
 
 
 class Contrat(Contrat_):
-    pass
-
-### ÉVÉNEMENTS
-
-#class Evenement_(AUFMetadata):
-#    """
-#    Un Evenement sert à déclarer une situation temporaire (exceptionnelle)
-#    d'un Dossier qui vient altérer des informations normales liées à un
-#    Dossier (ex.: la Remuneration).
-#
-#    Ex.: congé de maternité, maladie...
-#
-#    Lors de ces situations exceptionnelles, l'Employe a un régime de travail
-#    différent et une rémunération en conséquence. On souhaite toutefois
-#    conserver le Dossier intact afin d'éviter une re-saisie des données lors
-#    du retour à la normale.
-#    """
-#    dossier = models.ForeignKey(
-#        '%s.Dossier' % app_context(), db_column='dossier',
-#        related_name='+'
-#    )
-#    nom = models.CharField(max_length=255)
-#    date_debut = models.DateField(verbose_name = u"Date de début")
-#    date_fin = models.DateField(verbose_name = u"Date de fin",
-#                            null=True, blank=True)
-#
-#    class Meta:
-#        abstract = True
-#        ordering = ['nom']
-#        verbose_name = u"Évènement"
-#        verbose_name_plural = u"Évènements"
-#
-#    def __unicode__(self):
-#        return u'%s' % (self.nom)
-#
-#
-#class Evenement(Evenement_):
-#    __doc__ = Evenement_.__doc__
-#
-#
-#class EvenementRemuneration_(RemunerationMixin):
-#    """
-#    Structure de rémunération liée à un Evenement qui remplace
-#    temporairement la Remuneration normale d'un Dossier, pour toute la durée
-#    de l'Evenement.
-#    """
-#    evenement = models.ForeignKey("Evenement", db_column='evenement',
-#                            related_name='+',
-#                            verbose_name = u"Évènement")
-#    # TODO : le champ dossier hérité de Remuneration doit être dérivé
-#    # de l'Evenement associé
-#
-#    class Meta:
-#        abstract = True
-#        ordering = ['evenement', 'type__nom', '-date_fin']
-#        verbose_name = u"Évènement - rémunération"
-#        verbose_name_plural = u"Évènements - rémunérations"
-#
-#
-#class EvenementRemuneration(EvenementRemuneration_):
-#    __doc__ = EvenementRemuneration_.__doc__
-#
-#    class Meta:
-#        abstract = True
-#
-#
-#class EvenementRemuneration(EvenementRemuneration_):
-#    __doc__ = EvenementRemuneration_.__doc__
-# TODO? class ContratPiece(models.Model):
+    dossier = models.ForeignKey(
+        Dossier, db_column='dossier', related_name='rh_contrats'
+    )
 
 
 ### RÉFÉRENCES RH