list_display contrat #1542
[auf_rh_dae.git] / project / rh / models.py
index 6bd05e3..e5bcfd4 100644 (file)
@@ -1,11 +1,10 @@
 # -=- encoding: utf-8 -=-
 
-import datetime
-
 from django.core.files.storage import FileSystemStorage
 from django.db import models
-import settings
-
+from django.conf import settings
+from auf.django.metadata.models import AUFMetadata
+from auf.django.metadata.managers import NoDeleteManager
 import datamaster_modeles.models as ref
 
 
@@ -27,31 +26,8 @@ def dossier_piece_dispatch(instance, filename):
     path = "dossier/%s/%s" % (instance.dossier_id, filename)
     return path
 
-# Abstracts
-class Metadata(models.Model):
-    """Méta-données AUF.
-    Metadata.actif = flag remplaçant la suppression.
-    supprime == True : objet réputé supprimé.
-    """
-    actif = models.BooleanField(default=True)
-    supprime = models.BooleanField(default=False)
-    date_creation = models.DateField(auto_now_add=True)
-    user_creation = models.ForeignKey('auth.User', 
-                            db_column='user_creation', related_name='+',
-                            null=True, blank=True)
-    date_modification = models.DateField(auto_now=True)
-    user_modification = models.ForeignKey('auth.User', 
-                            db_column='user_modification', related_name='+',
-                            null=True, blank=True)
-    date_desactivation = models.DateField(null=True, blank=True)
-    user_desactivation = models.ForeignKey('auth.User', 
-                            db_column='user_desactivation', related_name='+',
-                            null=True, blank=True)
-    
-    class Meta:
-        abstract = True
 
-class Commentaire(Metadata):
+class Commentaire(AUFMetadata):
     texte = models.TextField()
     owner = models.ForeignKey('auth.User', db_column='owner', related_name='+')
     
@@ -70,11 +46,18 @@ POSTE_APPEL_CHOICES = (
     ('externe', 'Externe'),
 )
 
-class Poste_(Metadata):
+class PosteManager(NoDeleteManager):
+    def get_query_set(self):
+        return super(PosteManager, self).get_query_set().select_related('implantation')
+
+class Poste_(AUFMetadata):
     """Un Poste est un emploi (job) à combler dans une implantation. 
     Un Poste peut être comblé par un Employe, auquel cas un Dossier est créé.
     Si on veut recruter 2 jardiniers, 2 Postes distincts existent.
     """
+
+    objects = PosteManager()
+
     # Identification
     nom = models.CharField(max_length=255, 
                             verbose_name="Titre du poste", )
@@ -288,7 +271,7 @@ SITUATION_CHOICES = (
     ('M', 'Marié'),
 )
 
-class Employe(Metadata):
+class Employe(AUFMetadata):
     """Personne occupant ou ayant occupé un Poste. Un Employe aura autant de 
     Dossiers qu'il occupe ou a occupé de Postes.
     
@@ -377,7 +360,7 @@ LIEN_PARENTE_CHOICES = (
     ('Fils', 'Fils'),
 )
 
-class AyantDroit(Metadata):
+class AyantDroit(AUFMetadata):
     """Personne en relation avec un Employe.
     """
     # Identification
@@ -437,7 +420,7 @@ COMPTE_COMPTA_CHOICES = (
     ('aucun', 'Aucun'),
 )
 
-class Dossier_(Metadata):
+class Dossier_(AUFMetadata):
     """Le Dossier regroupe les informations relatives à l'occupation
     d'un Poste par un Employe. Un seul Dossier existe par Poste occupé
     par un Employe.
@@ -450,8 +433,7 @@ class Dossier_(Metadata):
     employe = models.ForeignKey('Employe', db_column='employe', 
                             related_name='+',
                             verbose_name="Employé")
-    poste = models.ForeignKey('Poste', db_column='poste', 
-                            related_name='+', editable=False)
+    poste = models.ForeignKey('Poste', db_column='poste', related_name='+')
     statut = models.ForeignKey('Statut', related_name='+', default=3,
                             null=True)
     organisme_bstg = models.ForeignKey('OrganismeBstg', 
@@ -541,7 +523,7 @@ class DossierCommentaire(Commentaire):
 
 ### RÉMUNÉRATION
     
-class RemunerationMixin(Metadata):
+class RemunerationMixin(AUFMetadata):
     # Identification
     dossier = models.ForeignKey('Dossier', db_column='dossier',
                         related_name='%(app_label)s_%(class)s_remunerations')
@@ -612,12 +594,20 @@ class Remuneration(Remuneration_):
 
 
 ### CONTRATS
+
+class ContratManager(NoDeleteManager):
+    def get_query_set(self):
+        return super(ContratManager, self).get_query_set().select_related('dossier', 'dossier__poste')
+
         
-class Contrat(Metadata):
+class Contrat(AUFMetadata):
     """Document juridique qui encadre la relation de travail d'un Employe
     pour un Poste particulier. Pour un Dossier (qui documente cette 
     relation de travail) plusieurs contrats peuvent être associés.
     """
+
+    objects = ContratManager()
+
     dossier = models.ForeignKey('Dossier', db_column='dossier', 
                             related_name='+')
     type_contrat = models.ForeignKey('TypeContrat', db_column='type_contrat', 
@@ -642,7 +632,7 @@ class Contrat(Metadata):
 
 ### ÉVÉNEMENTS
 
-class Evenement_(Metadata):
+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).
@@ -708,7 +698,7 @@ class EvenementRemuneration(EvenementRemuneration_):
 
 ### RÉFÉRENCES RH 
 
-class FamilleEmploi(Metadata):
+class FamilleEmploi(AUFMetadata):
     """Catégorie utilisée dans la gestion des Postes.
     Catégorie supérieure à TypePoste.
     """
@@ -722,7 +712,7 @@ class FamilleEmploi(Metadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
-class TypePoste(Metadata):
+class TypePoste(AUFMetadata):
     """Catégorie de Poste.
     """
     nom = models.CharField(max_length=255)
@@ -758,7 +748,7 @@ NATURE_REMUNERATION_CHOICES = (
     ('Traitement', 'Traitement'),
 )
 
-class TypeRemuneration(Metadata):
+class TypeRemuneration(AUFMetadata):
     """Catégorie de Remuneration.
     """
     nom = models.CharField(max_length=255)
@@ -777,7 +767,7 @@ class TypeRemuneration(Metadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
         
-class TypeRevalorisation(Metadata):
+class TypeRevalorisation(AUFMetadata):
     """Justification du changement de la Remuneration.
     (Actuellement utilisé dans aucun traitement informatique.)
     """
@@ -791,7 +781,7 @@ class TypeRevalorisation(Metadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
     
-class Service(Metadata):
+class Service(AUFMetadata):
     """Unité administrative où les Postes sont rattachés.
     """
     nom = models.CharField(max_length=255)
@@ -810,7 +800,7 @@ TYPE_ORGANISME_CHOICES = (
     ('DET', 'Détachement'),
 )
 
-class OrganismeBstg(Metadata):
+class OrganismeBstg(AUFMetadata):
     """Organisation d'où provient un Employe mis à disposition (MAD) de 
     ou détaché (DET) à l'AUF à titre gratuit.
     
@@ -831,7 +821,7 @@ class OrganismeBstg(Metadata):
     def __unicode__(self):
         return u'%s (%s)' % (self.nom, self.get_type_display())
 
-class Statut(Metadata):
+class Statut(AUFMetadata):
     """Statut de l'Employe dans le cadre d'un Dossier particulier.
     """
     # Identification
@@ -858,7 +848,7 @@ TYPE_CLASSEMENT_CHOICES = (
 )
 
 
-class Classement_(Metadata):
+class Classement_(AUFMetadata):
     """Éléments de classement de la 
     "Grille générique de classement hiérarchique".
     
@@ -891,7 +881,7 @@ class Classement(Classement_):
     __doc__ = Classement_.__doc__
 
 
-class TauxChange_(Metadata):
+class TauxChange_(AUFMetadata):
     """Taux de change de la devise vers l'euro (EUR) 
     pour chaque année budgétaire.
     """
@@ -915,7 +905,7 @@ class TauxChange(TauxChange_):
     __doc__ = TauxChange_.__doc__
 
 
-class ValeurPoint_(Metadata):
+class ValeurPoint_(AUFMetadata):
     """Utile pour connaître, pour un Dossier, le salaire de base théorique lié 
     au classement dans la grille. La ValeurPoint s'obtient par l'implantation 
     du Poste de ce Dossier : dossier.poste.implantation (pseudo code).
@@ -959,7 +949,7 @@ class ValeurPoint(ValeurPoint_):
     __doc__ = ValeurPoint_.__doc__
 
 
-class Devise(Metadata):
+class Devise(AUFMetadata):
     """Devise monétaire.
     """
     code =  models.CharField(max_length=10, unique=True)
@@ -973,7 +963,7 @@ class Devise(Metadata):
     def __unicode__(self):
         return u'%s - %s' % (self.code, self.nom)
 
-class TypeContrat(Metadata):
+class TypeContrat(AUFMetadata):
     """Type de contrat.
     """
     nom = models.CharField(max_length=255)
@@ -990,7 +980,7 @@ class TypeContrat(Metadata):
         
 ### AUTRES
 
-class ResponsableImplantation(Metadata):
+class ResponsableImplantation(AUFMetadata):
     """Le responsable d'une implantation. 
     Anciennement géré sur le Dossier du responsable.
     """