Add support for workflow transition triggers.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-03 04:01:11 -04:00
parent 4560009927
commit 81f481fadf
14 changed files with 359 additions and 22 deletions

View File

@@ -13,6 +13,7 @@ from django.utils.translation import ugettext_lazy as _
from acls.models import AccessControlList
from common.validators import validate_internal_name
from documents.models import Document, DocumentType
from events.models import EventType
from permissions import Permission
from .managers import WorkflowManager
@@ -178,6 +179,24 @@ class WorkflowTransition(models.Model):
verbose_name_plural = _('Workflow transitions')
@python_2_unicode_compatible
class WorkflowTransitionTriggerEvent(models.Model):
transition = models.ForeignKey(
WorkflowTransition, on_delete=models.CASCADE,
related_name='trigger_events', verbose_name=_('Transition')
)
event_type = models.ForeignKey(
EventType, on_delete=models.CASCADE, verbose_name=_('Event type')
)
class Meta:
verbose_name = _('Workflow transition trigger event')
verbose_name_plural = _('Workflow transitions trigger events')
def __str__(self):
return force_text(self.transition)
@python_2_unicode_compatible
class WorkflowInstance(models.Model):
workflow = models.ForeignKey(
@@ -197,7 +216,7 @@ class WorkflowInstance(models.Model):
'document_states:workflow_instance_detail', args=(str(self.pk),)
)
def do_transition(self, transition, user, comment=None):
def do_transition(self, transition, user=None, comment=None):
try:
if transition in self.get_current_state().origin_transitions.all():
self.log_entries.create(
@@ -306,8 +325,8 @@ class WorkflowInstanceLogEntry(models.Model):
verbose_name=_('Transition')
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
verbose_name=_('User')
settings.AUTH_USER_MODEL, blank=True, null=True,
on_delete=models.CASCADE, verbose_name=_('User')
)
comment = models.TextField(blank=True, verbose_name=_('Comment'))