1 from __future__ import unicode_literals
3 from django.db import models
4 from django.contrib.auth.models import User
7 class Booking(models.Model):
8 booking_id = models.AutoField(primary_key=True)
9 # Bookings should be deleted before resources
10 resource = models.ForeignKey('Resource', models.PROTECT)
11 # delete Booking when user is deleted
12 user = models.ForeignKey(User, models.CASCADE)
13 start_date_time = models.DateTimeField()
14 end_date_time = models.DateTimeField()
15 creation = models.DateTimeField(auto_now=True)
16 purpose = models.CharField(max_length=300)
21 # check for conflicting bookings before saving
22 def save(self, *args, **kwargs):
23 # conflicts end after booking starts, and start before booking ends
24 conflicting_bookings = Booking.objects.filter(resource_id=self.resource_id)
25 conflicting_bookings = conflicting_bookings.filter(end_date_time__gt=self.start_date_time)
26 conflicting_bookings = conflicting_bookings.filter(start_date_time__lt=self.end_date_time)
27 # we may change a booking, so it is not a conflict
28 conflicting_bookings = conflicting_bookings.exclude(booking_id=self.booking_id)
29 if conflicting_bookings.count() > 0:
30 raise ValueError('This booking overlaps with another booking')
31 super(Booking, self).save(*args, **kwargs)
35 return 'Booking: ' + str(self.resource)
38 class Pod(models.Model):
39 pod_id = models.AutoField(primary_key=True)
40 # Delete Pod with resource
41 resource = models.ForeignKey('Resource', models.CASCADE)
42 chassis = models.CharField(max_length=500, blank=True, null=True)
48 if self.chassis is None:
49 return str(self.pod_id) + ' ' + str(self.resource)
50 return str(self.pod_id) + ' ' + self.chassis
53 class Resource(models.Model):
54 resource_id = models.AutoField(primary_key=True)
55 name = models.CharField(max_length=100, unique=True)
56 slavename = models.CharField(max_length=50, blank=True, null=True)
57 description = models.CharField(max_length=300, blank=True, null=True)
58 url = models.CharField(max_length=100, blank=True, null=True)
59 bookable = models.BooleanField(default=False)
60 active = models.BooleanField(default=True)
69 class Server(models.Model):
70 server_id = models.AutoField(primary_key=True)
71 resource = models.ForeignKey(Resource, models.DO_NOTHING)
72 model = models.CharField(max_length=200, blank=True, null=True)
73 cpu = models.CharField(max_length=200, blank=True, null=True)
74 ram = models.CharField(max_length=200, blank=True, null=True)
75 storage = models.CharField(max_length=200, blank=True, null=True)
76 count = models.IntegerField(default=1)
82 class UserResource(models.Model):
83 user_resource_id = models.AutoField(primary_key=True)
84 user = models.ForeignKey(User, models.CASCADE)
85 # Delete if Resource is deleted
86 resource = models.ForeignKey(Resource, models.CASCADE)
89 db_table = 'user_resource'