CONT: continue the previous change.

This commit is contained in:
2019-01-29 17:25:03 +01:00
parent e6a5f9818a
commit 7667277862
14 changed files with 281 additions and 252 deletions

View File

@@ -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: