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'
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)
continue
return params
- def filter_temporel(self, qs):
+ def get_q_temporel(self, qs):
q = Q()
prefix = self.get_prefix()
borne_gauche = None
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
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,
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
if field_needs_distinct(f):
use_distinct = True
break
-
+
if use_distinct:
return qs.distinct()
else:
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()
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
@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:
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']))