CONT: continue the previous change.
This commit is contained in:
@@ -19,9 +19,9 @@ from .. import choices
|
||||
from .. import config
|
||||
from .. import signals
|
||||
from ..utils import get_ghost_user, get_system_user
|
||||
from ..workflow import workflow
|
||||
from ..workflow import DefaultWorkflow
|
||||
|
||||
from .eventstatus import EventStatus, get_event_status
|
||||
from .eventstatus import EventStatus, get_or_create_event_status
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -232,6 +232,10 @@ class Event(models.Model):
|
||||
internal_note = models.TextField(blank=True,
|
||||
verbose_name=_(u'Bearbeitungshinweis'))
|
||||
|
||||
@property
|
||||
def workflow(self):
|
||||
return DefaultWorkflow(self)
|
||||
|
||||
@property
|
||||
def editor(self):
|
||||
if not hasattr(self, '_editor'):
|
||||
@@ -302,7 +306,7 @@ class Event(models.Model):
|
||||
if creating:
|
||||
logger.info('Event created: %s', self)
|
||||
signals.event_created.send(sender=self.__class__, event=self)
|
||||
self.confirm_status('draft', self.editor)
|
||||
self.workflow.update_status('draft', self.editor)
|
||||
elif not implicit_update:
|
||||
modified_text = self.render_as_text(show_internal_fields=True)
|
||||
o_lines = original_text.split('\n')
|
||||
@@ -311,9 +315,10 @@ class Event(models.Model):
|
||||
logger.info('Event updated: %s', self)
|
||||
signals.event_updated.send(sender=self.__class__, event=self, diff=diff_lines, user=self.editor)
|
||||
|
||||
# TODO: move this into workflow
|
||||
def set_flag(self, status, **kwargs):
|
||||
if not isinstance(status, EventStatus):
|
||||
status = get_event_status(status)
|
||||
status = get_or_create_event_status(status)
|
||||
kwargs['event'] = self
|
||||
kwargs['status'] = status
|
||||
flag = EventFlag(**kwargs)
|
||||
@@ -321,80 +326,8 @@ class Event(models.Model):
|
||||
logger.info('Flagging status \'%s\' for %s', status.code, self)
|
||||
return flag
|
||||
|
||||
def is_flagged(self, status):
|
||||
if isinstance(status, EventStatus):
|
||||
code = status.code
|
||||
else:
|
||||
code = status
|
||||
workflow.status_code_update(self, code)
|
||||
if self.flags.filter(status__code=code).exists():
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_status_flags(self):
|
||||
return workflow.get_status_flags(self)
|
||||
|
||||
def get_status(self):
|
||||
workflow.status_code_update(self)
|
||||
|
||||
last_flag = self.flags.last()
|
||||
if last_flag:
|
||||
return last_flag.status
|
||||
return get_event_status('void')
|
||||
|
||||
def get_status_codes(self):
|
||||
workflow.status_code_update(self)
|
||||
return [flag.status.code for flag in self.flags.all()]
|
||||
|
||||
def confirm_status(self, status, user):
|
||||
if isinstance(status, EventStatus):
|
||||
code = status.code
|
||||
else:
|
||||
code = status
|
||||
|
||||
flag = self.flags.filter(status__code=code).last()
|
||||
if flag:
|
||||
return flag
|
||||
|
||||
valid, return_code, message = workflow.validate_status_code_update(code, self)
|
||||
if not valid:
|
||||
logger.warning(u'Invalid status update to \'%s\': %s Event: %s', code, message, self)
|
||||
|
||||
flag = self.set_flag(status=code, user=user)
|
||||
|
||||
workflow.status_code_update(self, code)
|
||||
signals.event_status_updated.send(sender=self.__class__, event=self, flag=flag)
|
||||
|
||||
return flag
|
||||
|
||||
def get_number(self):
|
||||
number = workflow.get_number(self)
|
||||
if number:
|
||||
return number
|
||||
else:
|
||||
return '%s**/%d' % (self.sport, self.first_day.year % 100)
|
||||
|
||||
def set_next_number(self):
|
||||
counter = 0
|
||||
|
||||
year = self.first_day.year
|
||||
year_begin = datetime.date(year, 1, 1)
|
||||
year_end = datetime.date(year, 12, 31)
|
||||
qs = Event.objects.filter(number__isnull=False,
|
||||
sport=self.sport,
|
||||
first_day__gte=year_begin,
|
||||
first_day__lte=year_end).order_by('number')
|
||||
last = qs.last()
|
||||
if last:
|
||||
match = re.match(r'^(?P<sport>[A-Z])(?P<count>[0-9][0-9]*)/(?P<year>[0-9][0-9]*)', last.number)
|
||||
if match:
|
||||
gd = match.groupdict()
|
||||
counter = int(gd['count'])
|
||||
|
||||
counter += 1
|
||||
self.number = '%s%02d/%d' % (self.sport, counter, year % 100)
|
||||
self.save(implicit_update=True)
|
||||
return self.number
|
||||
return self.workflow.get_number()
|
||||
|
||||
def get_formated_date(self, begin_date=None, end_date=None, format='normalized_long'):
|
||||
if begin_date is None:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from django.db import models
|
||||
from django.utils.html import format_html
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from ..validators import IdStringValidator
|
||||
@@ -12,34 +12,6 @@ BOOTSTRAP_CONTEXT_CHOICES = (
|
||||
('warning', 'warning'),
|
||||
('danger', 'danger'),
|
||||
)
|
||||
DEFAULT_EVENT_STATI = {
|
||||
'void': (0, _(u'Ungültig'), None),
|
||||
'draft': (10, _(u'Entwurf'), 'info'),
|
||||
'submitted': (30, _(u'Eingereicht'), 'danger'),
|
||||
'accepted': (50, _(u'Freigegeben'), 'warning'),
|
||||
'publishing_facebook': (68, _(u'Veröffentlichung Facebook'), 'warning'),
|
||||
'publishing_web': (69, _(u'Veröffentlichung Web'), 'warning'),
|
||||
'publishing': (70, _(u'Veröffentlichung'), 'warning'),
|
||||
'published_facebook': (78, _(u'Veröffentlicht Facebook'), 'success'),
|
||||
'published_web': (79, _(u'Veröffentlicht Web'), 'success'),
|
||||
'published': (80, _(u'Veröffentlicht'), 'success'),
|
||||
'expired': (100, _(u'Ausgelaufen'), None),
|
||||
}
|
||||
|
||||
|
||||
def get_event_status(code):
|
||||
try:
|
||||
obj = EventStatus.objects.get(code=code)
|
||||
except EventStatus.DoesNotExist as e:
|
||||
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
|
||||
|
||||
|
||||
class EventStatus(models.Model):
|
||||
@@ -60,5 +32,24 @@ class EventStatus(models.Model):
|
||||
|
||||
def get_bootstrap_label(self):
|
||||
context = self.bootstrap_context or 'default'
|
||||
return u'<span class="label label-{context}">{label}</span>'.format(context=context,
|
||||
label=self.label)
|
||||
return format_html(u'<span class="label label-{context}">{label}</span>',
|
||||
context=context,
|
||||
label=self.label)
|
||||
#return u'<span class="label label-{context}">{label}</span>'.format(context=context,
|
||||
# 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
|
||||
|
||||
@@ -86,7 +86,7 @@ class OneClickAction(models.Model):
|
||||
'user': flag.user.get_full_name(),
|
||||
})
|
||||
else:
|
||||
flag = event.confirm_status(status_code, user)
|
||||
flag = event.workflow.update_status(status_code, user)
|
||||
message = (ugettext(u'Der Status wurde auf \'%(status)s\' gesetzt.') %
|
||||
{'status': flag.status.label})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user