from django.db import models from django.utils import timezone from datetime import timedelta from django.contrib.auth.models import User from webapp.utils import month_from_now from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User class AuditLogEntry(models.Model): ''' A single entry in the audit log ''' user = models.ForeignKey('Official') date = models.DateTimeField(default=timezone.now) event = models.CharField(choices=[ ('CREATED', _('Created')), ('MODIFIED', _('Modified')), ('DELETED', _('Deleted'))], max_length=10) class AuditedModel(models.Model): ''' Superclass for all audited models, e.g. events ''' pass class Tag(AuditedModel): slug = models.SlugField(primary_key=True) name = models.CharField(max_length=127) icon = models.ImageField() class BaseFeed(AuditedModel): ''' model containing something showing on some info feed ''' tags = models.ManyToManyField(Tag, related_name="feeds", blank=True) visible = models.BooleanField(default=True) title = models.CharField(max_length=255) description = models.CharField(max_length=255) content = models.TextField() class Feed(BaseFeed): publish_time = models.DateTimeField(default=timezone.now) autohide = models.DateTimeField(default=month_from_now) class Event(BaseFeed): start_time = models.DateTimeField(default=timezone.now) end_time = models.DateTimeField(default=timezone.now) class BaseRole(AuditedModel): ''' Base model for occupations/roles ''' name = models.TextField(_('Name')) is_board = models.BooleanField(_('Board member')) class PresetRole(BaseRole): ''' Model representing a preset occupation in the guild ''' description = models.TextField(_('Description')) summary = models.TextField(_('Summary')) class PresetKaehmyRole(PresetRole): form = models.ForeignKey('KaehmyForm', related_name='preset_roles') class CustomKaehmyRole(BaseRole): ''' Model representing a user-specified custom occupation ''' form = models.ForeignKey('KaehmyForm', related_name='custom_roles') class MessageParent(AuditedModel): pass class KaehmyMessage(MessageParent): ''' Model representing a kaehmymessage. Every message relates to certain kaehmyform or parent message. ''' name = models.TextField(_('Name')) email = models.EmailField(_('Email')) message = models.TextField(_('Message')) parent = models.ForeignKey('MessageParent', related_name='messages') class KaehmyForm(MessageParent): ''' Model representing a form for kaehmy. Allows user to choose from existing roles or to create custom ones. ''' name = models.TextField(_('Name')) email = models.EmailField(_('Email')) year = models.IntegerField(_('Year')) class Role(PresetRole): ''' Model representing an active or historical occupation in an official's history ''' class Meta: verbose_name = _('Role') start_date = models.DateField(_('Start date')) end_date = models.DateField(_('End date')) official = models.ForeignKey('Official', related_name='roles') class Official(User): ''' Model representing a guild official ''' class Meta: verbose_name = _('Official') phone_number = models.TextField(_('Phone number'))