models.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. from datetime import datetime, timedelta
  2. from dateutil.relativedelta import relativedelta
  3. from django.contrib.auth.models import User
  4. from django.core.urlresolvers import reverse
  5. from django.db import models
  6. from django.template.defaultfilters import slugify
  7. from django.utils.translation import ugettext_lazy as _
  8. from django_extensions.db.fields import AutoSlugField
  9. from django_extensions.db.models import TimeStampedModel
  10. from remember.managers import PublishedManager
  11. class PublishExpiringModel(TimeStampedModel):
  12. expires_on = models.DateTimeField(_('Expires on'), default=datetime.today()+timedelta(days=7), blank=True, null=True)
  13. published = models.BooleanField(_('Published'), default=False)
  14. published_on = models.DateTimeField(_('Published on'))
  15. objects = PublishedManager()
  16. class Meta:
  17. abstract=True
  18. class RemembrancePhoto(PublishExpiringModel):
  19. name = models.CharField(_('Name'), max_length=100)
  20. image = models.ImageField(_('Image'), upload_to='remember/photos/')
  21. class Meta:
  22. ordering = ('-published_on',)
  23. def __unicode__(self):
  24. return u'%s' % (self.name)
  25. class InMemoriam(PublishExpiringModel):
  26. '''In Memorum model.
  27. Effectively an anniversary obit. Runs anytime, not just at TOD.'''
  28. title = models.CharField(_('Title'), max_length=140)
  29. slug = AutoSlugField(_('slug'), populate_from='title', editable=True)
  30. dateline = models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
  31. name = models.CharField(_('Name'), max_length=70, blank=True, null=True)
  32. copy = models.TextField(_('Copy'))
  33. photos = models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
  34. military = models.BooleanField(_('Military service?'), default=False)
  35. class Meta:
  36. ordering = ('-published_on',)
  37. verbose_name = _('In memoriam')
  38. verbose_name_plural = _('In memoriams')
  39. def __unicode__(self):
  40. return u'%s' % (self.title)
  41. #@models.permalink
  42. #def get_absolute_url(self):
  43. # return ('rm-inmemoriam-detail', None, {'slug': self.slug})
  44. class Remembrance(PublishExpiringModel):
  45. '''Remembrance model.
  46. An obituary by any other name.'''
  47. name = models.CharField(_('Name'), max_length=100)
  48. slug = AutoSlugField(_('slug'), populate_from='name', editable=True)
  49. dateline = models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
  50. body = models.TextField(_('Body'))
  51. photos = models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
  52. military = models.BooleanField(_('Military service?'), default=False)
  53. class Meta:
  54. ordering = ('-published_on',)
  55. verbose_name = _('Remembrance')
  56. verbose_name_plural = _('Remembrances')
  57. def __unicode__(self):
  58. return u'%s' % self.name
  59. #@models.permalink
  60. #def get_absolute_url(self):
  61. # return ('rm-remembrance-detail', None, {'slug': self.slug})
  62. class Announcement(PublishExpiringModel):
  63. '''Announcement model.
  64. A simple announcement of a death.'''
  65. first_name = models.CharField(_('First name'), max_length=70)
  66. middle_name = models.CharField(_('Middle name'), max_length=70, blank=True, null=True)
  67. last_name = models.CharField(_('Last name'), max_length=70)
  68. slug = AutoSlugField(_('slug'), populate_from='name', editable=True)
  69. copy = models.TextField(_('Copy'))
  70. '''
  71. nickname = models.CharField(_('Nickname'), blank=True, null=True, max_length=100)
  72. residence = models.CharField(_('Residence'), blank=True, null=True, max_length=100)
  73. fixed_age = models.IntegerField(_('Age'), max_length=3, blank=True, null=True)
  74. birth_year = models.IntegerField(max_length=4, blank=True, null=True)
  75. birth_date = models.DateField(blank=True, null=True)
  76. death_date = models.DateField(blank=True, null=True)
  77. death_location = models.CharField(_('Death location'), blank=True, null=True, max_length=200)
  78. remembrance = models.ForeignKey(Remembrance, blank=True, null=True)
  79. service_date = models.DateTimeField(blank=True, null=True)
  80. service_location = models.CharField(blank=True, null=True, max_length=200)
  81. armed_service = models.BooleanField(_('Armed service'), default=False)
  82. service_branch = models.CharField(_('Service branch'), blank=True, null=True, max_length=20)'''
  83. class Meta:
  84. ordering = ('-published_on',)
  85. verbose_name=_('announcement')
  86. verbose_name_plural=_('annoucements')
  87. @property
  88. def full_name(self):
  89. if self.middle_name:
  90. name = u'%s %s. %s' % (self.first_name, self.middle_name[0].capitalize(), self.last_name)
  91. else:
  92. name = u'%s %s' % (self.first_name, self.last_name)
  93. return name
  94. def __unicode__(self):
  95. return u'%s' % self.full_name
  96. '''@property
  97. def age(self):
  98. if self.fixed_age:
  99. age = self.fixed_age
  100. else:
  101. if self.death_date:
  102. DELTA=self.death_date
  103. else:
  104. DELTA=datetime.today()
  105. age = relativedelta(DELTA, self.birth_date).years
  106. return u'%s' % relativedelta(DELTA, self.birth_date).years'''
  107. #@models.permalink
  108. #def get_absolute_url(self):
  109. # return ('rm-announcement-detail', None, {'slug': self.slug})
  110. class Service(PublishExpiringModel):
  111. '''Service model.'''
  112. announcement = models.ForeignKey(Announcement, blank=True, null=True)
  113. name = models.CharField(_('Title'), max_length=100, blank=True, null=True)
  114. slug = AutoSlugField(_('slug'), populate_from='name', editable=True)
  115. location = models.CharField(_('Location'), max_length=200, blank=True, null=True)
  116. date = models.DateTimeField(_('Date and time'), blank=True, null=True)
  117. body = models.TextField(_('Body'))
  118. class Meta:
  119. verbose_name = _('sevice')
  120. verbose_name_plural = _('services')
  121. def __unicode__(self):
  122. if self.announcement:
  123. return self.announcement.slug + " memorial service"
  124. else:
  125. return u'%s' % self.name
  126. #@models.permalink
  127. #def get_absolute_url(self):
  128. # return ('rm-service-detail', None, {'slug': self.slug})