|
@@ -0,0 +1,163 @@
|
|
|
+from datetime import datetime, timedelta
|
|
|
+from dateutil.relativedelta import relativedelta
|
|
|
+
|
|
|
+from django.db import models
|
|
|
+from django.utils.translation import ugettext_lazy as _
|
|
|
+from django.core.urlresolvers import reverse
|
|
|
+from django.template.defaultfilters import slugify
|
|
|
+
|
|
|
+from django.contrib.auth.models import User
|
|
|
+from django_extensions.db.models import TimeStampedModel
|
|
|
+from remember.managers import PublishedManager
|
|
|
+
|
|
|
+class PublishExpiringModel(TimeStampedModel):
|
|
|
+ expires_on=models.DateTimeField(_('Expires on'), default=datetime.today()+timedelta(days=7), blank=True, null=True)
|
|
|
+ published=models.BooleanField(_('Published'), default=False)
|
|
|
+ published_on=models.DateTimeField(_('Published on'))
|
|
|
+
|
|
|
+ objects = PublishedManager()
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ abstract=True
|
|
|
+
|
|
|
+class RemembrancePhoto(PublishExpiringModel):
|
|
|
+ name=models.CharField(_('Name'), max_length=100)
|
|
|
+ image=models.ImageField(_('Image'), upload_to='remember/photos/')
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ ordering = ('-published_on',)
|
|
|
+
|
|
|
+ def __unicode__(self):
|
|
|
+ return u'%s' % (self.name)
|
|
|
+
|
|
|
+
|
|
|
+class InMemoriam(PublishExpiringModel):
|
|
|
+ '''In Memorum model.
|
|
|
+ Effectively an anniversary obit. Runs anytime, not just at TOD.'''
|
|
|
+ title=models.CharField(_('Title'), max_length=140)
|
|
|
+ slug=models.SlugField(_('Slug'), unique=True)
|
|
|
+ dateline=models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
|
|
|
+ name=models.CharField(_('Name'), max_length=70, blank=True, null=True)
|
|
|
+ copy=models.TextField(_('Copy'))
|
|
|
+ photos=models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
|
|
|
+ military=models.BooleanField(_('Military service?'), default=False)
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ ordering = ('-published_on',)
|
|
|
+ verbose_name = _('In memoriam')
|
|
|
+ verbose_name_plural = _('In memoriams')
|
|
|
+
|
|
|
+ def __unicode__(self):
|
|
|
+ return u'%s' % (self.title)
|
|
|
+
|
|
|
+ #@models.permalink
|
|
|
+ #def get_absolute_url(self):
|
|
|
+ # return ('rm-inmemoriam-detail', None, {'slug': self.slug})
|
|
|
+
|
|
|
+class Remembrance(PublishExpiringModel):
|
|
|
+ '''Remembrance model.
|
|
|
+ An obituary by any other name.'''
|
|
|
+ name=models.CharField(_('Name'), max_length=100)
|
|
|
+ slug=models.SlugField(_('Slug'), unique=True)
|
|
|
+ dateline=models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
|
|
|
+ body=models.TextField(_('Body'))
|
|
|
+ photos=models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
|
|
|
+ military=models.BooleanField(_('Military service?'), default=False)
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ ordering = ('-published_on',)
|
|
|
+ verbose_name = _('Remembrance')
|
|
|
+ verbose_name_plural = _('Remembrances')
|
|
|
+
|
|
|
+ def __unicode__(self):
|
|
|
+ return u'%s' % self.name
|
|
|
+
|
|
|
+ #@models.permalink
|
|
|
+ #def get_absolute_url(self):
|
|
|
+ # return ('rm-remembrance-detail', None, {'slug': self.slug})
|
|
|
+
|
|
|
+
|
|
|
+class Announcement(PublishExpiringModel):
|
|
|
+ '''Announcement model.
|
|
|
+ A simple announcement of a death.'''
|
|
|
+ first_name=models.CharField(_('First name'), max_length=70)
|
|
|
+ middle_name=models.CharField(_('Middle name'), max_length=70, blank=True, null=True)
|
|
|
+ last_name=models.CharField(_('Last name'), max_length=70)
|
|
|
+ slug=models.SlugField(_('Slug'), unique=True)
|
|
|
+ copy=models.TextField(_('Copy'))
|
|
|
+ '''
|
|
|
+ nickname=models.CharField(_('Nickname'), blank=True, null=True, max_length=100)
|
|
|
+ residence=models.CharField(_('Residence'), blank=True, null=True, max_length=100)
|
|
|
+ fixed_age=models.IntegerField(_('Age'), max_length=3, blank=True, null=True)
|
|
|
+ birth_year=models.IntegerField(max_length=4, blank=True, null=True)
|
|
|
+ birth_date=models.DateField(blank=True, null=True)
|
|
|
+ death_date=models.DateField(blank=True, null=True)
|
|
|
+ death_location=models.CharField(_('Death location'), blank=True, null=True, max_length=200)
|
|
|
+ remembrance=models.ForeignKey(Remembrance, blank=True, null=True)
|
|
|
+ service_date=models.DateTimeField(blank=True, null=True)
|
|
|
+ service_location=models.CharField(blank=True, null=True, max_length=200)
|
|
|
+ armed_service=models.BooleanField(_('Armed service'), default=False)
|
|
|
+ service_branch=models.CharField(_('Service branch'), blank=True, null=True, max_length=20)'''
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ ordering = ('-published_on',)
|
|
|
+ verbose_name=_('announcement')
|
|
|
+ verbose_name_plural=_('annoucements')
|
|
|
+
|
|
|
+ @property
|
|
|
+ def full_name(self):
|
|
|
+ if self.middle_name:
|
|
|
+ name = u'%s %s. %s' % (self.first_name, self.middle_name[0].capitalize(), self.last_name)
|
|
|
+ else:
|
|
|
+ name = u'%s %s' % (self.first_name, self.last_name)
|
|
|
+ return name
|
|
|
+
|
|
|
+
|
|
|
+ def __unicode__(self):
|
|
|
+ return u'%s' % self.full_name
|
|
|
+
|
|
|
+ '''@property
|
|
|
+ def age(self):
|
|
|
+ if self.fixed_age:
|
|
|
+ age = self.fixed_age
|
|
|
+ else:
|
|
|
+ if self.death_date:
|
|
|
+ DELTA=self.death_date
|
|
|
+ else:
|
|
|
+ DELTA=datetime.today()
|
|
|
+ age = relativedelta(DELTA, self.birth_date).years
|
|
|
+ return u'%s' % relativedelta(DELTA, self.birth_date).years'''
|
|
|
+
|
|
|
+ #@models.permalink
|
|
|
+ #def get_absolute_url(self):
|
|
|
+ # return ('rm-announcement-detail', None, {'slug': self.slug})
|
|
|
+
|
|
|
+class Service(PublishExpiringModel):
|
|
|
+ '''Service model.'''
|
|
|
+ announcement=models.ForeignKey(Announcement, blank=True, null=True)
|
|
|
+ name=models.CharField(_('Title'), max_length=100, blank=True, null=True)
|
|
|
+ slug=models.SlugField(_('Slug'), unique=True, blank=True)
|
|
|
+ location=models.CharField(_('Location'), max_length=200, blank=True, null=True)
|
|
|
+ date=models.DateTimeField(_('Date and time'), blank=True, null=True)
|
|
|
+ body=models.TextField(_('Body'))
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ verbose_name = _('sevice')
|
|
|
+ verbose_name_plural = _('services')
|
|
|
+
|
|
|
+ def __unicode__(self):
|
|
|
+ if self.announcement:
|
|
|
+ return self.announcement.slug + " memorial service"
|
|
|
+ else:
|
|
|
+ return u'%s' % self.name
|
|
|
+
|
|
|
+ def save(self):
|
|
|
+ if not self.slug and self.announcement:
|
|
|
+ self.slug = self.announcement.slug
|
|
|
+ else:
|
|
|
+ self.slug = slugify(self.name)
|
|
|
+ super(TimeStampedModel, self).save()
|
|
|
+
|
|
|
+ #@models.permalink
|
|
|
+ #def get_absolute_url(self):
|
|
|
+ # return ('rm-service-detail', None, {'slug': self.slug})
|