domain_name on user and project creation

Change-Id: I1b879156ffe671f00eeb4b0ec93f64ed8639d492
Signed-off-by: lombardofr <lombardo@everyup.it>
diff --git a/projecthandler/template/project/modal/project_new.html b/projecthandler/template/project/modal/project_new.html
index c346ec8..df652d7 100644
--- a/projecthandler/template/project/modal/project_new.html
+++ b/projecthandler/template/project/modal/project_new.html
@@ -1,3 +1,18 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an  BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
 <div class="modal" id="modal_new_project" xmlns="http://www.w3.org/1999/html">
     <div class="modal-dialog">
         <div class="modal-content">
@@ -10,9 +25,17 @@
                      {% csrf_token %}
             <div class="modal-body">
 
-                <div id="div_chose_id">
-                    <label>Project Name: </label>
-                    <input name="name" id="name"  size="40" maxlength="20"/>
+                <div class="form-group" id="div_chose_id" >
+                    <label for="name" class="col-sm-3 control-label">Project Name* : </label>
+                    <input name="name" id="name"  size="40" maxlength="20"required/>
+                </div>
+
+                <div class="form-group">
+                    <label for="domain_name" class="col-sm-3 control-label">Domain Name: </label>
+                    <div class="col-sm-6">
+                        <select required id="domain_name" class="js-example-basic form-control" name="domain_name">
+                        </select>
+                    </div>
                 </div>
 
             </div>
diff --git a/projecthandler/template/project/projectlist.html b/projecthandler/template/project/projectlist.html
index f1aa4f1..5423aa1 100644
--- a/projecthandler/template/project/projectlist.html
+++ b/projecthandler/template/project/projectlist.html
@@ -20,8 +20,9 @@
 {% load staticfiles %}
 
 {% block head_block %}
-  	{{ block.super }}
-    <link rel="stylesheet" href="/static/node_modules/datatables.net-bs/css/dataTables.bootstrap.min.css">
+      {{ block.super }}
+        <link rel="stylesheet" href="/static/node_modules/select2/dist/css/select2.min.css">
+        <link rel="stylesheet" href="/static/node_modules/datatables.net-bs/css/dataTables.bootstrap.min.css">
 
 {% endblock %}
 {% block title_header_big %}
@@ -54,7 +55,7 @@
             <div class="box-tools">
                 <button type="button" class="btn btn-default" data-container="body"
                                         data-toggle="tooltip" data-placement="top" title="New Project"
-                                        onclick="javascript:showModalNewProject()">
+                                        onclick="javascript:showModalNewProject({'domains_list_url': '{% url "projects:domains_list" %}'})">
                                     <i class="fa fa-plus"></i> New Project</button>
             </div>
         </div>
@@ -85,6 +86,7 @@
   	{{ block.super }}
     <script src="/static/node_modules/datatables.net/js/jquery.dataTables.min.js"></script>
     <script src="/static/node_modules/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+    <script src="/static/node_modules/select2/dist/js/select2.js"></script>
 
     <script>
         var table;
@@ -157,7 +159,31 @@
     });
     </script>
     <script>
-    function showModalNewProject(){
+    function showModalNewProject(args){
+        select2_groups = $('#domain_name').select2({
+            placeholder: 'Select Domain',
+            width: '100%',
+            ajax: {
+                url: args.domains_list_url,
+                dataType: 'json',
+                processResults: function (data) {
+                    domains_list = [];
+                    if (data['domains']) {
+                        for (d in data['domains']) {
+                            var domain = data['domains'][d];
+                            if( domain.endsWith(':ro') === false) {
+                                domains_list.push({ id: domain, text: domain })
+                            }
+                            
+                        }
+                    }
+
+                    return {
+                        results: domains_list
+                    };
+                }
+            }
+        });
         $('#modal_new_project').modal('show');
     }
 
diff --git a/projecthandler/urls/project.py b/projecthandler/urls/project.py
index d017922..0a7c94a 100644
--- a/projecthandler/urls/project.py
+++ b/projecthandler/urls/project.py
@@ -20,6 +20,7 @@
 urlpatterns = [
     url(r'^$', views.open_project, name='open_project'),
     url(r'^list/', views.user_projects, name='projects_list'),
+    url(r'^domains/', views.user_domains, name='domains_list'),
     url(r'^new/', views.create_new_project, name='new_project'),
     url(r'^descriptors/', include('descriptorhandler.urls', namespace='descriptors'), name='descriptor_base'),
     url(r'^(?P<project_id>[-\w]+)/delete$', views.delete_project, name='delete_project'),
diff --git a/projecthandler/views.py b/projecthandler/views.py
index fad83bd..c46d856 100644
--- a/projecthandler/views.py
+++ b/projecthandler/views.py
@@ -43,7 +43,7 @@
         user = osmutils.get_user(request)
         client = Client()
         new_project_dict = request.POST.dict()
-        keys = ["name"]
+        keys = ["name", "domain_name"]
         project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_project_dict.items()))
         result = client.project_create(user.get_token(), project_data)
         if isinstance(result, dict) and 'error' in result and result['error']:
@@ -62,6 +62,25 @@
         'projects': result['data'] if result and result['error'] is False else [],
     },'projectlist.html')
 
+
+@login_required
+def user_domains(request):
+    user = osmutils.get_user(request)
+    client = Client()
+    result = client.get_domains(user.get_token())
+    if result and result['error'] is False:
+        domains = []
+        if result['data'] and result['data']['user_domain_name']:
+            domain_names = result['data']['user_domain_name'].split(',')
+            domains.extend(x for x in domain_names if x not in domains)
+        if result['data'] and result['data']['project_domain_name']:
+            domain_names = result['data']['project_domain_name'].split(',')
+            domains.extend(x for x in domain_names if x not in domains)
+
+        return __response_handler(request, {'domains': domains})
+    return __response_handler(request, {'domains': []})
+
+
 @login_required
 def open_project(request):
     user = osmutils.get_user(request)