131 lines
3.4 KiB
Python
131 lines
3.4 KiB
Python
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'))
|