diff --git a/shared/utils/functional.py b/shared/utils/functional.py index 2c3cdaa..de8d076 100644 --- a/shared/utils/functional.py +++ b/shared/utils/functional.py @@ -1,8 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals -# Erik Stein , 2017 - - def firstof(*args, default=None): """ Returns the first value which is neither empty nor None. @@ -17,3 +12,7 @@ def firstof(*args, default=None): if value: return value return default + + +def join_existing(delimiter, *items): + return delimiter.join([str(i) for i in items if i]) diff --git a/shared/utils/models/workflow.py b/shared/utils/models/workflow.py index 9cf9875..4780681 100644 --- a/shared/utils/models/workflow.py +++ b/shared/utils/models/workflow.py @@ -41,6 +41,14 @@ class WorkflowQuerySet(models.QuerySet): "archiving_datetime__lte": timezone.now(), } + @classmethod + def future_filter(cls): + return { + "is_published": True, + "publication_datetime__gt": timezone.now(), + "archiving_datetime__gt": timezone.now(), + } + def unpublished(self): return self.exclude(**self.published_filter()) @@ -56,6 +64,9 @@ class WorkflowQuerySet(models.QuerySet): def archived(self): return self.filter(**self.archived_filter()) + def future(self): + return self.filter(**self.future_filter()) + class ManyToManyWorkflowQuerySet(WorkflowQuerySet): def _build_related_filters(self, filter_template): @@ -83,6 +94,9 @@ class ManyToManyWorkflowQuerySet(WorkflowQuerySet): def archived(self): return self.filter(**self._build_related_filters(self.archived_filter())) + def future(self): + return self.filter(**self._build_related_filters(self.future_filter())) + class WorkflowManager(models.Manager.from_queryset(WorkflowQuerySet)): pass @@ -115,9 +129,9 @@ class WorkflowMixin(models.Model): @property def worflow_status(self): now = timezone.now() - if not self.is_published or self.publication_datetime < now: + if not self.is_published or self.publication_datetime > now: return 'unpublished' - elif self.publication_datetime >= now and self.archiving_datetime < now: + elif self.publication_datetime <= now and self.archiving_datetime > now: return 'active' else: return 'archived'