devise archive
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 15 Feb 2012 20:15:09 +0000 (15:15 -0500)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 15 Feb 2012 20:15:09 +0000 (15:15 -0500)
project/rh/admin.py
project/rh/managers.py
project/rh/models.py

index a87fbce..254cd0f 100644 (file)
@@ -44,47 +44,34 @@ class DateRangeMixin(object):
         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}))
@@ -271,7 +258,7 @@ class CommentaireAdmin(admin.ModelAdmin):
 
 
 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, {
@@ -279,6 +266,21 @@ class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
         }),
     )
 
+    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'
index e2a3916..3e8626c 100644 (file)
@@ -122,6 +122,13 @@ class PosteComparaisonManager(SecurityManager):
     use_for_related_fields = True
     prefixe_implantation = "implantation__region"
 
+
 class DossierComparaisonManager(SecurityManager):
     use_for_related_fields = True
     prefixe_implantation = "implantation__region"
+
+
+class DeviseManager(NoDeleteManager):
+
+    def get_query_set(self):
+        return super(DeviseManager, self).get_query_set().filter(archive=False)
index 4061c94..3bb46e0 100644 (file)
@@ -14,7 +14,7 @@ from auf.django.metadata.models import AUFMetadata
 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.
@@ -1149,6 +1149,9 @@ class ValeurPoint(ValeurPoint_):
 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)