return ChangeList
class ChangeList(DjangoChangeList):
- PERIODE_CHOICE = ('', 'actuelle', 'passee', 'future')
def __init__(self, *args, **kwargs):
- self.annees = {'actuelle': 'actuelle', 'passee': 'passee', 'future': 'future'}
super(ChangeList, self).__init__(*args, **kwargs)
def get_query_set(self):
old = self.params.copy()
- periode = None
- annee = None
date_debut = None
date_fin = None
- today = datetime.date.today()
for k, v in self.params.items():
- if 'periode' == k:
- periode = self.params[k]
+ if 'date_debut' in k:
+ prefix_debut = "".join(k.split('date_debut')[0:-1]) + 'date_debut'
+ date_debut = v
del self.params[k]
- if 'annee' == k:
- annee = self.params[k]
+ elif 'date_fin' in k:
+ prefix_fin = "".join(k.split('date_fin')[0:-1]) + 'date_fin'
+ date_fin = v
del self.params[k]
- if 'date_debut' == k:
- date_debut = self.params[k]
- del self.params[k]
- if 'date_fin' == k:
- date_fin = self.params[k]
- del self.params[k]
-
qs = super(ChangeList, self).get_query_set()
- if periode == 'actuelle':
- qs = qs.filter(date_fin__exact=today, date_debut__exact=today).distinct()
- elif periode == 'passee':
- qs = qs.filter(date_fin__lt=today)
- elif periode == 'future':
- qs = qs.filter(date_debut__gt=today)
- elif annee:
- date_debut = datetime.date(int(annee), 01, 01)
- date_fin = datetime.date(int(annee), 12, 31)
-
- if date_debut and date_fin:
- prefix_debut = 'date_debut'
- prefix_fin = 'date_fin'
+
+ # hack pour spécifier un range
+ if date_fin is None and date_debut is not None:
+ date_fin = '2020-01-01'
+ prefix_fin = prefix_debut.replace('debut', 'fin')
+ if date_debut is None and date_fin is not None:
+ date_debut = '1000-01-01'
+ prefix_debut = prefix_fin.replace('fin', 'debut')
+
+ if date_debut is not None and date_fin is not None:
q_left = (Q(**{'%s__isnull' % prefix_debut : True}) | Q(**{'%s__lte' % prefix_debut : date_debut})) & (Q(**{'%s__gte' % prefix_fin : date_debut}) & Q(**{'%s__lte' % prefix_fin : date_fin}))
q_right = (Q(**{'%s__isnull' % prefix_fin : True}) | Q(**{'%s__gte' % prefix_fin : date_fin})) & (Q(**{'%s__gte' % prefix_debut : date_debut}) & Q(**{'%s__lte' % prefix_debut : date_fin}))
q_both = Q(**{'%s__isnull' % prefix_fin : True}) | Q(**{'%s__lte' % prefix_fin : date_fin}) & (Q(**{'%s__isnull' % prefix_debut : True}) | Q(**{'%s__gte' % prefix_debut : date_debut}))
class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
- list_display = ('code', 'nom', '_date_modification', 'user_modification',)
+ list_display = ('code', 'nom', '_date_modification', 'user_modification', '_archive',)
list_filter = ('archive', )
fieldsets = AUFMetadataAdminMixin.fieldsets + (
(None, {
}),
)
+ def queryset(self, request):
+ return rh.Devise._base_manager
+
+ def _archive(self, obj):
+ if obj.archive:
+ icon = 'no'
+ else:
+ icon = 'yes'
+ html = """<img alt="%s" src="%sadmin/img/admin/icon-%s.gif">""" % (obj.archive, settings.STATIC_URL, icon)
+ return html
+ _archive.short_description = u'Archivé'
+ _archive.admin_order_field = 'archive'
+ _archive.allow_tags = True
+
+
def _date_modification(self, obj):
return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
_date_modification.short_description = u'date modification'
from auf.django.metadata.managers import NoDeleteManager
import auf.django.references.models as ref
from validators import validate_date_passee
-from managers import PosteManager, DossierManager, DossierComparaisonManager, PosteComparaisonManager
+from managers import PosteManager, DossierManager, DossierComparaisonManager, PosteComparaisonManager, DeviseManager
# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe pour l'héritage.
class Devise(AUFMetadata):
"""Devise monétaire.
"""
+
+ objects = DeviseManager()
+
archive = models.BooleanField(verbose_name=u"Archivé", default=False)
code = models.CharField(max_length=10, unique=True)
nom = models.CharField(max_length=255)