Organigramem d'employé: affichage des postes en corus
authorJean-Philippe Caissy <jpcaissy@piji.ca>
Thu, 1 Mar 2012 19:39:02 +0000 (13:39 -0600)
committerJean-Philippe Caissy <jpcaissy@piji.ca>
Thu, 1 Mar 2012 19:39:02 +0000 (13:39 -0600)
project/rh/views.py

index acbe457..5f8b565 100644 (file)
@@ -479,20 +479,24 @@ def organigrammes_employe(request, id):
     poste = get_object_or_404(rh.Poste, pk=id)
 
     graph = nx.DiGraph()
-    dossiers = rh.Dossier.objects.select_related('employe', 'poste', 'poste__implantation').filter((Q(poste__date_fin__gt=date.today()) | Q(poste__date_fin=None)) & (Q(poste__date_debut__lt=date.today()) | Q(poste__date_debut=None)) ).exclude(poste__supprime=True).exclude(poste__responsable=None).all()
+    postes = rh.Poste.objects.select_related('implantation').filter((Q(date_fin__gt=date.today()) | Q(date_fin=None)) & (Q(date_debut__lt=date.today()) | Q(date_debut=None)) ).exclude(supprime=True).exclude(responsable=None).all()
     dossiers_by_poste = dict((d.poste_id, d) for d in rh.Dossier.objects.select_related('employe', 'poste').all())
-    for p in rh.Poste.objects.all():
+    postes_by_id = dict((p.id, p) for p in rh.Poste.objects.all())
+
+    for p in rh.Poste.objects.filter((Q(date_fin__gt=date.today()) | Q(date_fin=None)) & (Q(date_debut__lt=date.today()) | Q(date_debut=None)) ).exclude(supprime=True).exclude(responsable=None).all():
         graph.add_node(p.id)
 
-        for d in dossiers:
-            if d.poste.responsable_id != d.poste.id:
-                graph.add_edge(dossiers_by_poste[d.poste.responsable_id].poste_id, d.poste.id)
+    for p in postes:
+        if p.responsable_id != p.id:
+            graph.add_edge(dossiers_by_poste[p.responsable_id].poste_id, p.id)
 
     graph = nx.bfs_tree(graph, poste.id)
     a = nx.to_agraph(graph)
     for n in a.nodes():
-        d = dossiers_by_poste[int(n)]
-        n.attr['label'] = u"%s\\n%s\\n%s" % (d.poste.nom, "%s %s" % (d.employe.nom.upper(), d.employe.prenom), d.poste.implantation)
+        p = postes_by_id[int(n)]
+        d = rh.Dossier.objects.select_related('employe').filter((Q(date_fin__gt=date.today()) | Q(date_fin=None)) & (Q(date_debut__lt=date.today()) | Q(date_debut=None)) & Q(poste=p)).exclude(supprime=True).exclude(poste__responsable=None).all()[0]
+
+        n.attr['label'] = u"%s %s\\n%s\\n%s" % (d.id, d.poste.nom, "%s %s" % (d.employe.nom.upper(), d.employe.prenom), d.poste.implantation)
 
     a.graph_attr['normalize'] = True
     a.graph_attr['level'] = 2