[#3165] Remplacé les filtres et protection par région pour des filtres et protections...
[auf_rh_dae.git] / project / rh / filters.py
1 # -*- encoding: utf-8 -*-
2
3 import datetime
4 from django.contrib.admin.filterspecs import FilterSpec
5
6 year = datetime.date.today().year
7 start = year + 5
8 end = year - 5
9
10 class DateDebutFieldFilterSpec(FilterSpec):
11 def __init__(self, f, request, params, model, model_admin,
12 field_path=None):
13 super(DateDebutFieldFilterSpec, self).__init__(f, request, params, model,
14 model_admin,
15 field_path=field_path)
16
17 self.field_generic = '%s__' % self.field_path
18
19 self.date_params = dict([(k, v) for k, v in params.items()
20 if k.startswith(self.field_generic)])
21 today = datetime.date.today()
22 self.links = [
23 (u"Toutes" ,{}),
24 (u"Aujourd'hui" ,{
25 '%s__gte' % self.field_path: str(today),
26 }),
27 ]
28 annees = [i for i in range(start, end, -1)]
29 for i in annees:
30 t = (i, {
31 '%s__gte' % self.field_path: "%s-01-01" % str(i),
32 })
33 self.links.append(t)
34
35 def title(self):
36 return "Date borne gauche"
37
38 def choices(self, cl):
39 for title, param_dict in self.links:
40 yield {'selected': self.date_params == param_dict,
41 'query_string': cl.get_query_string(
42 param_dict,
43 [self.field_generic]),
44 'display': title}
45
46 class DateFinFieldFilterSpec(FilterSpec):
47 def __init__(self, f, request, params, model, model_admin,
48 field_path=None):
49 super(DateFinFieldFilterSpec, self).__init__(f, request, params, model,
50 model_admin,
51 field_path=field_path)
52
53 self.field_generic = '%s__' % self.field_path
54
55 self.date_params = dict([(k, v) for k, v in params.items()
56 if k.startswith(self.field_generic)])
57 today = datetime.date.today()
58 self.links = [
59 (u"Toutes" ,{}),
60 (u"Aujourd'hui" ,{
61 '%s__lte' % self.field_path: str(today),
62 }),
63 ]
64 annees = [i for i in range(start, end, -1)]
65 for i in annees:
66 t = (i, {
67 '%s__lte' % self.field_path: "%s-12-31" % str(i),
68 })
69 self.links.append(t)
70
71 def title(self):
72 return "Date borne droite"
73
74 def choices(self, cl):
75 for title, param_dict in self.links:
76 yield {'selected': self.date_params == param_dict,
77 'query_string': cl.get_query_string(
78 param_dict,
79 [self.field_generic]),
80 'display': title}
81
82 FilterSpec.filter_specs.insert(0, (lambda f: f.name == 'date_debut', DateDebutFieldFilterSpec))
83 FilterSpec.filter_specs.insert(0, (lambda f: f.name == 'date_fin', DateFinFieldFilterSpec))