Mercurial > public > sg101
diff gpp/gcalendar/models.py @ 1:dbd703f7d63a
Initial import of sg101 stuff from private repository.
author | gremmie |
---|---|
date | Mon, 06 Apr 2009 02:43:12 +0000 |
parents | |
children | 9c18250972d5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/gcalendar/models.py Mon Apr 06 02:43:12 2009 +0000 @@ -0,0 +1,101 @@ +""" +Models for the gcalendar application. +""" +from django.db import models +from django.db.models import Q +from django.contrib.auth.models import User +from django.template.loader import render_to_string + + +class PendingEventManager(models.Manager): + """A manager for pending events.""" + + def get_query_set(self): + """Returns a queryset of events that have been approved to update + the Google calendar.""" + return super(PendingEventManager, self).get_query_set().filter( + Q(status=Event.NEW_APRV) | \ + Q(status=Event.EDIT_APRV) | \ + Q(status=Event.DEL_APRV) + ) + + +class Event(models.Model): + """Model to represent calendar events.""" + + # Event status codes: + (NEW, NEW_APRV, EDIT_REQ, EDIT_APRV, DEL_REQ, DEL_APRV, ON_CAL) = range(7) + + STATUS_CHOICES = ( + (NEW, 'New'), + (NEW_APRV, 'New Approved'), + (EDIT_REQ, 'Edit Request'), + (EDIT_APRV, 'Edit Approved'), + (DEL_REQ, 'Delete Request'), + (DEL_APRV, 'Delete Approved'), + (ON_CAL, 'On Calendar'), + ) + + REPEAT_CHOICES = ( + ('none', 'Does not repeat'), + ('daily', 'Daily'), + ('weekly', 'Weekly'), + ('monthly', 'Monthly'), + ('yearly', 'Yearly') + ) + + user = models.ForeignKey(User) + what = models.CharField(max_length=255) + start_date = models.DateField() + start_time = models.TimeField(null=True, blank=True) + end_date = models.DateField() + end_time = models.TimeField(null=True, blank=True) + time_zone = models.CharField(max_length=64, blank=True) + all_day = models.BooleanField(default=False) + repeat = models.CharField(max_length=7, choices=REPEAT_CHOICES) + repeat_interval = models.IntegerField(null=True, blank=True, + help_text='Only valid for repeating events.') + until_date = models.DateField(null=True, blank=True, + help_text='Only valid for repeating events; leave blank for no end date.') + weekly_sun = models.BooleanField(default=False, verbose_name='Weekly on Sun', + help_text='Only valid for weekly repeats.') + weekly_mon = models.BooleanField(default=False, verbose_name='Weekly on Mon', + help_text='Only valid for weekly repeats.') + weekly_tue = models.BooleanField(default=False, verbose_name='Weekly on Tue', + help_text='Only valid for weekly repeats.') + weekly_wed = models.BooleanField(default=False, verbose_name='Weekly on Wed', + help_text='Only valid for weekly repeats.') + weekly_thu = models.BooleanField(default=False, verbose_name='Weekly on Thu', + help_text='Only valid for weekly repeats.') + weekly_fri = models.BooleanField(default=False, verbose_name='Weekly on Fri', + help_text='Only valid for weekly repeats.') + weekly_sat = models.BooleanField(default=False, verbose_name='Weekly on Sat', + help_text='Only valid for weekly repeats.') + monthly_by_day = models.BooleanField(default=False, + help_text='Only valid for monthly repeats; Checked: By day of the month, Unchecked: By day of the week.') + where = models.CharField(max_length=255, blank=True) + description = models.TextField(blank=True) + html = models.TextField(blank=True) + date_submitted = models.DateTimeField(auto_now_add=True) + google_id = models.CharField(max_length=255, blank=True) + status = models.SmallIntegerField(choices=STATUS_CHOICES, default=NEW, db_index=True) + + objects = models.Manager() + pending_events = PendingEventManager() + + def __unicode__(self): + return self.what + + class Meta: + ordering = ('-date_submitted', ) + + def save(self, *args, **kwargs): + html = render_to_string('gcalendar/markdown.html', {'data': self.description}) + self.html = html.strip() + super(Event, self).save(*args, **kwargs) + + def needs_approval(self): + return self.status in (self.NEW, self.EDIT_REQ, self.DEL_REQ) + + +# vim: ts=4 sw=4