from __future__ import unicode_literals from django.db import models from django.utils.translation import gettext_lazy as _ from ..validators import IdStringValidator BOOTSTRAP_CONTEXT_CHOICES = ( ('default', 'default'), ('primary', 'primary'), ('success', 'success'), ('info', 'info'), ('warning', 'warning'), ('danger', 'danger'), ('black', 'black'), ('dav-purple', 'dav-purple'), ('dav-lime', 'dav-lime'), ('dav-cyan', 'dav-cyan'), ('dav-caramel', 'dav-caramel'), ('dav-mandarin', 'dav-mandarin'), ('dav-brown', 'dav-brown'), ) class EventStatus(models.Model): code = models.CharField(primary_key=True, max_length=254, validators=[IdStringValidator]) severity = models.IntegerField(unique=True) label = models.CharField(unique=True, max_length=254) bootstrap_context = models.CharField(max_length=20, blank=True, choices=BOOTSTRAP_CONTEXT_CHOICES) class Meta: verbose_name = _('Veranstaltungsstatus') verbose_name_plural = _('Veranstaltungsstati') ordering = ['severity'] def __str__(self): return '{severity} - {code} ({label})'.format(code=self.code, severity=self.severity, label=self.label) def get_or_create_event_status(code): try: obj = EventStatus.objects.get(code=code) except EventStatus.DoesNotExist as e: from ..workflow import DEFAULT_EVENT_STATI if code not in DEFAULT_EVENT_STATI: raise e severity = DEFAULT_EVENT_STATI[code][0] label = DEFAULT_EVENT_STATI[code][1] obj = EventStatus(code=code, severity=severity, label=label) if DEFAULT_EVENT_STATI[code][2]: obj.bootstrap_context = DEFAULT_EVENT_STATI[code][2] obj.save() return obj