Files
web2.0-backend/webapp/models.py
T
2017-09-20 18:01:44 +03:00

148 lines
4.0 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
from auditlog.registry import auditlog
from phonenumber_field.modelfields import PhoneNumberField
from django.contrib.postgres.fields import JSONField
class Tag(models.Model):
slug = models.SlugField(primary_key=True)
name = models.CharField(max_length=127)
icon = models.ImageField()
class BaseFeed(models.Model):
'''
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)
registration = models.ForeignKey('Registration', on_delete=models.CASCADE, null=True)
class Registration(models.Model):
name = models.CharField(max_length=256)
email = models.EmailField()
options = JSONField()
class BaseRole(models.Model):
'''
Base model for occupations/roles
'''
name = models.CharField(_('Name'), max_length=256)
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(models.Model):
pass
class KaehmyMessage(MessageParent):
'''
Model representing a kaehmymessage.
Every message relates to certain kaehmyform or parent message.
'''
name = models.CharField(_('Name'), max_length=256)
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.CharField(_('Name'), max_length=256)
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 = PhoneNumberField(_('Phone number'))
#Ohlhafv
class OhlhafvChallenge(models.Model):
'''
Model containing all info about ohlhafv challenge
'''
SERIES_CHOICES = (
('0.33 L', '0.33 L'),
('0.5 L', '0.5 L'),
('1.0 L', '1.0 L'),
)
challenger = models.CharField(max_length=256)
victim = models.CharField(max_length=256)
challenger_email = models.EmailField()
victim_email = models.EmailField()
series = models.CharField(choices=SERIES_CHOICES, max_length=10)
message = models.TextField()
auditlog.register(Tag)
auditlog.register(Feed)
auditlog.register(Event)
auditlog.register(PresetRole)
auditlog.register(Role)
auditlog.register(Official)