Merge "Implement Notification Framework with Initial Email Support"
authorJack Morgan <jack.morgan@intel.com>
Mon, 8 Jan 2018 23:56:29 +0000 (23:56 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Mon, 8 Jan 2018 23:56:29 +0000 (23:56 +0000)
src/api/serializers.py
src/booking/admin.py
src/booking/forms.py
src/booking/migrations/0002_auto_20171213_1506.py [new file with mode: 0644]
src/booking/models.py
src/booking/views.py
src/templates/booking/booking_calendar.html
src/templates/booking/booking_detail.html
src/templates/booking/booking_table.html

index dc79d9d..c371a92 100644 (file)
@@ -17,10 +17,11 @@ from dashboard.models import Server, Resource, ResourceStatus
 class BookingSerializer(serializers.ModelSerializer):
     installer_name = serializers.CharField(source='installer.name')
     scenario_name = serializers.CharField(source='scenario.name')
+    opsys_name = serializers.CharField(source='opsys.name')
 
     class Meta:
         model = Booking
-        fields = ('id', 'resource_id', 'start', 'end', 'installer_name', 'scenario_name', 'purpose')
+        fields = ('id', 'resource_id', 'start', 'end', 'opsys_name', 'installer_name', 'scenario_name', 'purpose')
 
 
 class ServerSerializer(serializers.ModelSerializer):
index d883be1..51e1031 100644 (file)
@@ -13,5 +13,6 @@ from django.contrib import admin
 from booking.models import *
 
 admin.site.register(Booking)
+admin.site.register(Opsys)
 admin.site.register(Installer)
-admin.site.register(Scenario)
\ No newline at end of file
+admin.site.register(Scenario)
index 2dbfacb..1f09c05 100644 (file)
 
 import django.forms as forms
 
-from booking.models import Installer, Scenario
+from booking.models import Installer, Scenario, Opsys
 
 
 class BookingForm(forms.Form):
-    fields = ['start', 'end', 'purpose', 'installer', 'scenario']
+    fields = ['start', 'end', 'purpose', 'opsys', 'installer', 'scenario']
 
     start = forms.DateTimeField()
     end = forms.DateTimeField()
     purpose = forms.CharField(max_length=300)
+    opsys = forms.ModelChoiceField(queryset=Opsys.objects.all(), required=False)
     installer = forms.ModelChoiceField(queryset=Installer.objects.all(), required=False)
-    scenario = forms.ModelChoiceField(queryset=Scenario.objects.all(), required=False)
\ No newline at end of file
+    scenario = forms.ModelChoiceField(queryset=Scenario.objects.all(), required=False)
diff --git a/src/booking/migrations/0002_auto_20171213_1506.py b/src/booking/migrations/0002_auto_20171213_1506.py
new file mode 100644 (file)
index 0000000..3e0a5fa
--- /dev/null
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10 on 2017-12-13 15:06
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('booking', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Opsys',
+            fields=[
+                ('id', models.AutoField(primary_key=True, serialize=False)),
+                ('name', models.CharField(max_length=100)),
+            ],
+        ),
+        migrations.AddField(
+            model_name='booking',
+            name='opsys',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='booking.Opsys'),
+        ),
+    ]
index 0b3fa3b..0bf5961 100644 (file)
@@ -31,6 +31,12 @@ class Scenario(models.Model):
     def __str__(self):
         return self.name
 
+class Opsys(models.Model):
+    id = models.AutoField(primary_key=True)
+    name = models.CharField(max_length=100)
+
+    def __str__(self):
+        return self.name
 
 class Booking(models.Model):
     id = models.AutoField(primary_key=True)
@@ -41,6 +47,7 @@ class Booking(models.Model):
     jira_issue_id = models.IntegerField(null=True)
     jira_issue_status = models.CharField(max_length=50)
 
+    opsys = models.ForeignKey(Opsys, models.DO_NOTHING, null=True)
     installer = models.ForeignKey(Installer, models.DO_NOTHING, null=True)
     scenario = models.ForeignKey(Scenario, models.DO_NOTHING, null=True)
     purpose = models.CharField(max_length=300, blank=False)
index 6fdca0e..da2fe11 100644 (file)
@@ -70,6 +70,7 @@ class BookingFormView(FormView):
         booking = Booking(start=form.cleaned_data['start'],
                           end=form.cleaned_data['end'],
                           purpose=form.cleaned_data['purpose'],
+                          opsys=form.cleaned_data['opsys'],
                           installer=form.cleaned_data['installer'],
                           scenario=form.cleaned_data['scenario'],
                           resource=self.resource, user=user)
@@ -117,6 +118,6 @@ class ResourceBookingsJSON(View):
     def get(self, request, *args, **kwargs):
         resource = get_object_or_404(Resource, id=self.kwargs['resource_id'])
         bookings = resource.booking_set.get_queryset().values('id', 'start', 'end', 'purpose',
-                                                              'jira_issue_status',
+                                                              'jira_issue_status', 'opsys__name',
                                                               'installer__name', 'scenario__name')
         return JsonResponse({'bookings': list(bookings)})
index 4644e85..16f0a4a 100644 (file)
@@ -45,6 +45,7 @@
                             <div class='input-group' id='endtimepicker'>
                                 {% bootstrap_field form.end addon_after='<span class="glyphicon glyphicon-calendar"></span>' %}
                             </div>
+                            {% bootstrap_field form.opsys %}
                             {% bootstrap_field form.purpose %}
                             {% bootstrap_field form.installer %}
                             {% bootstrap_field form.scenario %}
     <script src={% static "js/fullcalendar-options.js" %}></script>
     <script src={% static "js/datetimepicker-options.js" %}></script>
     <script src={% static "js/booking-calendar.js" %}></script>
-{% endblock extrajs %}
\ No newline at end of file
+{% endblock extrajs %}
index 4b016b2..cb937d3 100644 (file)
 <p>
     <b>Purpose: </b> {{ booking.purpose }}
 </p>
+<p>
+    <b>Operating System: </b> {{ booking.opsys }}
+</p>
 <p>
     <b>Installer: </b> {{ booking.installer }}
 </p>
 <p>
     <b>Scenario: </b> {{ booking.scenario }}
-</p>
\ No newline at end of file
+</p>
index 655b013..af2248c 100644 (file)
@@ -7,6 +7,7 @@
     <th>Purpose</th>
     <th>Start</th>
     <th>End</th>
+    <th>Operating System</th>
     <th>Installer</th>
     <th>Scenario</th>
 </tr>
@@ -26,6 +27,9 @@
         <td>
             {{ booking.end }}
         </td>
+        <td>
+            {{ booking.opsys }}
+        </td>
         <td>
             {{ booking.installer }}
         </td>
@@ -34,4 +38,4 @@
         </td>
     </tr>
 {% endfor %}
-</tbody>
\ No newline at end of file
+</tbody>