Fixed Selection of single hosts in quick booking
[pharos-tools.git] / dashboard / src / workflow / forms.py
index feb32f2..03940d8 100644 (file)
@@ -41,6 +41,7 @@ class SearchableSelectMultipleWidget(widgets.SelectMultiple):
         self.default_entry = attrs.get("default_entry", "")
         self.edit = attrs.get("edit", False)
         self.wf_type = attrs.get("wf_type")
+        self.incompatible = attrs.get("incompatible", "false")
 
         super(SearchableSelectMultipleWidget, self).__init__(attrs)
 
@@ -61,7 +62,8 @@ class SearchableSelectMultipleWidget(widgets.SelectMultiple):
             'initial': self.initial,
             'default_entry': self.default_entry,
             'edit': self.edit,
-            'wf_type': self.wf_type
+            'wf_type': self.wf_type,
+            'incompatible': self.incompatible
         }
 
 
@@ -101,13 +103,6 @@ class ResourceSelectorForm(forms.Form):
             displayable['id'] = res.id
             resources[res.id] = displayable
 
-            if bundle:
-                displayable = {}
-                displayable['small_name'] = bundle.name
-                displayable['expanded_name'] = "Current bundle"
-                displayable['string'] = bundle.description
-                displayable['id'] = "repo bundle"
-                resources["repo bundle"] = displayable
         attrs = {
             'set': resources,
             'show_from_noentry': "true",
@@ -159,13 +154,15 @@ class SWConfigSelectorForm(forms.Form):
             displayable['id'] = config.id
             configs[config.id] = displayable
 
-        if bundle:
+        incompatible_choice = "false"
+        if bundle and bundle.id not in configs:
             displayable = {}
             displayable['small_name'] = bundle.name
-            displayable['expanded_name'] = "Current configuration"
+            displayable['expanded_name'] = bundle.owner.username
             displayable['string'] = bundle.description
-            displayable['id'] = "repo bundle"
-            configs['repo bundle'] = displayable
+            displayable['id'] = bundle.id
+            configs[bundle.id] = displayable
+            incompatible_choice = "true"
 
         attrs = {
             'set': configs,
@@ -177,7 +174,8 @@ class SWConfigSelectorForm(forms.Form):
             'placeholder': "config",
             'initial': chosen,
             'edit': edit,
-            'wf_type': 2
+            'wf_type': 2,
+            'incompatible': incompatible_choice
         }
         return attrs
 
@@ -332,7 +330,7 @@ class MultipleSelectFilterField(forms.Field):
 
 class FormUtils:
     @staticmethod
-    def getLabData():
+    def getLabData(multiple_selectable_hosts):
         """
         Gets all labs and thier host profiles and returns a serialized version the form can understand.
         Should be rewritten with a related query to make it faster
@@ -350,6 +348,8 @@ class FormUtils:
             slab['selected'] = 0
             slab['selectable'] = 1
             slab['follow'] = 1
+            if not multiple_selectable_hosts:
+                slab['follow'] = 0
             slab['multiple'] = 0
             items[slab['id']] = slab
             mapping[slab['id']] = []
@@ -363,7 +363,7 @@ class FormUtils:
                 shost['selected'] = 0
                 shost['selectable'] = 1
                 shost['follow'] = 0
-                shost['multiple'] = 1
+                shost['multiple'] = multiple_selectable_hosts
                 items[shost['id']] = shost
                 mapping[slab['id']].append(shost['id'])
                 if shost['id'] not in mapping:
@@ -376,7 +376,7 @@ class FormUtils:
         context = {
             'filter_objects': filter_objects,
             'mapping': mapping,
-            'items': items
+            'filter_items': items
         }
         return context
 
@@ -386,7 +386,7 @@ class HardwareDefinitionForm(forms.Form):
     def __init__(self, *args, **kwargs):
         selection_data = kwargs.pop("selection_data", False)
         super(HardwareDefinitionForm, self).__init__(*args, **kwargs)
-        attrs = FormUtils.getLabData()
+        attrs = FormUtils.getLabData(1)
         attrs['selection_data'] = selection_data
         self.fields['filter_field'] = MultipleSelectFilterField(
             widget=MultipleSelectFilterWidget(
@@ -463,7 +463,7 @@ class SnapshotHostSelectForm(forms.Form):
 
 class SnapshotMetaForm(forms.Form):
     name = forms.CharField()
-    description = forms.CharField()
+    description = forms.CharField(widget=forms.Textarea)
 
 
 class ConfirmationForm(forms.Form):