Organigramme des employé: limitatino du niveau
authorJean-Philippe Caissy <jpcaissy@piji.ca>
Wed, 7 Mar 2012 20:09:11 +0000 (14:09 -0600)
committerJean-Philippe Caissy <jpcaissy@piji.ca>
Wed, 7 Mar 2012 20:09:11 +0000 (14:09 -0600)
project/rh/admin.py
project/rh/urls.py
project/rh/views.py

index 39c40b5..7462b98 100644 (file)
@@ -606,7 +606,7 @@ class EmployeProxyAdmin(EmployeAdmin):
              settings.STATIC_URL,
              reverse('admin:rh_poste_change', args=(d.poste.id,)))
             organigramme = u"""<a href="%s">Organigramme</a>""" % \
-                    (reverse('rho_employe', args=(d.poste.id,)))
+                    (reverse('rho_employe', args=(d.poste.id, "all")))
             link = u"""<li>%s - %s - %s : [%s] %s</li>""" % \
                 (poste, organigramme,
                  d.date_debut.year,
index b6e89fc..94c7721 100644 (file)
@@ -15,7 +15,7 @@ urlpatterns = patterns(
     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'),
-    url(r'^admin/rh/organigrammes/employe/(\d+)$', 'organigrammes_employe', name='rho_employe'),
+    url(r'^admin/rh/organigrammes/employe/(\d+)/(\d+|all)$', 'organigrammes_employe', name='rho_employe'),
     url(r'^admin/rh/organigrammes/service/(\d+)$', 'organigrammes_service', name='rho_service'),
     url(r'^admin/rh/organigrammes/implantation/(\d+)$', 'organigrammes_implantation', name='rho_implantation'),
     url(r'^admin/rh/organigrammes/bureau/(\d+)$', 'organigrammes_region', name='rho_region'),
index 7ddc518..d6d2466 100644 (file)
@@ -477,7 +477,7 @@ def employe_apercu(request, employe_id):
 
 @login_required
 @drh_or_admin_required
-def organigrammes_employe(request, id):
+def organigrammes_employe(request, id, level):
 
     poste = get_object_or_404(rh.Poste, pk=id)
     dossiers_by_poste = dict((d.poste_id, d) for d in rh.Dossier.objects.select_related('employe', 'poste').all())
@@ -485,7 +485,7 @@ def organigrammes_employe(request, id):
 
     e = dossiers_by_poste[poste.id].employe
     name = u"Organigramme de [%s] %s %s" % (e.id, e.nom.upper(), e.prenom)
-    graph = nx.DiGraph(name=name.encode('ascii', 'xmlcharrefreplace'))
+    graph = nx.DiGraph()
 
     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()
@@ -501,7 +501,21 @@ def organigrammes_employe(request, id):
     else:
         graph.add_node(poste.id)
 
+    
+    if level != "all":
+        postes_niveau = [poste.id]
+        for niveau in range(int(level)):
+            postes_niveau = [p.id for p in rh.Poste.objects.filter(responsable__in=postes_niveau).all()]
+
+        while postes_niveau:
+            postes_niveau = [p.id for p in rh.Poste.objects.filter(responsable__in=postes_niveau).all()]
+            if postes_niveau:
+                for p in postes_niveau:
+                    if graph.has_node(p):
+                        graph.remove_node(p)
+
     a = nx.to_agraph(graph)
+    a.name = name.encode('ascii', 'xmlcharrefreplace')
 
     poste_remontant = poste
     while poste_remontant.responsable_id: