Poste : liste dans admin + occupe_par() + is_vacant()
authorDavin Baragiotta <davin.baragiotta@auf.org>
Fri, 6 Jan 2012 20:53:20 +0000 (15:53 -0500)
committerDavin BARAGIOTTA <davin.baragiotta@auf.org>
Fri, 6 Jan 2012 20:53:20 +0000 (15:53 -0500)
project/rh/lib.py
project/rh/models.py

index 2a90a28..a6376b1 100644 (file)
@@ -490,8 +490,27 @@ class OrganismeBstgAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelA
 
 class PosteAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin):
     alphabet_filter = 'nom'
-    search_fields = ('nom', 'implantation__code', 'implantation__nom', 'implantation__region__code', 'implantation__region__nom', )
-    list_display = ('nom', 'implantation', 'service', 'type_poste', 'date_debut', 'date_fin', )
+    search_fields = ('nom', 
+        'implantation__code', 
+        'implantation__nom', 
+        'implantation__region__code', 
+        'implantation__region__nom',
+        )
+    list_display = ('nom', 
+        '_occupe_par',
+        'implantation', 
+        'service', 
+        'type_poste', 
+        'date_debut', 
+        'date_fin',
+        'date_modification',
+        'user_modification',
+        )
+    list_filter = ('service', 
+        'implantation__region', 
+        'implantation__adresse_physique_pays', 
+        'implantation',
+        )
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
             'fields': (('nom', 'nom_feminin'), 'implantation', 'type_poste',
@@ -532,6 +551,22 @@ class PosteAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin):
                DossierROInline,
                PosteCommentaireInline, )
 
+    def _occupe_par(self, obj):
+        """Formatte la méthode Poste.occupe_par() pour l'admin"""
+        output = "VACANT"
+        employes = obj.occupe_par()
+        if employes:
+            l = []
+            for e in employes:
+                link = "<a href='%s'>%s</a>" % \
+                    (reverse('admin:rh_employe_change', args=(e.id,)),
+                     e)
+                l.append(link)
+            output = "\n<br />".join(l)
+        return output
+    _occupe_par.allow_tags = True
+    _occupe_par.short_description = "Occupé par"   
+
     def save_formset(self, request, form, formset, change):
         instances = formset.save(commit=False)
         for instance in instances:
index cf85772..4d980ac 100644 (file)
@@ -183,13 +183,22 @@ class Poste_(AUFMetadata):
         representation = u'%s - %s [%s]' % (self.implantation, self.nom, 
                             self.id)
         if self.is_vacant():
-            representation = representation + u' (vacant)'
+            representation = representation + u' (VACANT)'
         return representation
         
     def is_vacant(self):
-        # TODO : si existe un dossier actif pour ce poste, return False
-        # self.dossier_set.all() fonctionne pas
-        return False
+        vacant = True
+        if self.occupe_par():
+            vacant = False
+        return vacant
+
+    def occupe_par(self):
+        """Retourne la liste d'employé occupant ce poste.
+        Généralement, retourne une liste d'un élément.
+        Si poste inoccupé, retourne liste vide.
+        """
+        return [d.employe for d in self.dossiers.filter(actif=True, supprime=False) \
+            .exclude(date_fin__lt=date.today())]
 
     prefix_implantation = "implantation__region"
     def get_regions(self):