diff --git a/symposion/schedule/models.py b/symposion/schedule/models.py index 14ea87e47f5f716e651e27c62d07c580d43b4b61..5be16eb872e9428cde7cb1ff83464e27f762e983 100644 --- a/symposion/schedule/models.py +++ b/symposion/schedule/models.py @@ -1,6 +1,7 @@ import datetime from django.core.exceptions import ObjectDoesNotExist +from django.contrib.auth.models import User from django.db import models from markitup.fields import MarkupField @@ -180,3 +181,62 @@ class Presentation(models.Model): class Meta: ordering = ["slot"] + + +class Session(models.Model): + + day = models.ForeignKey(Day, related_name="sessions") + slots = models.ManyToManyField(Slot, related_name="sessions") + + def sorted_slots(self): + return self.slots.order_by("start") + + def start(self): + slots = self.sorted_slots() + if slots: + return list(slots)[0].start + else: + return None + + def end(self): + slots = self.sorted_slots() + if slots: + return list(slots)[-1].end + else: + return None + + def __unicode__(self): + start = self.start() + end = self.end() + if start and end: + return u"%s: %s - %s" % ( + self.day.date.strftime("%a"), + start.strftime("%X"), + end.strftime("%X") + ) + return u"" + + +class SessionRole(models.Model): + + SESSION_ROLE_CHAIR = 1 + SESSION_ROLE_RUNNER = 2 + + SESSION_ROLE_TYPES = [ + (SESSION_ROLE_CHAIR, "Session Chair"), + (SESSION_ROLE_RUNNER, "Session Runner"), + ] + + session = models.ForeignKey(Session) + user = models.ForeignKey(User) + role = models.IntegerField(choices=SESSION_ROLE_TYPES) + status = models.NullBooleanField() + + submitted = models.DateTimeField(default=datetime.datetime.now) + + class Meta: + unique_together = [("session", "user", "role")] + + def __unicode__(self): + return u"%s %s: %s" % (self.user, self.session, + self.SESSION_ROLE_TYPES[self.role - 1][1])