Merge "Fixes the idf and pdf templates so that we can deploy opnfv"
[laas.git] / src / booking / forms.py
1 ##############################################################################
2 # Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9 import django.forms as forms
10 from django.forms.widgets import NumberInput
11
12 from workflow.forms import (
13     SearchableSelectMultipleWidget,
14     MultipleSelectFilterField,
15     MultipleSelectFilterWidget,
16     FormUtils)
17 from account.models import UserProfile
18 from resource_inventory.models import Image, Installer, Scenario
19
20
21 class QuickBookingForm(forms.Form):
22     purpose = forms.CharField(max_length=1000)
23     project = forms.CharField(max_length=400)
24     hostname = forms.CharField(max_length=400)
25
26     installer = forms.ModelChoiceField(queryset=Installer.objects.all(), required=False)
27     scenario = forms.ModelChoiceField(queryset=Scenario.objects.all(), required=False)
28
29     def __init__(self, data=None, user=None, *args, **kwargs):
30         chosen_users = []
31         if "default_user" in kwargs:
32             default_user = kwargs.pop("default_user")
33         else:
34             default_user = "you"
35         self.default_user = default_user
36         if "chosen_users" in kwargs:
37             chosen_users = kwargs.pop("chosen_users")
38         elif data and "users" in data:
39             chosen_users = data.getlist("users")
40
41         super(QuickBookingForm, self).__init__(data=data, **kwargs)
42
43         self.fields["image"] = forms.ModelChoiceField(
44             Image.objects.filter(public=True) | Image.objects.filter(owner=user)
45         )
46
47         self.fields['users'] = forms.CharField(
48             widget=SearchableSelectMultipleWidget(
49                 attrs=self.build_search_widget_attrs(chosen_users, default_user=default_user)
50             ),
51             required=False
52         )
53         attrs = FormUtils.getLabData(0)
54         attrs['selection_data'] = 'false'
55         self.fields['filter_field'] = MultipleSelectFilterField(widget=MultipleSelectFilterWidget(attrs=attrs))
56         self.fields['length'] = forms.IntegerField(
57             widget=NumberInput(
58                 attrs={
59                     "type": "range",
60                     'min': "1",
61                     "max": "21",
62                     "value": "1"
63                 }
64             )
65         )
66
67     def build_user_list(self):
68         """
69         returns a mapping of UserProfile ids to displayable objects expected by
70         searchable multiple select widget
71         """
72         try:
73             users = {}
74             d_qset = UserProfile.objects.select_related('user').all().exclude(user__username=self.default_user)
75             for userprofile in d_qset:
76                 user = {
77                     'id': userprofile.user.id,
78                     'expanded_name': userprofile.full_name,
79                     'small_name': userprofile.user.username,
80                     'string': userprofile.email_addr
81                 }
82
83                 users[userprofile.user.id] = user
84
85             return users
86         except Exception:
87             pass
88
89     def build_search_widget_attrs(self, chosen_users, default_user="you"):
90
91         attrs = {
92             'set': self.build_user_list(),
93             'show_from_noentry': "false",
94             'show_x_results': 10,
95             'scrollable': "false",
96             'selectable_limit': -1,
97             'name': "users",
98             'placeholder': "username",
99             'initial': chosen_users,
100             'edit': False
101         }
102         return attrs
103
104
105 class HostReImageForm(forms.Form):
106
107     image_id = forms.IntegerField()
108     host_id = forms.IntegerField()