Refactoring, supression de networkx
authorJean-Philippe Caissy <jpcaissy@piji.ca>
Thu, 8 Mar 2012 17:01:46 +0000 (11:01 -0600)
committerJean-Philippe Caissy <jpcaissy@piji.ca>
Thu, 8 Mar 2012 17:01:46 +0000 (11:01 -0600)
project/rh/urls.py
project/rh/views.py

index caa2f8e..cf676a7 100644 (file)
@@ -11,7 +11,6 @@ urlpatterns = patterns(
     url(r'^admin/rh/rapports/postes_par_service$', 'rapports_postes_service', name='rhr_postes_service'),
     url(r'^admin/rh/rapports/postes_par_implantation$', 'rapports_postes_implantation', name='rhr_postes_implantation'),
     url(r'^admin/rh/rapports/postes_modelisation$', 'rapports_postes_modelisation', name='rhr_postes_modelisation'),
-    url(r'^admin/rh/rapports/postes_hierarchie$', 'rapports_postes_hierarchie', name='rhr_postes_hierarchie'),
     url(r'^admin/rh/dossier/(\d+)/apercu/$', 'dossier_apercu', name='dossier_apercu'),
     url(r'^admin/rh/employe/(\d+)/apercu/$', 'employe_apercu', name='employe_apercu'),
     url(r'^admin/rh/poste/(\d+)/apercu/$', 'poste_apercu', name='poste_apercu'),
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