# -*- encoding: utf-8 -*-
-from sendfile import sendfile
+
+import unicodedata
from datetime import date
from itertools import izip
-from base64 import b64encode
import networkx as nx
from django.db.models import Q
from django.contrib.auth.decorators import login_required
from django.utils.encoding import smart_str
-from django.shortcuts import redirect, render_to_response, get_object_or_404
+from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
-from django.http import Http404
from django.core.urlresolvers import reverse
from django.http import HttpResponse
from datamaster_modeles import models as ref
-from project.lib import get_employe_from_id
from rh import models as rh
from rh.lib import calc_remun
from dae.workflow import grp_drh, grp_correspondants_rh
from django.conf import settings
-# homes
+
@login_required
def profil(request):
"""Profil personnel de l'employé - éditable"""
rc = RequestContext(request)
c = {}
-
+
employe = rc['this_employe']
-
+
c['user'] = request.user
c['employe'] = employe
return render_to_response('rh/profil.html', c, rc)
-
-# employes
+
+
@login_required
def employes_liste(request):
"""Liste des employés."""
.exclude(dossiers__date_fin__lt=today) \
.order_by('nom')
c = {
- 'user':request.user,
- 'employes':employes,
+ 'user': request.user,
+ 'employes': employes,
}
- return render_to_response('rh/employes_liste.html', c, RequestContext(request))
-
+ return render_to_response('rh/employes_liste.html',
+ c,
+ RequestContext(request))
+
+
@login_required
def employe(request, id):
"""Information publique sur un employé."""
except:
employe = rh.Employe.objects.none()
c = {
- 'user':request.user,
- 'employe':employe,
+ 'user': request.user,
+ 'employe': employe,
}
return render_to_response('rh/employe.html', c, RequestContext(request))
c['postes'] = nx.to_dict_of_lists(graph)
- return render_to_response('rh/rapports/postes_hierarchie.html', c, RequestContext(request))
+ 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):
lookup_params = dict(request.GET.items())
- comble = 'all'
-
for key, value in lookup_params.items():
if key == 'o' or key == 'ot':
del lookup_params[key]
lookup_params[smart_str(key)] = value
if key == 'comble':
- comble = value
del lookup_params[key]
postes = rh.Poste.objects.select_related('implantation') \
lookup_params[smart_str(key)] = value
contrats = rh.Contrat.objects.select_related('dossier', 'dossier__poste', 'dossier__poste__implantation', 'type_contrat', 'dossier__employe')
-
+
cl = RechercheTemporelle(request, rh.Contrat)
lookup_params = cl.purge_params(lookup_params)
contrats = contrats.filter(**lookup_params).exclude(dossier__employe__supprime=1)
employes_query = employes_query.order_by("%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o']))
employes = {}
-
+
dossiers_en_cours = rh.Dossier.objects.filter(Q(date_fin=None) | Q(date_fin__gt=date.today()))
tous_contrats_echus = rh.Contrat.objects.filter(date_fin__lt=date.today(), dossier__in=dossiers_en_cours)
contrats = tous_contrats_echus.filter(**lookup_params).all()
if c.dossier.employe.id not in employes.keys():
employes[c.dossier.employe.id] = {'employe': c.dossier.employe, 'dossiers': []}
employes[c.dossier.employe.id]['dossiers'] += [c.dossier,]
-
+
headers = [
for s in rh.Service.objects.all():
postes = rh.Poste.objects.filter(service=s).all()
num_postes = rh.Poste.objects.filter(service=s).count()
- data.append({'service': s, 'num_postes': num_postes, 'postes': postes})
+ data.append({'service': s, 'num_postes': num_postes, 'postes': postes})
c['data'] = data
return render_to_response('rh/rapports/postes_service.html', c, RequestContext(request))
return render_to_response('admin/rh/poste/apercu.html', c, RequestContext(request))
def employe_apercu(request, employe_id):
- from dae.workflow import grp_drh, grp_correspondants_rh
employe = get_object_or_404(rh.Employe, pk=employe_id)
user_groups = request.user.groups.all()
-
- dernier_dossier = None
dossiers = None
if request.user.is_superuser or \
if grp_correspondants_rh in user_groups:
regions = [d.poste.implantation.region for d in employe.rh_dossiers.all()]
q = Q(employe=employe) & Q(implantation__region__in=regions)
-
- dossiers = rh.Dossier.objects.filter(employe=employe).order_by('-date_debut')
-
+
+ dossiers = rh.Dossier.objects.filter(q).order_by('-date_debut')
+
c = {
'is_popup' : request.GET.get('_popup', False),
'employe' : employe,
for n in a.nodes():
p = postes_by_id[int(n)]
d = rh.Dossier.objects.select_related('employe').filter((Q(date_fin__gt=date.today()) | Q(date_fin=None)) & (Q(date_debut__lt=date.today()) | Q(date_debut=None)) & Q(poste=p)).exclude(supprime=True).exclude(poste__responsable=None).all()[0]
- n.attr['label'] = "%s %s\\n%s\\n%s" % (d.id, d.poste.nom, "%s %s" % (d.employe.nom.upper(), d.employe.prenom), d.poste.implantation)
- #n.attr['label'] = str(n.attr['label'].encode('ascii', 'xmlcharrefreplace'))
+
+ label = u"%s %s\\n%s\\n%s" % (d.id, d.poste.nom, "%s %s" %
+ (d.employe.nom.upper(), d.employe.prenom),
+ d.poste.implantation)
+ label = unicodedata.normalize('NFKD', label).encode('ascii','ignore')
+ n.attr['label'] = label
n.attr['href'] = reverse("admin:rh_employe_change", args=(d.employe_id,))
- a.graph_attr['normalize'] = True
- a.graph_attr['level'] = 2
+ #a.graph_attr['normalize'] = True
+ #a.graph_attr['level'] = 2
a.layout(prog='dot')
svg = a.draw(format='svg')