from datetime import date
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.template import RequestContext
from project.lib import get_employe_from_id
from rh import models as rh
+from rh.lib import calc_remun
# homes
@login_required
c = {}
employe = rc['this_employe']
-
- # dossiers en cours et passés
- today = date.today()
- dossiers = employe.dossiers.all().order_by('-date_fin')
- dossiers_passes = dossiers.filter(date_fin__lt=today)
- dossiers_futurs = dossiers.filter(date_debut__gt=today)
- dossiers_p_f = dossiers_passes | dossiers_futurs
- ids_dossiers_p_f = [d.id for d in dossiers_p_f]
- dossiers_encours = dossiers.exclude(id__in=ids_dossiers_p_f)
-
- for d in dossiers_passes:
- d.archive = True
-
+
c['user'] = request.user
c['employe'] = employe
- c['dossiers'] = dossiers.count()
- c['dossiers_passes'] = dossiers_passes
- c['dossiers_encours'] = dossiers_encours
return render_to_response('rh/profil.html', c, rc)
# employes
@login_required
def employes_liste(request):
"""Liste des employés."""
- employes = rh.Employe.objects.all()
+ today = date.today()
+ employes = rh.Employe.objects \
+ .filter(actif=True, supprime=False) \
+ .filter(dossiers__actif=True, dossiers__supprime=False) \
+ .exclude(dossiers__date_debut__gt=today) \
+ .exclude(dossiers__date_fin__lt=today) \
+ .order_by('nom')
c = {
'user':request.user,
'employes':employes,
'employe':employe,
}
return render_to_response('rh/employe.html', c, RequestContext(request))
+
+
+# Rapports
+
+@login_required
+def rapports_poste(request):
+
+ lookup_params = dict(request.GET.items())
+
+ comble = 'all'
+
+ for key, value in lookup_params.items():
+ if not isinstance(key, str):
+ # 'key' will be used as a keyword argument later, so Python
+ # requires it to be a string.
+ del lookup_params[key]
+ lookup_params[smart_str(key)] = value
+
+ if key == 'comble':
+ comble = value
+ del lookup_params[key]
+
+ postes = rh.Poste.actifs.select_related('implantation').all()
+ postes = postes.filter(**lookup_params)
+
+ poste_ids = set([p.pk for p in postes])
+
+ dossiers = rh.Dossier.objects.select_related('poste', 'employe').filter(poste__in=poste_ids)
+
+ employes = dict((d.poste.id, d.employe) for d in dossiers)
+
+ out = []
+
+ for p in postes:
+ employe = employes.get(p.id)
+
+ if comble == 'c' and not employe:
+ continue
+
+ if comble == 'n' and employe:
+ continue
+
+ line = {}
+ out.append(line)
+
+ line['id'] = p.id
+ line['nom'] = p.nom
+ line['implantation'] = p.implantation.nom
+ if employe:
+ line['employe_id'] = employe.id
+ line['employe_nom'] = employe.nom
+ line['employe_prenom'] = employe.prenom
+
+ c = {
+ 'title': 'Rapport des postes',
+ 'postes': out,
+ }
+
+ return render_to_response('rh/rapports/postes.html', c, RequestContext(request))
+
+
+def rapports_contrat(request):
+
+ lookup_params = dict(request.GET.items())
+
+ for key, value in lookup_params.items():
+ if not isinstance(key, str):
+ # 'key' will be used as a keyword argument later, so Python
+ # requires it to be a string.
+ del lookup_params[key]
+ lookup_params[smart_str(key)] = value
+
+ contrats = rh.Contrat.objects.select_related('dossier', 'dossier__poste', 'dossier__poste__implantation', 'type_contrat', 'dossier__employe').all()
+ contrats = contrats.filter(**lookup_params)
+
+ c = {
+ 'title': 'Rapport des contrats',
+ 'contrats': contrats,
+ }
+
+ return render_to_response('rh/rapports/contrats.html', c, RequestContext(request))
+
+
+def rapports_remuneration(request):
+
+ lookup_params = dict(request.GET.items())
+
+ for key, value in lookup_params.items():
+ if not isinstance(key, str):
+ # 'key' will be used as a keyword argument later, so Python
+ # requires it to be a string.
+ del lookup_params[key]
+ lookup_params[smart_str(key)] = value
+
+ employes = rh.Employe.objects.all()
+ employes = employes.filter(**lookup_params)
+
+ output = []
+
+ for employe in employes:
+ line = {}
+ output.append(line)
+
+ dossiers = employe.dossiers.all()
+
+ remun = {}
+ remun_sum_euro = 0
+
+ for dossier in dossiers:
+ this_remun, this_remun_sum, this_remun_sum_euro = calc_remun(dossier)
+
+ for item in this_remun:
+ if item not in remun:
+ remun[item] = this_remun[item]
+ else:
+ remun[item][0] += this_remun[item][0]
+ remun[item][1] += this_remun[item][1]
+
+ remun_sum_euro += this_remun_sum_euro
+
+ line['remun_sum_euro'] = remun_sum_euro
+
+ for r in remun:
+ if r == u'Indemnité':
+ line['Indemnite'] = remun[r][1]
+ else:
+ line[r] = remun[r][1]
+
+ line['id'] = employe.id
+ line['nom'] = employe.nom
+ line['prenom'] = employe.prenom
+
+
+ c = {
+ 'title': 'Rapport de remuneration',
+ 'employes': output,
+ }
+
+ return render_to_response('rh/rapports/remuneration.html', c, RequestContext(request))
+
+def dossier_apercu(request, dossier_id):
+ c = {
+ 'is_popup' : request.GET.get('_popup', False),
+ 'dossier' : get_object_or_404(rh.Dossier, pk=dossier_id)
+
+ }
+ return render_to_response('admin/rh/dossier/apercu.html', c, RequestContext(request))