import datetime
from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from django.db import models
from django.utils.translation import ugettext_lazy as _
@@ -11,11 +11,17 @@ from symposion.proposals.models import ProposalBase
from symposion.conference.models import Section
from symposion.speakers.models import Speaker
User = get_user_model()
class Schedule(models.Model):
objects = DefaultSelectRelatedManager()
section = models.OneToOneField(Section, verbose_name=_("Section"))
section = models.OneToOneField(
Section,
verbose_name=_("Section"),
on_delete=models.CASCADE,
)
published = models.BooleanField(default=True, verbose_name=_("Published"))
hidden = models.BooleanField(_("Hide schedule from overall conference view"), default=False)
@@ -35,7 +41,11 @@ class Day(models.Model):
schedule = models.ForeignKey(Schedule, verbose_name=_("Schedule"))
schedule = models.ForeignKey(
Schedule,
verbose_name=_("Schedule"),
date = models.DateField(verbose_name=_("Date"))
def __str__(self):
@@ -53,7 +63,11 @@ class Day(models.Model):
class Room(models.Model):
name = models.CharField(max_length=65, verbose_name=_("Name"))
order = models.PositiveIntegerField(verbose_name=_("Order"))
@@ -70,8 +84,8 @@ class Room(models.Model):
class Track(models.Model):
name = models.CharField(max_length=80, verbose_name=_("Track"))
room = models.ForeignKey(Room)
day = models.ForeignKey(Day)
room = models.ForeignKey(Room, on_delete=models.CASCADE)
day = models.ForeignKey(Day, on_delete=models.CASCADE)
return self.name
@@ -88,7 +102,11 @@ class SlotKind(models.Model):
break, lunch, or X-minute talk.
"""
schedule = models.ForeignKey(Schedule, verbose_name=_("schedule"))
verbose_name=_("schedule"),
label = models.CharField(max_length=50, verbose_name=_("Label"))
@@ -103,8 +121,16 @@ class Slot(models.Model):
name = models.CharField(max_length=512, editable=False)
day = models.ForeignKey(Day, verbose_name=_("Day"))
kind = models.ForeignKey(SlotKind, verbose_name=_("Kind"))
day = models.ForeignKey(
Day,
verbose_name=_("Day"),
kind = models.ForeignKey(
SlotKind,
verbose_name=_("Kind"),
start = models.TimeField(verbose_name=_("Start"))
end = models.TimeField(verbose_name=_("End"))
exclusive = models.BooleanField(
@@ -194,8 +220,16 @@ class SlotRoom(models.Model):
Links a slot with a room.
slot = models.ForeignKey(Slot, verbose_name=_("Slot"))
room = models.ForeignKey(Room, verbose_name=_("Room"))
slot = models.ForeignKey(
Slot,
verbose_name=_("Slot"),
room = models.ForeignKey(
Room,
verbose_name=_("Room"),
return "%s %s" % (self.room, self.slot)
@@ -210,11 +244,23 @@ class SlotRoom(models.Model):
class Presentation(models.Model):
slot = models.OneToOneField(Slot, null=True, blank=True, related_name="content_ptr", verbose_name=_("Slot"))
slot = models.OneToOneField(
null=True,
blank=True,
related_name="content_ptr",
title = models.CharField(max_length=100, verbose_name=_("Title"))
abstract = models.TextField(verbose_name=_("Abstract"))
abstract_html = models.TextField(blank=True)
speaker = models.ForeignKey(Speaker, related_name="presentations", verbose_name=_("Speaker"))
speaker = models.ForeignKey(
Speaker,
related_name="presentations",
verbose_name=_("Speaker"),
additional_speakers = models.ManyToManyField(Speaker, related_name="copresentations",
blank=True, verbose_name=_("Additional speakers"))
unpublish = models.BooleanField(
@@ -222,8 +268,18 @@ class Presentation(models.Model):
verbose_name=_("Do not publish"),
cancelled = models.BooleanField(default=False, verbose_name=_("Cancelled"))
proposal_base = models.OneToOneField(ProposalBase, related_name="presentation", verbose_name=_("Proposal base"))
section = models.ForeignKey(Section, related_name="presentations", verbose_name=_("Section"))
proposal_base = models.OneToOneField(
ProposalBase,
related_name="presentation",
verbose_name=_("Proposal base"),
section = models.ForeignKey(
def save(self, *args, **kwargs):
self.abstract_html = parse(self.abstract)
@@ -256,7 +312,12 @@ class Presentation(models.Model):
class Session(models.Model):
day = models.ForeignKey(Day, related_name="sessions", verbose_name=_("Day"))
related_name="sessions",
slots = models.ManyToManyField(Slot, related_name="sessions", verbose_name=_("Slots"))
def sorted_slots(self):
@@ -318,8 +379,16 @@ class SessionRole(models.Model):
(SESSION_ROLE_RUNNER, _("Session Runner")),
]
session = models.ForeignKey(Session, verbose_name=_("Session"))
user = models.ForeignKey(User, verbose_name=_("User"))
session = models.ForeignKey(
Session,
verbose_name=_("Session"),
user = models.ForeignKey(
User,
verbose_name=_("User"),
role = models.IntegerField(choices=SESSION_ROLE_TYPES, verbose_name=_("Role"))
status = models.NullBooleanField(verbose_name=_("Status"))