e89b4c888006b1c322b3e7776cc280bcb68a91de
[plstackapi.git] / planetstack / core / models / reservation.py
1 import os
2 import datetime
3 from django.db import models
4 from core.models import PlCoreBase
5 from core.models import Sliver
6 from core.models import Slice
7 from core.models import ServiceResource
8
9 # Create your models here.
10
11 class Reservation(PlCoreBase):
12     startTime = models.DateTimeField()
13     slice = models.ForeignKey(Slice, related_name="reservations")
14     duration = models.IntegerField(default=1)
15
16     def __unicode__(self):  return u'%s to %s' % (self.startTime, self.endTime)
17
18     @property
19     def endTime(self):
20         return self.startTime + datetime.timedelta(hours=self.duration)
21
22     def can_update(self, user):
23         return self.slice.can_update(user)
24
25     def save_by_user(self, user, *args, **kwds):
26         if self.can_update(user):
27             super(Reservation, self).save(*args, **kwds)
28
29     @staticmethod
30     def select_by_user(user):
31         if user.is_admin:
32             qs = Reservation.objects.all()
33         else:
34             slice_ids = [s.id for s in Slice.select_by_user(user)]
35             qs = Reservation.objects.filter(id__in=slice_ids)
36         return qs
37
38 class ReservedResource(PlCoreBase):
39     sliver = models.ForeignKey(Sliver, related_name="reservedResourrces")
40     resource = models.ForeignKey(ServiceResource, related_name="reservedResources")
41     quantity = models.IntegerField(default=1)
42     reservationSet = models.ForeignKey(Reservation, related_name="reservedResources")
43
44     class Meta(PlCoreBase.Meta):
45        verbose_name_plural = "Reserved Resources"
46
47     def __unicode__(self):  return u'%d %s on %s' % (self.quantity, self.resource, self.sliver)
48
49     def can_update(self, user):
50         return self.sliver.slice.can_update(user)
51
52     def save_by_user(self, user, *args, **kwds):
53         if self.can_update(user):
54             super(ReservedResource, self).save(*args, **kwds)
55
56     @staticmethod
57     def select_by_user(user):
58         if user.is_admin:
59             qs = ReservedResource.objects.all()
60         else:
61             sliver_ids = [s.id for s in Sliver.select_by_user(user)]
62             qs = ReservedResource.objects.filter(id__in=sliver_ids)
63         return qs
64
65