Browse Source

Filter item by loan date given in url

cecile 6 years ago
parent
commit
f5fbff9c4a
2 changed files with 29 additions and 7 deletions
  1. 28 6
      hardware_provisioning/models.py
  2. 1 1
      hardware_provisioning/views.py

+ 28 - 6
hardware_provisioning/models.py

@@ -1,6 +1,10 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import unicode_literals
+
+import datetime
+import pytz
+from datetime import datetime
 from django.db import models
 from django.db.models import Q
 from django.conf import settings
@@ -23,8 +27,8 @@ class ItemType(models.Model):
 
 
 class ItemQuerySet(models.QuerySet):
-    def _get_borrowed_pks(self):
-        return Loan.objects.running().values_list('item', flat=True)
+    def _get_borrowed_pks(self, at_date=None):
+        return Loan.objects.running(at_date).values_list('item', flat=True)
 
     def available(self):
         return self.exclude(
@@ -48,6 +52,16 @@ class ItemQuerySet(models.QuerySet):
         """
         return self.values('designation').annotate(count_item=Count('designation'))
 
+    def running(self, at_date=None):
+        """ Only item at a given date or deployed
+        """
+        if at_date is None:
+            at_date = timezone.now()
+
+        return self.filter(Q(pk__in=self._get_borrowed_pks(at_date)) |
+                           Q(deployed=True))
+
+    
 class Item(models.Model):
     type = models.ForeignKey(ItemType, verbose_name='type de matériel',
                              related_name='items')
@@ -130,13 +144,21 @@ class Item(models.Model):
 class LoanQuerySet(models.QuerySet):
 
     @staticmethod
-    def _running_filter():
+    def _running_filter(at_date=None):
+        if at_date is None:
+            at_date = timezone.now()
+        else:
+            # todo : change by default timezone in settings ?
+            at_date = pytz.timezone('Europe/Paris').localize(datetime.strptime(at_date, "%Y-%m-%d"))
         return (
+            # avant : prêt dont la date de fin > aujourd'hui | null
+            # maintenant : prêt dont la date de début est < date donnée
             models.Q(loan_date_end__gt=timezone.now()) |
-            models.Q(loan_date_end__isnull=True))
+            models.Q(loan_date_end__isnull=True) &
+            models.Q(loan_date__lt=at_date))
 
-    def running(self):
-        return self.filter(self._running_filter())
+    def running(self, at_date=None):
+        return self.filter(self._running_filter(at_date))
 
     def finished(self):
         return self.exclude(self._running_filter())

+ 1 - 1
hardware_provisioning/views.py

@@ -157,7 +157,7 @@ def item_deployed_count_json(request):
             return HttpResponseServerError("Incorrect date format, should be YYYY-MM-DD")
 
     # Get hardware deployed
-    itemsdeployed = list(Item.objects.unavailable().summary_item())
+    itemsdeployed = list(Item.objects.running(date).summary_item())
     for item in itemsdeployed:
         output.append({
             'Name' : item['designation'],