Refactoring, supression de networkx
[auf_rh_dae.git] / project / rh / views.py
index 31aa3f3..875c3b7 100644 (file)
@@ -2,7 +2,7 @@
 
 from datetime import date
 from itertools import izip
-import networkx as nx
+import pygraphviz as pgv
 
 from django.db.models import Q
 from django.contrib.auth.decorators import login_required
@@ -71,35 +71,6 @@ def employe(request, id):
     return render_to_response('rh/employe.html', c, RequestContext(request))
 
 
-# Rapports
-
-@login_required
-@drh_or_admin_required
-def rapports_postes_hierarchie(request):
-
-    c = {}
-    graph = nx.DiGraph()
-    postes = rh.Poste.objects.all()
-    postes_id = dict((p.id, p) for p in postes)
-    graph.add_node(p for p in postes)
-
-    for p in postes:
-        if p.responsable_id != p.id:
-            graph.add_edge(postes_id[p.responsable_id], p)
-
-    c['postes'] = nx.to_dict_of_lists(graph)
-
-    return render_to_response('rh/rapports/postes_hierarchie.html',
-            c,
-            RequestContext(request))
-
-
-@login_required
-@drh_or_admin_required
-def hierarchie_poste(request):
-    pass
-
-
 @login_required
 @drh_or_admin_required
 def rapports_poste(request):
@@ -485,23 +456,20 @@ def organigrammes_employe(request, id, level="all"):
 
     e = dossiers_by_poste[poste.id].employe
     name = u"Organigramme de [%s] %s %s" % (e.id, e.nom.upper(), e.prenom)
-    graph = nx.DiGraph()
+    graph = pgv.AGraph()
 
     if rh.Poste.objects.filter(responsable=poste).count() > 0:
-        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()
-
-        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)
+        postes_handle = [poste]
+        while postes_handle:
+            postes_handle = 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)) ).filter(responsable__in=postes_handle).exclude(supprime=True).exclude(responsable=None).all()
 
-        for p in postes:
-            if p.responsable_id != p.id:
-                graph.add_edge(dossiers_by_poste[p.responsable_id].poste_id, p.id)
+            for p in postes_handle:
+                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)
     else:
         graph.add_node(poste.id)
 
-    
     if level != "all":
         postes_niveau = [poste.id]
         for niveau in range(int(level)):
@@ -514,7 +482,7 @@ def organigrammes_employe(request, id, level="all"):
                     if graph.has_node(p):
                         graph.remove_node(p)
 
-    a = nx.to_agraph(graph)
+    a = graph
     a.name = name.encode('ascii', 'xmlcharrefreplace')
 
     poste_remontant = poste