Hides expired bookings in the "My Bookings" Page 21/66621/4
authorParker Berberian <pberberian@iol.unh.edu>
Thu, 24 Jan 2019 15:25:30 +0000 (10:25 -0500)
committerParker Berberian <pberberian@iol.unh.edu>
Mon, 25 Feb 2019 18:38:20 +0000 (13:38 -0500)
This commit hides bookings that have ended from cluttering
the "My Bookings" page.

Change-Id: I0f98fbff97b1474e73a666aa0000e1923266fafb
Signed-off-by: Parker Berberian <pberberian@iol.unh.edu>
dashboard/src/account/views.py
dashboard/src/templates/account/booking_list.html

index 6f390fa..2b4eccb 100644 (file)
@@ -14,6 +14,7 @@ import urllib
 
 import oauth2 as oauth
 from django.conf import settings
+from django.utils import timezone
 from django.contrib import messages
 from django.contrib.auth import logout, authenticate, login
 from django.contrib.auth.decorators import login_required
@@ -21,7 +22,6 @@ from django.contrib.auth.mixins import LoginRequiredMixin
 from django.contrib.auth.models import User
 from django.urls import reverse
 from django.http import HttpResponse
-from django.utils import timezone
 from django.shortcuts import get_object_or_404
 from django.utils.decorators import method_decorator
 from django.views.generic import RedirectView, TemplateView, UpdateView
@@ -198,9 +198,17 @@ def account_booking_view(request):
     if not request.user.is_authenticated:
         return render(request, "dashboard/login.html", {'title': 'Authentication Required'})
     template = "account/booking_list.html"
-    bookings = list(Booking.objects.filter(owner=request.user).order_by("-start"))
-    collab_bookings = list(request.user.collaborators.all().order_by("-start"))
-    context = {"title": "My Bookings", "bookings": bookings, "collab_bookings": collab_bookings}
+    bookings = list(Booking.objects.filter(owner=request.user, end__gt=timezone.now()).order_by("-start"))
+    my_old_bookings = Booking.objects.filter(owner=request.user, end__lt=timezone.now()).order_by("-start")
+    collab_old_bookings = request.user.collaborators.filter(end__lt=timezone.now()).order_by("-start")
+    expired_bookings = list(my_old_bookings.union(collab_old_bookings))
+    collab_bookings = list(request.user.collaborators.filter(end__gt=timezone.now()).order_by("-start"))
+    context = {
+        "title": "My Bookings",
+        "bookings": bookings,
+        "collab_bookings": collab_bookings,
+        "expired_bookings": expired_bookings
+    }
     return render(request, template, context=context)
 
 
index e56b19e..ed59b81 100644 (file)
@@ -8,7 +8,7 @@
                 <h3>Booking {{booking.id}}</h3>
                 <ul class="list-group">
                     <li class="list-group-item">id: {{booking.id}}</li>
-                    <li class="list-group-item">lab: {{booking.resource.template.lab.lab_user.username}}</li>
+                    <li class="list-group-item">lab: {{booking.lab}}</li>
                     <li class="list-group-item">resource: {{booking.resource.template.name}}</li>
                     <li class="list-group-item">start: {{booking.start}}</li>
                     <li class="list-group-item">end: {{booking.end}}</li>
@@ -36,7 +36,7 @@
                 <ul class="list-group">
                     <li class="list-group-item">id: {{booking.id}}</li>
                     <li class="list-group-item">lab: {{booking.lab}}</li>
-                    <li class="list-group-item">resource: {{booking.resource_name}}</li>
+                    <li class="list-group-item">resource: {{booking.resource.template.name}}</li>
                     <li class="list-group-item">start: {{booking.start}}</li>
                     <li class="list-group-item">end: {{booking.end}}</li>
                     <li class="list-group-item">purpose: {{booking.purpose}}</li>
     {% endfor %}
     </div>
 
+    <h2>Expired Bookings
+        <i class="fa fa-fw fa-caret-down" onclick='toggle_display("expired_bookings");'></i>
+    </h2>
+    <div id="expired_bookings" class="card_container" style="display:none;">
+    {% for booking in expired_bookings %}
+        <div class="detail_card">
+            <div>
+                <h3>Booking {{booking.id}}</h3>
+                <ul class="list-group">
+                    <li class="list-group-item">id: {{booking.id}}</li>
+                    <li class="list-group-item">lab: {{booking.lab}}</li>
+                    <li class="list-group-item">resource: {{booking.resource.template.name}}</li>
+                    <li class="list-group-item">start: {{booking.start}}</li>
+                    <li class="list-group-item">end: {{booking.end}}</li>
+                    <li class="list-group-item">purpose: {{booking.purpose}}</li>
+                    <li class="list-group-item">owner: {{booking.owner.userprofile.email_addr}}</li>
+                </ul>
+            </div>
+            <a class="btn btn-primary" href="/booking/detail/{{booking.id}}/">Details</a>
+        </div>
+    {% endfor %}
+    </div>
 <script>
     var current_booking_id = -1;
     function cancel_booking(booking_id) {
         req.onerror = function() { alert("problem submitting form"); }
         req.send(formData);
     }
+
+    function toggle_display(elem_id){
+        var e = document.getElementById(elem_id);
+        if (e.style.display === "none"){
+            e.style.display = "grid";
+        } else {
+            e.style.display = "none";
+        }
+    }
 </script>
 <div class="modal fade" id="resModal" tabindex="-1" role="dialog" aria-labelledby="my_modal" aria-hidden="true">
     <div class="modal-dialog" style="width: 450px;" role="document">