aboutsummaryrefslogtreecommitdiffstats
path: root/src/booking/models.py
diff options
context:
space:
mode:
authorJustin Choquette <jchoquette@iol.unh.edu>2023-06-08 12:46:53 -0400
committerJustin Choquette <jchoquette@iol.unh.edu>2023-07-21 13:17:51 -0400
commita09db9f287a02873c0226759f8ea444bb304cd59 (patch)
tree59e744e4b998973a808abbae2d21fbdd6201d829 /src/booking/models.py
parent8ddc7e820e120f1dde4e901d3cb6f1dd3f281e65 (diff)
LaaS 3.0 Almost MVP
Change-Id: Ided9a43cf3088bb58a233dc459711c03f43e11b8 Signed-off-by: Justin Choquette <jchoquette@iol.unh.edu>
Diffstat (limited to 'src/booking/models.py')
-rw-r--r--src/booking/models.py33
1 files changed, 3 insertions, 30 deletions
diff --git a/src/booking/models.py b/src/booking/models.py
index 966f1c2..09244d3 100644
--- a/src/booking/models.py
+++ b/src/booking/models.py
@@ -9,11 +9,10 @@
##############################################################################
-from resource_inventory.models import ResourceBundle, OPNFVConfig
from account.models import Lab
from django.contrib.auth.models import User
from django.db import models
-import resource_inventory.resource_manager
+from django.core.validators import RegexValidator
class Booking(models.Model):
@@ -26,47 +25,21 @@ class Booking(models.Model):
start = models.DateTimeField()
end = models.DateTimeField()
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)
# bookings can be extended a limited number of times
ext_count = models.IntegerField(default=2)
# the hardware that the user has booked
- resource = models.ForeignKey(ResourceBundle, on_delete=models.SET_NULL, null=True, blank=True)
- opnfv_config = models.ForeignKey(OPNFVConfig, on_delete=models.SET_NULL, null=True, blank=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="")
idf = models.TextField(blank=True, default="")
+ # Associated LibLaaS aggregate
+ aggregateId = models.CharField(blank=True, max_length=36, validators=[RegexValidator(regex='^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$', message='aggregate_id must be a valid UUID', code='nomatch')])
complete = models.BooleanField(default=False)
class Meta:
db_table = 'booking'
- def save(self, *args, **kwargs):
- """
- Save the booking if self.user is authorized and there is no overlapping booking.
-
- Raise PermissionError if the user is not authorized
- Raise ValueError if there is an overlapping booking
- """
- if self.start >= self.end:
- raise ValueError('Start date is after end date')
- # conflicts end after booking starts, and start before booking ends
- conflicting_dates = Booking.objects.filter(resource=self.resource).exclude(id=self.id)
- conflicting_dates = conflicting_dates.filter(end__gt=self.start)
- conflicting_dates = conflicting_dates.filter(start__lt=self.end)
- if conflicting_dates.count() > 0:
- 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.purpose) + ' from ' + str(self.start) + ' until ' + str(self.end)