dms/process/models.py

80 lines
2.0 KiB
Python

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):
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
def save(self):
raise NotImplemented('is_valid has to be implemented on the subprocess')
TASK_STATUS = (
(1, 'Created'),
(3, 'Completed')
)
class Task(models.Model):
assigned_to = models.EmailField()
process = models.ForeignKey(Process)
status = models.IntegerField(choices=TASK_STATUS)
def __str__(self):
return '{} - {}'.format(self.process, self.assigned_to)
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):
PROCESS_TYPE = 'Review'
def __str__(self):
return 'Review: {}'.format(self.document_version)
class Approval(Process, DraftProcessMixin):
PROCESS_TYPE = 'Approval'
class GatherComments(Process, DraftProcessMixin):
PROCESS_TYPE = 'GatherComments'
class Knowledge(Process, PublishedProcessMixin):
PROCESS_TYPE = 'Knowledge'
def allow_tasks_delegation(self):
return False