def _organigramme(self, obj):
l = []
- for d in obj.rh_dossiers.all().order_by('-date_debut'):
+ for d in rh.Dossier.objects.filter((Q(date_fin__gt=datetime.date.today()) | Q(date_fin=None)) & (Q(date_debut__lt=datetime.date.today()) | Q(date_debut=None)) ).filter(employe=obj.id).all():
poste = u"""<a title="Aperçu du poste"
href="%s"
onclick="return showAddAnotherPopup(this);"
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,
n.attr['style'] = 'filled'
n.attr['label'] = label.encode('ascii', 'xmlcharrefreplace')
- n.attr['href'] = reverse("admin:rh_employe_change", args=(d.employe_id,))
+ n.attr['href'] = reverse("admin:rh_poste_change", args=(d.poste_id,))
return graph
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'),
@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())
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()
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: