Able to delete configurations and view lab details 18/69818/3
authorsms1097 <ssmith@iol.unh.edu>
Thu, 19 Mar 2020 21:08:12 +0000 (17:08 -0400)
committersms1097 <ssmith@iol.unh.edu>
Tue, 24 Mar 2020 20:31:09 +0000 (16:31 -0400)
Change-Id: Ib15c86d84f4cc7e7745551889ce91c89b5de46e2

Signed-off-by: Sean Smith <ssmith@iol.unh.edu>
Change-Id: Id6748c6bea67773a861921394d88579730246598

src/account/views.py
src/dashboard/views.py
src/templates/base/account/configuration_list.html
src/templates/base/account/resource_list.html

index a8bb02b..0135993 100644 (file)
@@ -29,6 +29,7 @@ from django.shortcuts import render
 from jira import JIRA
 from rest_framework.authtoken.models import Token
 
+
 from account.forms import AccountSettingsForm
 from account.jira_util import SignatureMethod_RSA_SHA1
 from account.models import UserProfile
@@ -177,20 +178,15 @@ def account_resource_view(request):
     if not request.user.is_authenticated:
         return render(request, "dashboard/login.html", {'title': 'Authentication Required'})
     template = "account/resource_list.html"
-    resources = ResourceTemplate.objects.filter(
-        owner=request.user).prefetch_related("configbundle_set")
-    mapping = {}
-    resource_list = []
-    booking_mapping = {}
-    for grb in resources:
-        resource_list.append(grb)
-        mapping[grb.id] = [{"id": x.id, "name": x.name} for x in grb.configbundle_set.all()]
-        if Booking.objects.filter(resource__template=grb, end__gt=timezone.now()).exists():
-            booking_mapping[grb.id] = "true"
+
+    active_bundles = [book.bundle for book in Booking.objects.filter(
+        owner=request.user, end__gte=timezone.now())]
+    active_resources = [bundle.template.id for bundle in active_bundles]
+    resource_list = list(ResourceTemplate.objects.filter(owner=request.user))
+
     context = {
         "resources": resource_list,
-        "grb_mapping": mapping,
-        "booking_mapping": booking_mapping,
+        "active_resources": active_resources,
         "title": "My Resources"
     }
     return render(request, template, context=context)
@@ -260,7 +256,7 @@ def configuration_delete_view(request, config_id=None):
     config = get_object_or_404(ResourceTemplate, pk=config_id)
     if not request.user.id == config.owner.id:
         return HttpResponse('no')  # 403?
-    if Booking.objects.filter(config_bundle=config, end__gt=timezone.now()).exists():
+    if Booking.objects.filter(resource__template=config, end__gt=timezone.now()).exists():
         return HttpResponse('no')
     config.delete()
     return HttpResponse('')
index 498bd9d..77561c0 100644 (file)
@@ -43,7 +43,7 @@ def lab_detail_view(request, lab_name):
         {
             'title': "Lab Overview",
             'lab': lab,
-            'hostprofiles': lab.hostprofiles.all(),
+            'hostprofiles': ResourceProfile.objects.filter(labs=lab),
             'images': images,
         }
     )
index 206c203..fee6e83 100644 (file)
         var formData = ajaxForm.serialize();
         req = new XMLHttpRequest();
         var url = "delete/" + current_config_id;
+        req.onreadystatechange = function() {
+            if (this.readyState == 4 && this.status == 200) {
+                location.reload();
+            }
+        };
         req.open("POST", url, true);
         req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
         req.onerror = function() { alert("problem submitting form"); }
index 65b46f1..33ccaff 100644 (file)
 {% endfor %}
 </div>
 <script>
-    var grb_mapping = {{grb_mapping|safe|default:"{}"}};
-    var booking_mapping = {{booking_mapping|safe|default:"{}"}};
+    var active_resources = {{active_resources|safe|default:"{}"}}
     var current_resource_id = -1;
     function delete_resource(resource_id) {
         document.getElementById("confirm_delete_button").removeAttribute("disabled");
-        var configs = grb_mapping[resource_id];
         var warning = document.createTextNode("Are You Sure?");
         var warning_subtext = document.createTextNode("This cannot be undone");
-        if(booking_mapping[resource_id]){
-            var warning = document.createTextNode("This resource is being used. It cannot be deleted.");
+        if(active_resources[resource_id]){
+            var warning = document.createTextNode("This resource is being used or is scheduled to be used. It cannot be deleted.");
             var warning_subtext = document.createTextNode("If your booking just ended, you may need to give us a few minutes to clean it up before this can be removed.");
 
             document.getElementById("confirm_delete_button").disabled = true;
         }
-        else if(configs.length > 0) {
-            list_configs(configs);
-            warning_text = "Are You Sure? The following Configurations will also be deleted.";
+        else {
+            warning_text = "Are You Sure?";
             warning = document.createTextNode(warning_text);
         }
 
@@ -56,7 +53,7 @@
     function set_modal_text(title, text) {
         var clear = function(node) {
             while(node.lastChild) {
-            node.removeChild(node.lastChild);
+                node.removeChild(node.lastChild);
             }
         }
         var warning_title = document.getElementById("config_warning");
         var formData = ajaxForm.serialize();
         req = new XMLHttpRequest();
         var url = "delete/" + current_resource_id;
+        req.onreadystatechange = function() {
+            if (this.readyState == 4 && this.status == 200) {
+                location.reload();
+            }
+        };
         req.open("POST", url, true);
         req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
         req.onerror = function() { alert("problem submitting form"); }