Merge "Remove Unneeded field"
[pharos-tools.git] / dashboard / src / booking / models.py
index 0bf5961..8612abd 100644 (file)
@@ -1,5 +1,6 @@
 ##############################################################################
 # Copyright (c) 2016 Max Breitenfeldt and others.
+# Copyright (c) 2018 Sawyer Bergeron, Parker Berberian, 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,62 +9,33 @@
 ##############################################################################
 
 
-from django.conf import settings
+from resource_inventory.models import ResourceBundle, ConfigBundle
+from account.models import Lab
 from django.contrib.auth.models import User
 from django.db import models
-from jira import JIRA
-from jira import JIRAError
+import resource_inventory.resource_manager
 
-from dashboard.models import Resource
-
-
-class Installer(models.Model):
-    id = models.AutoField(primary_key=True)
-    name = models.CharField(max_length=30)
-
-    def __str__(self):
-        return self.name
-
-class Scenario(models.Model):
-    id = models.AutoField(primary_key=True)
-    name = models.CharField(max_length=300)
-
-    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)
-    user = models.ForeignKey(User, models.CASCADE)  # delete if user is deleted
-    resource = models.ForeignKey(Resource, models.PROTECT)
+    owner = models.ForeignKey(User, on_delete=models.PROTECT, related_name='owner')
+    collaborators = models.ManyToManyField(User, related_name='collaborators')
     start = models.DateTimeField()
     end = models.DateTimeField()
-    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)
+    reset = models.BooleanField(default=False)
+    jira_issue_id = models.IntegerField(null=True, blank=True)
+    jira_issue_status = models.CharField(max_length=50, blank=True)
     purpose = models.CharField(max_length=300, blank=False)
+    ext_count = models.IntegerField(default=2)
+    resource = models.ForeignKey(ResourceBundle, on_delete=models.SET_NULL, null=True)
+    config_bundle = models.ForeignKey(ConfigBundle, on_delete=models.SET_NULL, null=True)
+    project = models.CharField(max_length=100, default="", blank=True, null=True)
+    lab = models.ForeignKey(Lab, null=True, on_delete=models.SET_NULL)
+    pdf = models.TextField(blank=True, default="")
 
     class Meta:
         db_table = 'booking'
 
-    def get_jira_issue(self):
-        try:
-            jira = JIRA(server=settings.JIRA_URL,
-                        basic_auth=(settings.JIRA_USER_NAME, settings.JIRA_USER_PASSWORD))
-            issue = jira.issue(self.jira_issue_id)
-            return issue
-        except JIRAError:
-            return None
-
     def save(self, *args, **kwargs):
         """
         Save the booking if self.user is authorized and there is no overlapping booking.
@@ -80,5 +52,12 @@ class Booking(models.Model):
             raise ValueError('This booking overlaps with another booking')
         return super(Booking, self).save(*args, **kwargs)
 
+    def delete(self, *args, **kwargs):
+        res = self.resource
+        self.resource = None
+        self.save()
+        resource_inventory.resource_manager.ResourceManager.getInstance().deleteResourceBundle(res)
+        return super(self.__class__, self).delete(*args, **kwargs)
+
     def __str__(self):
-        return str(self.resource) + ' from ' + str(self.start) + ' until ' + str(self.end)
+        return str(self.purpose) + ' from ' + str(self.start) + ' until ' + str(self.end)