#2777
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Thu, 15 Mar 2012 17:57:30 +0000 (13:57 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Thu, 15 Mar 2012 17:57:30 +0000 (13:57 -0400)
project/rh/change_list.py
project/rh/models.py
project/rh/views.py

index e46740e..d7253bb 100644 (file)
@@ -1,17 +1,13 @@
 import time, datetime
 from django.db.models import Q
 from django.conf import settings
-from django.contrib.admin.filterspecs import FilterSpec
 from django.contrib.admin.options import IncorrectLookupParameters
-from django.contrib.admin.util import quote, get_fields_from_path
 from django.contrib.admin.views.main import ChangeList as DjangoChangeList
-from django.contrib.admin.views.main import ALL_VAR, ORDER_VAR, ORDER_TYPE_VAR, PAGE_VAR, SEARCH_VAR, TO_FIELD_VAR, IS_POPUP_VAR, ERROR_FLAG, field_needs_distinct
+from django.contrib.admin.views.main import ALL_VAR, ORDER_VAR, \
+        ORDER_TYPE_VAR, SEARCH_VAR, TO_FIELD_VAR, IS_POPUP_VAR, field_needs_distinct
 from django.core.exceptions import SuspiciousOperation
-from django.core.paginator import InvalidPage
 from django.db import models
-from django.utils.encoding import force_unicode, smart_str
-from django.utils.translation import ugettext, ugettext_lazy
-from django.utils.http import urlencode
+from django.utils.encoding import smart_str
 import operator
 
 KEY_ANNEE = 'annee'
@@ -37,7 +33,6 @@ class RechercheTemporelle(object):
     def __init__(self, params=params, model=model):
         self.model = model
         self.params = params
-        #self.params = dict(request.GET.items())
 
     def get_prefix(self):
         klass = getattr(self, "model_admin", self)
@@ -101,7 +96,7 @@ class RechercheTemporelle(object):
                 continue
         return params
 
-    def filter_temporel(self, qs):
+    def get_q_temporel(self, qs):
         q = Q()
         prefix = self.get_prefix()
         borne_gauche = None
@@ -137,8 +132,7 @@ class RechercheTemporelle(object):
                 elif v == STATUT_INCONNU:
                     q = q & self.get_q_inconnu(prefix)
         q_range = self.get_q_range(prefix, borne_gauche, borne_droite)
-        qs = qs.filter(q & q_range).distinct()
-        return qs
+        return q & q_range
 
 RechercheTemporelle.get_query_string = DjangoChangeList.get_query_string.im_func
 
@@ -193,10 +187,13 @@ class ChangeList(DjangoChangeList, RechercheTemporelle):
                 raise SuspiciousOperation(
                     "Filtering by %s not allowed" % key
                 )
+        
+        q_temporel = self.get_q_temporel(qs)
+        q = Q(**lookup_params) & q_temporel
 
         # Apply lookup parameters from the query string.
         try:
-            qs = qs.filter(**lookup_params)
+            qs = qs.filter(q)
         # Naked except! Because we don't have any other way of validating "params".
         # They might be invalid if the keyword arguments are incorrect, or if the
         # values are not in the correct type, so we might get FieldError, ValueError,
@@ -205,7 +202,6 @@ class ChangeList(DjangoChangeList, RechercheTemporelle):
         except:
             raise IncorrectLookupParameters
 
-        qs = self.filter_temporel(qs)
 
         # Use select_related() if one of the list_display options is a field
         # with a relationship and the provided queryset doesn't already have
@@ -253,7 +249,7 @@ class ChangeList(DjangoChangeList, RechercheTemporelle):
                     if field_needs_distinct(f):
                         use_distinct = True
                         break
-
+        
         if use_distinct:
             return qs.distinct()
         else:
index eef6db5..cb1776c 100644 (file)
@@ -428,19 +428,22 @@ class Employe(AUFMetadata):
         params = {KEY_STATUT: STATUT_INACTIF, }
         search = RechercheTemporelle(params, self.__class__)
         search.purge_params(params)
-        return search.filter_temporel(self.rh_dossiers)
+        q = search.get_q_temporel(self.rh_dossiers)
+        return self.rh_dossiers.filter(q)
 
     def dossiers_futurs(self):
         params = {KEY_STATUT: STATUT_FUTUR, }
         search = RechercheTemporelle(params, self.__class__)
         search.purge_params(params)
-        return search.filter_temporel(self.rh_dossiers)
+        q = search.get_q_temporel(self.rh_dossiers)
+        return self.rh_dossiers.filter(q)
 
     def dossiers_encours(self):
         params = {KEY_STATUT: STATUT_ACTIF, }
         search = RechercheTemporelle(params, self.__class__)
         search.purge_params(params)
-        return search.filter_temporel(self.rh_dossiers)
+        q = search.get_q_temporel(self.rh_dossiers)
+        return self.rh_dossiers.filter(q)
 
     def postes_encours(self):
         postes_encours = set()
index 0d0ca46..914b269 100644 (file)
@@ -2,13 +2,10 @@
 
 from datetime import date
 from itertools import izip
-try:
-    import networkx as nx
-except:
-    pass
 
 import pygraphviz as pgv
 
+from django.core.urlresolvers import reverse
 from django.db.models import Q
 from django.contrib.auth.decorators import login_required
 from django.utils.encoding import smart_str
@@ -138,6 +135,14 @@ def rapports_poste(request):
 @login_required
 @drh_or_admin_required
 def rapports_contrat(request):
+    if 'HTTP_REFERER' in request.META.keys():
+                referer = request.META['HTTP_REFERER']
+                referer = "/".join(referer.split('/')[3:])
+                referer = "/%s" % referer.split('?')[0]
+                if referer != reverse('rhr_contrats'):
+                    params = request.GET.copy()
+                    params.update({'statut': 'Actif'})
+                    request.GET = params
 
     lookup_params = dict(request.GET.items())
     if 'ot' in lookup_params:
@@ -156,8 +161,9 @@ def rapports_contrat(request):
 
     cl = RechercheTemporelle(dict(request.GET.items()), rh.Contrat)
     lookup_params = cl.purge_params(lookup_params)
-    contrats = contrats.filter(**lookup_params).exclude(dossier__employe__supprime=1)
-    contrats = cl.filter_temporel(contrats)
+    q_temporel = cl.get_q_temporel(contrats)
+    q = Q(**lookup_params) & q_temporel
+    contrats = contrats.filter(q).exclude(dossier__employe__supprime=1)
 
     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']))