Restrict image on multi-node booking 52/72352/1
authorSean Smith <ssmith@iol.unh.edu>
Tue, 6 Apr 2021 20:18:36 +0000 (16:18 -0400)
committerSean Smith <ssmith@iol.unh.edu>
Tue, 6 Apr 2021 20:19:18 +0000 (16:19 -0400)
Change-Id: I280dba83bceed74195a77b28f3016421c462cc5a
Signed-off-by: Sean Smith <ssmith@iol.unh.edu>
src/booking/forms.py
src/static/js/dashboard.js

index e7be70f..fe1ff3f 100644 (file)
@@ -35,10 +35,18 @@ class QuickBookingForm(forms.Form):
 
         super(QuickBookingForm, self).__init__(data=data, **kwargs)
 
+        image_help_text = 'Image can be set only for single-node bookings. For multi-node bookings set image through Design a POD.'
         self.fields["image"] = forms.ModelChoiceField(
             Image.objects.filter(public=True) | Image.objects.filter(owner=user), required=False
         )
 
+        self.fields['image'].widget.attrs.update({
+            'class': 'has-popover',
+            'data-content': image_help_text,
+            'data-placement': 'bottom',
+            'data-container': 'body'
+        })
+
         self.fields['users'] = SearchableSelectMultipleField(
             queryset=UserProfile.objects.select_related('user').exclude(user=user),
             items=get_user_items(exclude=user),
@@ -59,10 +67,10 @@ class QuickBookingForm(forms.Form):
 
         self.fields['filter_field'] = MultipleSelectFilterField(widget=MultipleSelectFilterWidget(**lab_data))
 
-        help_text = 'Hostname can be set only for single-node bookings. For multi-node bookings set hostname through Design a POD.'
+        hostname_help_text = 'Hostname can be set only for single-node bookings. For multi-node bookings set hostname through Design a POD.'
         self.fields['hostname'].widget.attrs.update({
             'class': 'has-popover',
-            'data-content': help_text,
+            'data-content': hostname_help_text,
             'data-placement': 'top',
             'data-container': 'body'
         })
index dfbb157..6395df0 100644 (file)
@@ -409,6 +409,7 @@ class MultipleSelectFilterWidget {
     reserveResource(node){
         const required_resources = JSON.parse(node['required_resources']);
         let hostname = document.getElementById('id_hostname');
+        let image = document.getElementById('id_image');
         let cnt = 0
 
 
@@ -417,8 +418,10 @@ class MultipleSelectFilterWidget {
             cnt += required_resources[resource];
         }
 
-        if (cnt > 1)
+        if (cnt > 1) {
             hostname.readOnly = true;
+            image.disabled = true;
+        }
 
         this.updateAvailibility();
     }
@@ -426,12 +429,14 @@ class MultipleSelectFilterWidget {
     releaseResource(node){
         const required_resources = JSON.parse(node['required_resources']);
         let hostname = document.getElementById('id_hostname');
+        let image = document.getElementById('id_image');
 
         for(let resource in required_resources){
             this.available_resources[resource] += required_resources[resource];
         }
 
         hostname.readOnly = false;
+        image.readOnly = false;
         this.updateAvailibility();
     }