Rapports: trie des rapports en WIP
[auf_rh_dae.git] / project / lib.py
CommitLineData
58e9fdc2
OL
1# -*- encoding: utf-8 -*-
2
3import datamaster_modeles.models as ref
4import rh.models as rh
9d53bc73 5from operator import itemgetter
58e9fdc2
OL
6
7def get_employe_from_user(user):
8 """
9 Retourne un employé AUF (rh.Employe) à partir de son user Django.
10 """
11 try:
12 ref_employe = ref.Authentification.objects.get(courriel=user.email).id
13 employe = rh.Employe.objects.get(id=ref_employe.id)
14 ref_employe = ref.Employe.objects.get(id=employe.id)
15 employe.courriel = ref_employe.courriel
16 employe.tel_pro_poste = ref_employe.telephone_poste
17 employe.tel_pro_ip = ref_employe.telephone_ip
18 except:
19 #raise Exception(u"L'employé avec le courriel %s n'a pas été trouvé dans le référentiel." % user.email)
20 employe = rh.Employe.objects.none()
21 return employe
22
23def get_employe_from_id(id):
24 """
25 Retourne un employé AUF (rh.Employe) à partir de son id.
26 """
27 try:
28 employe = rh.Employe.objects.get(id=id)
29 employe.courriel = ref.Employe.objects.get(id=employe.id).courriel
30 except:
31 employe = rh.Employe.objects.none()
32 return employe
33
34def safe_create_groupe(name=None, id=None):
35 """
36 Création d'un groupe prédéfini. Retourne None, quand la création
37 ne peut se faire. (C'est le cas au syncdb, quand la table de groupe
38 n'a pas été créée encore).
39 """
40 try:
41 if name:
42 grp, created = Group.objects.get_or_create(name=name)
43 elif id :
44 grp, created = Group.objects.get_or_create(id=id)
45 except:
46 return None
47 return grp
9d53bc73
JPC
48
49def multikeysort(items, columns):
50 """ Trie un une liste de tableau à la Django (-column pour descandant, column pour ascendant)
51 http://stackoverflow.com/questions/1143671/python-sorting-list-of-dictionaries-by-multiple-keys
52 """
53 comparers = [ ((itemgetter(col[1:].strip()), -1) if col.startswith('-') else (itemgetter(col.strip()), 1)) for col in columns]
54 def comparer(left, right):
55 for fn, mult in comparers:
56 result = cmp(fn(left), fn(right))
57 if result:
58 return mult * result
59 else:
60 return 0
61 return sorted(items, cmp=comparer)