Merge "Redesigns Multiple Select Filter Widget"
[pharos-tools.git] / dashboard / src / booking / forms.py
index cb76383..df88cc6 100644 (file)
@@ -1,5 +1,5 @@
 ##############################################################################
-# Copyright (c) 2018 Sawyer Bergeron, Parker Berberian, and others.
+# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
 #
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Apache License, Version 2.0
@@ -8,55 +8,47 @@
 ##############################################################################
 import django.forms as forms
 from django.forms.widgets import NumberInput
-from django.db.models import Q
 
 from workflow.forms import (
-    SearchableSelectMultipleWidget,
     MultipleSelectFilterField,
     MultipleSelectFilterWidget,
     FormUtils)
 from account.models import UserProfile
 from resource_inventory.models import Image, Installer, Scenario
+from workflow.forms import SearchableSelectMultipleField
+from booking.lib import get_user_items, get_user_field_opts
 
 
 class QuickBookingForm(forms.Form):
     purpose = forms.CharField(max_length=1000)
     project = forms.CharField(max_length=400)
-    image = forms.ModelChoiceField(queryset=Image.objects.all())
     hostname = forms.CharField(max_length=400)
 
     installer = forms.ModelChoiceField(queryset=Installer.objects.all(), required=False)
     scenario = forms.ModelChoiceField(queryset=Scenario.objects.all(), required=False)
 
-    def __init__(self, data=None, *args, user=None, **kwargs):
-        chosen_users = []
+    def __init__(self, data=None, user=None, *args, **kwargs):
         if "default_user" in kwargs:
             default_user = kwargs.pop("default_user")
         else:
             default_user = "you"
         self.default_user = default_user
-        if "chosen_users" in kwargs:
-            chosen_users = kwargs.pop("chosen_users")
-        elif data and "users" in data:
-            chosen_users = data.getlist("users")
-
-        if user:
-            self.image = forms.ModelChoiceField(queryset=Image.objects.filter(
-                Q(public=True) | Q(owner=user)), required=False)
-        else:
-            self.image = forms.ModelChoiceField(queryset=Image.objects.all(), required=False)
 
         super(QuickBookingForm, self).__init__(data=data, **kwargs)
 
-        self.fields['users'] = forms.CharField(
-            widget=SearchableSelectMultipleWidget(
-                attrs=self.build_search_widget_attrs(chosen_users, default_user=default_user)
-            ),
-            required=False
+        self.fields["image"] = forms.ModelChoiceField(
+            Image.objects.filter(public=True) | Image.objects.filter(owner=user)
+        )
+
+        self.fields['users'] = SearchableSelectMultipleField(
+            queryset=UserProfile.objects.select_related('user').exclude(user=user),
+            items=get_user_items(exclude=user),
+            required=False,
+            **get_user_field_opts()
         )
+
         attrs = FormUtils.getLabData(0)
-        attrs['selection_data'] = 'false'
-        self.fields['filter_field'] = MultipleSelectFilterField(widget=MultipleSelectFilterWidget(attrs=attrs))
+        self.fields['filter_field'] = MultipleSelectFilterField(widget=MultipleSelectFilterWidget(**attrs))
         self.fields['length'] = forms.IntegerField(
             widget=NumberInput(
                 attrs={
@@ -104,3 +96,9 @@ class QuickBookingForm(forms.Form):
             'edit': False
         }
         return attrs
+
+
+class HostReImageForm(forms.Form):
+
+    image_id = forms.IntegerField()
+    host_id = forms.IntegerField()