from rh.lib import calc_remun
from rh.decorators import drh_or_admin_required
from rh.templatetags.rapports import SortHeaders
-from project.lib import multikeysort
# pas de reference a DAE devrait etre refactorisé
from dae.utils import get_employe_from_user
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
- else:
- line['employe_id'] = None
- line['employe_nom'] = None
- line['employe_prenom'] = None
+ #postes = rh.Poste.actifs.select_related('implantation', 'dossier').all()
+ postes = rh.Poste.actifs.select_related('implantation') \
+ .extra(select={'employe_id':'select group_concat(employe) from rh_dossier where poste=rh_poste.id and rh_dossier.actif = 1'}) \
+ .extra(select={'employe_nom':'select group_concat(rh_employe.nom) from rh_dossier inner join rh_employe on rh_dossier.employe = rh_employe.id where poste=rh_poste.id and rh_dossier.actif = 1'}) \
+ .extra(select={'employe_prenom':'select group_concat(rh_employe.prenom) from rh_dossier inner join rh_employe on rh_dossier.employe = rh_employe.id where poste=rh_poste.id and rh_dossier.actif = 1'})
+ postes = postes.filter(**lookup_params)
if 'o' in request.GET:
- try:
- out = multikeysort(out, ["%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o'])])
- except KeyError:
- raise Http404
+ postes = postes.order_by("%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o']))
+
headers = [
("id", u"# du poste"),
("nom", u"Nom du poste"),
- ("implantation", u"Implantation"),
+ ("implantation__id", u"Implantation"),
("employe_id", u"# de l'employé"),
("employe_nom", u"Nom"),
("employe_prenom", u"Prénom"),
h = SortHeaders(request, headers, order_field_type="ot", order_field="o")
c = {
'title': 'Rapport des postes',
- 'postes': out,
- 'count': len(out),
- 'headers': list(h.headers())
+ 'postes': postes,
+ 'count': len(postes),
+ 'headers': list(h.headers()),
}
return render_to_response('rh/rapports/postes.html', c, RequestContext(request))
def rapports_contrat(request):
lookup_params = dict(request.GET.items())
+ if 'ot' in lookup_params:
+ del lookup_params['ot']
+ if 'o' in lookup_params:
+ del lookup_params['o']
for key, value in lookup_params.items():
if not isinstance(key, str):
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 = rh.Contrat.objects.select_related('dossier', 'dossier__poste', 'dossier__poste__implantation', 'type_contrat', 'dossier__employe')
contrats = contrats.filter(**lookup_params)
+ if 'o' in request.GET:
+ contrats = contrats.order_by("%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o']))
employes = set([c.dossier.employe_id for c in contrats])
+ headers = [
+ ("dossier__employe__id", u"# de l'employé"),
+ ("dossier__employe__nom", u"Nom"),
+ ("dossier__employe__prenom", u"Prénom"),
+ ("type_contrat__nom", u"Poste"),
+ ("type_contrat__nom", u"Type de contrat"),
+ ("date_debut", u"Date début"),
+ ("date_fin", u"Date fin"),
+ ]
+ h = SortHeaders(request, headers, order_field_type="ot", order_field="o")
+
c = {
'title': 'Rapport des contrats',
'contrats': contrats,
'count': len(contrats),
'count_employe' : len(employes),
+ 'headers': list(h.headers()),
}
return render_to_response('rh/rapports/contrats.html', c, RequestContext(request))