from django import forms
from django.core.urlresolvers import reverse
from django.contrib import admin
+from django.contrib.admin.views.main import ChangeList as DjangoChangeList
from django.conf import settings
from django.db.models import Q
from django.template.defaultfilters import date
import filters
+
+class ChangeList(DjangoChangeList):
+
+ def __init__(self, *args, **kwargs):
+ super(ChangeList, self).__init__(*args, **kwargs)
+
+ def get_query_set(self):
+ old = self.params.copy()
+ date_debut = None
+ date_fin = None
+ for k, v in self.params.items():
+ if k.startswith('date_debut'):
+ date_debut = v
+ del self.params[k]
+ elif k.startswith('date_fin'):
+ date_fin = v
+ del self.params[k]
+
+ qs = super(ChangeList, self).get_query_set()
+
+ if date_fin is None and date_debut is not None:
+ date_fin = date_debut
+ if date_debut is None and date_fin is not None:
+ date_debut = date_fin
+
+ if date_debut is not None and date_fin is not None:
+ q_left = (Q(date_debut__isnull=True) | Q(date_debut__lte=date_debut)) & (Q(date_fin__gte=date_debut) & Q(date_fin__lte=date_fin))
+ q_right = (Q(date_fin__isnull=True) | Q(date_fin__gte=date_fin)) & (Q(date_debut__gte=date_debut) & Q(date_debut__lte=date_fin))
+ q_both = Q(date_fin__isnull=True) | Q(date_fin__gte=date_fin) & (Q(date_debut__isnull=True) | Q(date_debut__lte=date_debut))
+ qs = qs.filter(q_left | q_right | q_both)
+
+
+
+ self.params = old
+ return qs
+
# Override of the InlineModelAdmin to support the link in the tabular inline
class LinkedInline(admin.options.InlineModelAdmin):
template = "admin/linked.html"
):
return True
+ def get_changelist(self, request, **kwargs):
+ return ChangeList
def _id(self, d):
apercu_link = u"""<a title="Aperçu du dossier" onclick="return showAddAnotherPopup(this);" href='%s'><img src="%simg/loupe.png" /></a>""" % \
def _occupe_par(self, obj):
"""Formatte la méthode Poste.occupe_par() pour l'admin"""
output = u"Vacant"
- if obj.date_fin is not None and obj.date_fin < datetime.datetime.now():
+ if obj.date_fin is not None and obj.date_fin < datetime.date.now():
return u"s/o"
employes = obj.occupe_par()
if employes:
import datetime
from django.contrib.admin.filterspecs import FilterSpec
+year = datetime.date.today().year
+start = year + 5
+end = year - 5
+
class DateDebutFieldFilterSpec(FilterSpec):
def __init__(self, f, request, params, model, model_admin,
field_path=None):
today = datetime.date.today()
self.links = [
(u"Toutes" ,{}),
- (u"Cette année", {'%s__gte' % self.field_path: "%s-01-01" % str(today.year), }),
- (u"Sans valeur" ,{'%s__isnull' % self.field_path: str(True)}),
]
- for i in range(1, 10):
- t = (today.year-i, {
- '%s__gte' % self.field_path: "%s-01-01" % str(today.year-i),
+ annees = [i for i in range(start, end, -1)]
+ for i in annees:
+ t = (i, {
+ '%s__gte' % self.field_path: "%s-01-01" % str(i),
})
self.links.append(t)
def title(self):
- return self.field.verbose_name
+ return "Date borne gauche"
def choices(self, cl):
for title, param_dict in self.links:
if k.startswith(self.field_generic)])
today = datetime.date.today()
self.links = [
- (u"Cette année", {'%s__lte' % self.field_path: "%s-12-31" % str(today.year)}),
(u"Toutes" ,{}),
- (u"Sans valeur" ,{'%s__isnull' % self.field_path: str(True)}),
]
- for i in range(1, 10):
- t = (today.year-i, {
- '%s__lte' % self.field_path: "%s-12-31" % str(today.year-i),
+ annees = [i for i in range(start, end, -1)]
+ for i in annees:
+ t = (i, {
+ '%s__lte' % self.field_path: "%s-12-31" % str(i),
})
self.links.append(t)
def title(self):
- return self.field.verbose_name
+ return "Date borne droite"
def choices(self, cl):
for title, param_dict in self.links:
{% load i18n %}
<h3>{% blocktrans with title as filter_title %} By {{ filter_title }} {% endblocktrans %}</h3>
-{% if choices|length > 2 %}
<select dir="rtl" style="width: 95%;" onchange="window.location=window.location.pathname+this.options[this.selectedIndex].value">
{% for choice in choices %}
<option{% if choice.selected %} selected="selected"{% endif %}
value="{{ choice.query_string|iriencode }}">{{ choice.display }}</option>
{% endfor %}
</select>
-
-{% else %}
-<ul>
-{% for choice in choices %}
- <li{% if choice.selected %} class="selected"{% endif %}>
- <a href="{{ choice.query_string|iriencode }}">{{ choice.display }}</a></li>
-{% endfor %}
-</ul>
-{% endif %}
obj.date_creation = datetime.datetime.now()
obj.user_modification = request.user
obj.date_modification = datetime.datetime.now()
- initial = getattr(form, 'initial', None)
- if initial:
- if form.initial['actif'] is True and obj.actif is False:
- obj.user_desactivation = request.user
- obj.date_desactivation = datetime.datetime.now()
- if form.initial['actif'] is False and obj.actif is True:
- obj.user_activation = request.user
- obj.date_activation = datetime.datetime.now()
obj.save()
def has_metadata(self, instance):