2017-09-20 15:34:03 +02:00
|
|
|
from django.db import models
|
|
|
|
|
|
|
|
from evolus.models import Version
|
|
|
|
|
|
|
|
|
|
|
|
class Process(models.Model):
|
|
|
|
process_type = models.CharField(max_length=50)
|
|
|
|
document_version = models.ForeignKey(Version)
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
if not self.pk and not self.process_type:
|
|
|
|
self.process_type = self.PROCESS_TYPE
|
|
|
|
|
|
|
|
def __str__(self):
|
2017-09-20 15:51:01 +02:00
|
|
|
return '{}: {}'.format(self.process_type, self.document_version)
|
|
|
|
|
|
|
|
def create_task(self, assigned_to):
|
|
|
|
task, created = Task.objects.get_or_create(status=1, assigned_to=assigned_to, process=self)
|
|
|
|
|
|
|
|
if created:
|
|
|
|
task.save()
|
|
|
|
|
|
|
|
def allow_tasks_delegation(self):
|
|
|
|
return True
|
|
|
|
|
2017-09-20 21:19:33 +02:00
|
|
|
def save(self):
|
|
|
|
raise NotImplemented('is_valid has to be implemented on the subprocess')
|
|
|
|
|
2017-09-20 15:51:01 +02:00
|
|
|
|
|
|
|
TASK_STATUS = (
|
|
|
|
(1, 'Created'),
|
|
|
|
(3, 'Completed')
|
|
|
|
)
|
2017-09-20 15:34:03 +02:00
|
|
|
|
|
|
|
|
|
|
|
class Task(models.Model):
|
|
|
|
assigned_to = models.EmailField()
|
|
|
|
process = models.ForeignKey(Process)
|
2017-09-20 15:51:01 +02:00
|
|
|
status = models.IntegerField(choices=TASK_STATUS)
|
2017-09-20 15:34:03 +02:00
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return '{} - {}'.format(self.process, self.assigned_to)
|
|
|
|
|
|
|
|
|
2017-09-20 21:19:33 +02:00
|
|
|
class PublishedProcessMixin(object):
|
|
|
|
def save(self, *args, **kwargs):
|
|
|
|
if self.document_version.status == 'Draft':
|
|
|
|
raise TypeError('Review flow cant apply to draft documents')
|
|
|
|
return super().save(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
class DraftProcessMixin(object):
|
|
|
|
def save(self, *args, **kwargs):
|
|
|
|
if self.document_version.status == 'Published':
|
|
|
|
raise TypeError('Review flow cant apply to published documents')
|
|
|
|
return super().save(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
class Review(Process, PublishedProcessMixin):
|
2017-09-20 15:34:03 +02:00
|
|
|
PROCESS_TYPE = 'Review'
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return 'Review: {}'.format(self.document_version)
|
|
|
|
|
|
|
|
|
2017-09-20 21:19:33 +02:00
|
|
|
class Approval(Process, DraftProcessMixin):
|
2017-09-20 15:34:03 +02:00
|
|
|
PROCESS_TYPE = 'Approval'
|
|
|
|
|
|
|
|
|
2017-09-20 21:19:33 +02:00
|
|
|
class GatherComments(Process, DraftProcessMixin):
|
2017-09-20 15:34:03 +02:00
|
|
|
PROCESS_TYPE = 'GatherComments'
|
|
|
|
|
|
|
|
|
2017-09-20 21:19:33 +02:00
|
|
|
class Knowledge(Process, PublishedProcessMixin):
|
2017-09-20 15:34:03 +02:00
|
|
|
PROCESS_TYPE = 'Knowledge'
|
2017-09-20 15:51:01 +02:00
|
|
|
|
|
|
|
def allow_tasks_delegation(self):
|
|
|
|
return False
|