fix employé échus ou sans contrats
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 24 Jul 2012 15:14:53 +0000 (11:14 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 24 Jul 2012 15:14:53 +0000 (11:14 -0400)
project/rh/managers.py
project/rh/templates/rh/rapports/employes_sans_contrat.html
project/rh/views.py

index ae69de8..5a07d71 100644 (file)
@@ -3,7 +3,7 @@
 from datetime import date
 
 from django.db import models
-from django.db.models import Q
+from django.db.models import Q, Max
 from django.db.models.query import QuerySet
 
 from project import groups
@@ -127,6 +127,16 @@ class DossierManager(SecurityManager):
     def actifs(self, *args, **kwargs):
         return self.get_query_set().actifs(*args, **kwargs)
 
+    def sans_contrats_ou_echus(self, *args, **kwargs):
+        app = self.model._meta.app_label
+        sql = """
+        SELECT D.id FROM rh_dossier AS D
+        LEFT JOIN rh_contrat AS C ON D.id = C.dossier AND C.date_debut =
+            (SELECT MAX(date_debut) FROM rh_contrat WHERE dossier=D.id)
+        WHERE (D.date_fin > '%(today)s' OR D.date_fin IS NULL) AND (C.id IS NULL OR C.date_fin < '%(today)s')
+        """ % {'today': date.today()}
+        ids = [d.id for d in self.raw(sql)]
+        return self.get_query_set().filter(id__in=ids).filter(*args, **kwargs)
 
 class RemunerationQuerySet(ActifsQuerySet):
 
index 813d7af..56af714 100644 (file)
@@ -17,8 +17,8 @@
 {% block contentrapport %}
 <div id="changelist-filter">
   <h2>{% trans 'Filter' %}</h2>
-  {% filter_region_contrat %}
-  {% filter_implantation_contrat %}
+  {% filter_region_dossier %}
+  {% filter_implantation_dossier %}
 </div>
 
 <table id="result_list" class="results">
index 00370cd..62b66f3 100644 (file)
@@ -164,33 +164,39 @@ def rapports_employes_sans_contrat(request):
 
     # régionalisation
     user_groups = [g.name for g in request.user.groups.all()]
-    q_region = Q()
     if groups.CORRESPONDANT_RH in user_groups or\
        groups.ADMINISTRATEURS in user_groups or\
        groups.DIRECTEUR_DE_BUREAU in user_groups:
         employe = get_employe_from_user(request.user)
-        q_region = Q(poste__implantation__region=employe.implantation.region)
+        lookup_params['poste__implantation__region'] = employe.implantation.region
 
     # contrats échus
-    contrats_echus = rh.Contrat.objects.filter(
-            date_fin__lt=date.today()
-        ).filter(
-            **lookup_params
-        )
+    #contrats_echus = rh.Contrat.objects.filter(
+    #        date_fin__lt=date.today()
+    #    ).filter(
+    #        **lookup_params
+    #    )
+
+    ## dossiers en cours sans contrat
+    #dossiers = rh.Dossier.objects.filter(q_region & (
+    #        Q(date_fin=None) | Q(date_fin__gt=date.today())),
+    #    ).exclude(
+    #        date_debut__gt=date.today()
+    #    ).filter(
+    #        # sans contrat | contrat échu
+    #        Q(rh_contrats=None) | Q(rh_contrats__in=contrats_echus)
+    #    ).distinct()
+
+    ## employés sans contrat ou contrats échus
+    #employes = rh.Employe.objects.filter(rh_dossiers__in=dossiers)  \
+    #    .distinct().count()
+    
+    dossiers = rh.Dossier.objects.sans_contrats_ou_echus(**lookup_params)
+    for d in dossiers:
+        print d
 
-    # dossiers en cours sans contrat
-    dossiers = rh.Dossier.objects.filter(q_region & (
-            Q(date_fin=None) | Q(date_fin__gt=date.today())),
-        ).exclude(
-            date_debut__gt=date.today()
-        ).filter(
-            # sans contrat | contrat échu
-            Q(rh_contrats=None) | Q(rh_contrats__in=contrats_echus)
-        ).distinct()
-
-    # employés sans contrat ou contrats échus
-    employes = rh.Employe.objects.filter(rh_dossiers__in=dossiers)  \
-        .distinct().count()
+    dossiers_ids = [d.id for d in dossiers]
+    employes = rh.Employe.objects.filter(id__in=dossiers_ids).distinct().count()
 
     # tri
     if 'o' in request.GET: