blob: e89b4c888006b1c322b3e7776cc280bcb68a91de [file] [log] [blame]
Scott Bakerea03c932013-05-17 09:06:44 -07001import os
Scott Bakere444a002013-05-19 16:04:49 -07002import datetime
Scott Bakerea03c932013-05-17 09:06:44 -07003from django.db import models
4from core.models import PlCoreBase
5from core.models import Sliver
6from core.models import Slice
7from core.models import ServiceResource
8
9# Create your models here.
10
11class Reservation(PlCoreBase):
12 startTime = models.DateTimeField()
13 slice = models.ForeignKey(Slice, related_name="reservations")
14 duration = models.IntegerField(default=1)
15
Scott Bakerfc7879e2013-05-19 16:19:48 -070016 def __unicode__(self): return u'%s to %s' % (self.startTime, self.endTime)
Scott Bakerea03c932013-05-17 09:06:44 -070017
Scott Bakere444a002013-05-19 16:04:49 -070018 @property
19 def endTime(self):
20 return self.startTime + datetime.timedelta(hours=self.duration)
21
Tony Mack5b061472014-02-04 07:57:10 -050022 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
Scott Bakerea03c932013-05-17 09:06:44 -070038class 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
Tony Mack5b061472014-02-04 07:57:10 -050049 def can_update(self, user):
50 return self.sliver.slice.can_update(user)
Scott Bakerea03c932013-05-17 09:06:44 -070051
Tony Mack5b061472014-02-04 07:57:10 -050052 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
Scott Bakerea03c932013-05-17 09:06:44 -070064
65