Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
(APPROVED, _('Approved')),
(CANCELLED, _('Cancelled')),
]
LOGGER = logging.getLogger(__name__)
class TransitionApproval(BaseModel):
class Meta:
app_label = 'river'
verbose_name = _("Transition Approval")
verbose_name_plural = _("Transition Approvals")
objects = TransitionApprovalManager()
content_type = models.ForeignKey(app_config.CONTENT_TYPE_CLASS, verbose_name=_('Content Type'), on_delete=CASCADE)
object_id = models.CharField(max_length=50, verbose_name=_('Related Object'))
workflow_object = GenericForeignKey('content_type', 'object_id')
meta = models.ForeignKey(TransitionApprovalMeta, verbose_name=_('Meta'), related_name="transition_approvals", null=True, blank=True, on_delete=SET_NULL)
workflow = models.ForeignKey(Workflow, verbose_name=_("Workflow"), related_name='transition_approvals', on_delete=PROTECT)
source_state = models.ForeignKey(State, verbose_name=_("Source State"), related_name='transition_approvals_as_source', on_delete=PROTECT)
destination_state = models.ForeignKey(State, verbose_name=_("Next State"), related_name='transition_approvals_as_destination', on_delete=PROTECT)
transactioner = models.ForeignKey(app_config.USER_CLASS, verbose_name=_('Transactioner'), null=True, blank=True, on_delete=SET_NULL)
transaction_date = models.DateTimeField(null=True, blank=True)
status = models.CharField(_('Status'), choices=STATUSES, max_length=100, default=PENDING)
skipped = models.BooleanField(_('Skip'), default=False)
(CANCELLED, _('Cancelled')),
(JUMPED, _('Jumped')),
]
LOGGER = logging.getLogger(__name__)
class TransitionApproval(BaseModel):
class Meta:
app_label = 'river'
verbose_name = _("Transition Approval")
verbose_name_plural = _("Transition Approvals")
objects = TransitionApprovalManager()
content_type = models.ForeignKey(app_config.CONTENT_TYPE_CLASS, verbose_name=_('Content Type'), on_delete=CASCADE)
object_id = models.CharField(max_length=50, verbose_name=_('Related Object'))
workflow_object = GenericForeignKey('content_type', 'object_id')
meta = models.ForeignKey(TransitionApprovalMeta, verbose_name=_('Meta'), related_name="transition_approvals", null=True, blank=True, on_delete=SET_NULL)
workflow = models.ForeignKey(Workflow, verbose_name=_("Workflow"), related_name='transition_approvals', on_delete=PROTECT)
transition = models.ForeignKey(Transition, verbose_name=_("Transition"), related_name='transition_approvals', on_delete=PROTECT)
transactioner = models.ForeignKey(app_config.USER_CLASS, verbose_name=_('Transactioner'), null=True, blank=True, on_delete=SET_NULL)
transaction_date = models.DateTimeField(null=True, blank=True)
status = models.CharField(_('Status'), choices=STATUSES, max_length=100, default=PENDING)
permissions = models.ManyToManyField(app_config.PERMISSION_CLASS, verbose_name=_('Permissions'))
groups = models.ManyToManyField(app_config.GROUP_CLASS, verbose_name=_('Groups'))
from river.config import app_config
from river.models import BaseModel, State
from river.models.managers.workflowmetada import WorkflowManager
class Workflow(BaseModel):
class Meta:
app_label = 'river'
verbose_name = _("Workflow")
verbose_name_plural = _("Workflows")
unique_together = [("content_type", "field_name")]
objects = WorkflowManager()
content_type = models.ForeignKey(app_config.CONTENT_TYPE_CLASS, verbose_name=_('Content Type'), on_delete=PROTECT)
field_name = models.CharField(_("Field Name"), max_length=200)
initial_state = models.ForeignKey(State, verbose_name=_("Initial State"), related_name='workflow_this_set_as_initial_state', on_delete=PROTECT)
def natural_key(self):
return self.content_type, self.field_name
def __str__(self):
return "%s.%s" % (self.content_type.model, self.field_name)
from river.models.transition import Transition
__author__ = 'ahmetdal'
@python_2_unicode_compatible
class ProceedingMeta(BaseModel):
class Meta:
app_label = 'river'
verbose_name = _("Proceeding Meta")
verbose_name_plural = _("Proceeding Metas")
unique_together = [('content_type', 'transition', 'order')]
objects = ProceedingMetaManager()
content_type = models.ForeignKey(app_config.CONTENT_TYPE_CLASS, verbose_name=_('Content Type'), on_delete=CASCADE)
transition = models.ForeignKey(Transition, verbose_name=_('Transition'), on_delete=CASCADE)
permissions = models.ManyToManyField(app_config.PERMISSION_CLASS, verbose_name=_('Permissions'), blank=True)
groups = models.ManyToManyField(app_config.GROUP_CLASS, verbose_name=_('Groups'), blank=True)
order = models.IntegerField(default=0, verbose_name=_('Order'), null=True)
action_text = models.TextField(_("Action Text"), max_length=200, null=True, blank=True)
parents = models.ManyToManyField('self', verbose_name='parents', related_name='children', symmetrical=False, db_index=True, blank=True)
def natural_key(self):
return self.content_type, self.transition, self.order
def __str__(self):
return 'Transition:%s, Permissions:%s, Groups:%s, Order:%s' % (
self.transition, ','.join(self.permissions.values_list('name', flat=True)),
','.join(self.groups.values_list('name', flat=True)), self.order)
(CANCELLED, _('Cancelled')),
(DONE, _('Done')),
(JUMPED, _('Jumped')),
]
LOGGER = logging.getLogger(__name__)
class Transition(BaseModel):
class Meta:
app_label = 'river'
verbose_name = _("Transition")
verbose_name_plural = _("Transitions")
objects = TransitionApprovalManager()
content_type = models.ForeignKey(app_config.CONTENT_TYPE_CLASS, verbose_name=_('Content Type'), on_delete=CASCADE)
object_id = models.CharField(max_length=50, verbose_name=_('Related Object'))
workflow_object = GenericForeignKey('content_type', 'object_id')
meta = models.ForeignKey(TransitionMeta, verbose_name=_('Meta'), related_name="transitions", on_delete=PROTECT)
workflow = models.ForeignKey(Workflow, verbose_name=_("Workflow"), related_name='transitions', on_delete=PROTECT)
source_state = models.ForeignKey(State, verbose_name=_("Source State"), related_name='transition_as_source', on_delete=PROTECT)
destination_state = models.ForeignKey(State, verbose_name=_("Destination State"), related_name='transition_as_destination', on_delete=PROTECT)
status = models.CharField(_('Status'), choices=STATUSES, max_length=100, default=PENDING)
iteration = models.IntegerField(default=0, verbose_name=_('Priority'))
@property
def next_transitions(self):
return Transition.objects.filter(
workflow=self.workflow,