#1703 patch
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 11 Jul 2011 13:33:27 +0000 (09:33 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 11 Jul 2011 13:33:27 +0000 (09:33 -0400)
project/dae/forms.py
project/development.py

index 9f487c7..7b247ff 100644 (file)
@@ -1,6 +1,6 @@
 # -*- encoding: utf-8 -*-
 
-from django.db.models import Q
+from django.db.models import Q, Max
 from django import forms
 from django.forms.models import inlineformset_factory
 from django.contrib.admin import widgets as admin_widgets 
@@ -28,27 +28,32 @@ def _implantation_choices(obj, request):
     return [('', '----------')] + [(i.id, unicode(i), )for i in ref.Implantation.objects.filter(q)]
 
 def _employe_choices(obj, request):
-    q = Q(id_rh__isnull=True) & Q(id_rh__isnull=True)
-
     # TRAITEMENT NORMAL
     employe = get_employe_from_user(request.user)
     # SERVICE
     if is_user_dans_services_centraux(request.user):
-        q_region_service = Q(implantation1=employe.implantation) | Q(implantation2=employe.implantation)
+        q_dae_region_service = Q(poste__implantation=employe.implantation)
+        q_rh_region_service = Q(implantation1=employe.implantation) | Q(implantation2=employe.implantation)
     # REGION
     else:
-        q_region_service = Q(implantation1__region=employe.implantation.region) | Q(implantation2__region=employe.implantation.region) 
+        q_dae_region_service = Q(poste__implantation__region=employe.implantation.region)
+        q_rh_region_service = Q(implantation1__region=employe.implantation.region) | Q(implantation2__region=employe.implantation.region) 
     # TRAITEMENT DRH
     if grp_drh in request.user.groups.all():
-        q_region_service = Q()
-
-    # Construction de la liste des employés en puisant dans DAE (pas d'info) et dans rh_v1
-    # Pour le filtrage par région/service, on est obligé d'aller regarder le dossier rh_v1
-    # car l'information dans le modèle rh_v1.Employe n'existe pas.
-    dae_ = dae.Employe.objects.filter(id_rh__isnull=True)
-    copies = dae.Employe.objects.filter(Q(id_rh__isnull=False))
+        q_dae_region_service = Q()
+        q_rh_region_service = Q()
+
+    # On filtre les employes avec les droits régionaux et on s'assure que c'est bien le dernier dossier en date pour sortir l'employe
+    # On retient un employé qui travaille présentement dans la même région que le user connecté.
+    dossiers_regionaux_ids = [d.id for d in dae.Dossier.objects.filter(q_dae_region_service)]
+    employes_ids = [d['employe'] for d in dae.Dossier.objects.values('employe').annotate(dernier_dossier=Max('id')) if d['dernier_dossier'] in dossiers_regionaux_ids]
+    dae_employe = dae.Employe.objects.filter(id__in=employes_ids)
+    dae_ = dae_employe.filter(id_rh__isnull=True)
+    copies = dae_employe.filter(Q(id_rh__isnull=False))
     id_copies = [p.id_rh_id for p in copies.all()]
-    employes_ids = list(set([d.employe_id for d in rh.Dossier.objects.filter(q_region_service)]))
+
+    dossiers_regionaux_ids = [d.id for d in rh.Dossier.objects.filter(q_rh_region_service)]
+    employes_ids = [d['employe'] for d in rh.Dossier.objects.values('employe').annotate(dernier_dossier=Max('id')) if d['dernier_dossier'] in dossiers_regionaux_ids]
     rhv1 = rh.Employe.objects.filter(id__in=employes_ids).exclude(id__in=id_copies)
 
     def option_label(employe):
index 1a763c0..0c7f53f 100644 (file)
@@ -5,8 +5,8 @@ DEBUG=True
 TEMPLATE_DEBUG=DEBUG
 
 # Décommentez ces lignes pour activer la debugtoolbar
-#INTERNAL_IPS = ('127.0.0.1',)
-#INSTALLED_APPS += ('debug_toolbar',)
-#MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
+INTERNAL_IPS = ('127.0.0.1',)
+INSTALLED_APPS += ('debug_toolbar',)
+MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
 
 AUTH_PASSWORD_REQUIRED = False