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'),
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
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):
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)):
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