Parcourir la source

Matériels : récupération du matériel déployé ou en prêt (WIP)

cecile il y a 6 ans
Parent
commit
99f27881d6

+ 5 - 0
hardware_provisioning/models.py

@@ -5,6 +5,7 @@ from django.db import models
 from django.db.models import Q
 from django.conf import settings
 from django.utils import timezone
+from django.db.models import Count, Q
 from coin.offers.models import OfferSubscription
 
 from .fields import MACAddressField
@@ -42,6 +43,10 @@ class ItemQuerySet(models.QuerySet):
             Q(pk__in=self._get_borrowed_pks()) |
             Q(deployed=True))
 
+    def summary_item(self):
+        """ Agregates as a count of items per designation
+        """
+        return self.values('designation').annotate(count_item=Count('designation'))
 
 class Item(models.Model):
     type = models.ForeignKey(ItemType, verbose_name='type de matériel',

+ 2 - 1
hardware_provisioning/urls.py

@@ -3,7 +3,7 @@
 from __future__ import unicode_literals
 from django.conf.urls import url
 from . import views
-
+from hardware_provisioning.views import item_deployed_count_json
 
 urlpatterns = [
     url(r'^$', views.loan_list, name='loan-list'),
@@ -12,4 +12,5 @@ urlpatterns = [
     url(r'^(?P<pk>[0-9]+)/return$', views.loan_return, name='loan-return'),
     url(r'^(?P<pk>[0-9]+)/transfer$', views.loan_transfer, name='loan-transfer'),
     url(r'^(?P<pk>[0-9]+)$', views.loan_detail, name='loan-detail'),
+    url(r'^api/count$', item_deployed_count_json),
 ]

+ 32 - 0
hardware_provisioning/views.py

@@ -7,12 +7,16 @@ from django.shortcuts import get_object_or_404, render, redirect
 from django.contrib.auth.decorators import login_required
 from django.contrib import messages
 from django.http import HttpResponseForbidden
+from django.http import JsonResponse, HttpResponseServerError
 from django.core.urlresolvers import reverse
 from django.utils import timezone
+from django.db.models import Q, Count
 
 from .forms import LoanDeclareForm, LoanTransferForm, LoanReturnForm
 from .models import Item, Loan
 
+import datetime
+import json
 
 @login_required
 def item_list(request):
@@ -134,3 +138,31 @@ def loan_list(request):
 @login_required
 def loan_detail(request, pk):
     return render(request, 'hardware_provisioning/detail.html', {})
+
+def __getitem__(self, key):
+    return self.item[key]
+
+@login_required
+def item_deployed_count_json(request):
+    output = []
+
+    # Get date form url, or set default
+    date = request.GET.get('date', datetime.date.today())
+
+    # Validate date type
+    if not isinstance(date, datetime.date):
+        try:
+            datetime.datetime.strptime(date, '%Y-%m-%d')
+        except ValueError, TypeError:
+            return HttpResponseServerError("Incorrect date format, should be YYYY-MM-DD")
+
+    # Get hardware deployed
+    itemsdeployed = list(Item.objects.unavailable().summary_item())
+    for item in itemsdeployed:
+        output.append({
+            'Name' : item['designation'],
+            'Count' : item['count_item']
+        })
+
+    # Return JSON
+    return JsonResponse(output, safe=False)