def completeWorkitem(self, instance_id, workitem_id, REQUEST=None): """ declares the completion of the specified workitem of the given instance """ instance, workitem, process, activity = self.getEnvironment(instance_id, workitem_id) if REQUEST: actor = REQUEST.AUTHENTICATED_USER.getUserName() else: actor = 'Engine' if REQUEST: if not actor == workitem.actor: raise "WorkitemActionError","Invalid Workflow Actor" if instance.isActiveOrRunning(): workitem_return_id = None if workitem.status in ('active', 'fallout'): workitem.setStatus('complete', actor=actor) if instance.getActiveWorkitems() == 0 and instance.status!='running': instance.setStatus(status='running', actor=actor) if self.isEnd(workitem.process_id, workitem.activity_id): subflow_workitem_id = self.getSubflowWorkitem(instance_id, workitem_id, workitem.process_id) if subflow_workitem_id: self.completeSubflow(instance_id, subflow_workitem_id) else: instance.setStatus(status='complete', actor=actor) if activity.isAutoFinish() and not process.end == activity.id and \ not (activity.kind=='dummy' or activity.kind=='subflow'): self.forwardWorkitem(instance_id, workitem_id) if REQUEST is not None: REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER) else: raise "WorkitemActionError","Wrong workitem enviroment"
def terminateInstance(self, instance_id=None, REQUEST=None): """ terminate a specified instance """ instance = getattr(self, instance_id) if instance.status != 'complete': if REQUEST: actor=REQUEST.AUTHENTICATED_USER.getUserName() else: actor='Engine' instance.setStatus(status='terminated', actor=actor) else: raise "InstanceActionError","Instance in wrong status" if REQUEST: REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER)
def resumeInstance(self, instance_id=None, REQUEST=None): """ suspend a specified instance """ instance = getattr(self, instance_id) if instance.status == 'suspended': if REQUEST: actor=REQUEST.AUTHENTICATED_USER.getUserName() else: actor='Engine' instance.setStatus(status=instance.old_status, actor=actor) instance.old_status = '' else: raise "InstanceActionError","Instance in wrong status" if REQUEST: REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER)
def suspendWorkitem(self, instance_id, workitem_id, REQUEST=None): """ declares the suspension of the specified workitem of the given instance """ instance = getattr(self, instance_id) workitem = getattr(instance, str(workitem_id)) if REQUEST: actor = REQUEST.AUTHENTICATED_USER.getUserName() else: actor = 'Engine' if REQUEST: if workitem.actor and workitem.actor != actor: raise "Invalid Workflow Actor: %s"%actor if instance.isActiveOrRunning() and workitem.status == 'inactive' and not workitem.blocked: workitem.setStatus('suspended', actor=actor) if instance.getActiveWorkitems() == 0 and not instance.status=='running': instance.setStatus(status='running', actor=actor) else: raise "WorkitemActionError","Wrong workitem enviroment" if REQUEST: REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER)
def startInstance(self, instance_id, REQUEST=None): """ Starts the flowing of the process instance inside the process definition """ instance = getattr(self, instance_id) if instance.status == 'initiated': if REQUEST: actor=REQUEST.AUTHENTICATED_USER.getUserName() else: actor='Engine' instance.setStatus(status='running', actor=actor) process_id = instance.begin_process_id activity_id = instance.begin_activity_id push_roles = getattr(getattr(self,process_id),activity_id).getPushRoles() pull_roles = getattr(getattr(self,process_id),activity_id).getPullRoles() w = instance.addWorkitem(process_id, activity_id, 0, push_roles, pull_roles) self.manageWorkitemCreation(instance_id, w.id) if REQUEST: REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER) else: raise "InstanceActionError","Instance in wrong status"
def inactivateWorkitem(self, instance_id, workitem_id, REQUEST=None): """ declares the inactivation of the specified workitem of the given instance """ instance = getattr(self, instance_id) workitem = getattr(instance, str(workitem_id)) if REQUEST: actor=REQUEST.AUTHENTICATED_USER.getUserName() else: actor='Engine' if REQUEST: if not (actor == workitem.actor or \ REQUEST.AUTHENTICATED_USER.has_permission('Manage OpenFlow', self)): raise "WorkitemActionError","Invalid actor" if instance.isActiveOrRunning() and workitem.status == 'active' and not workitem.blocked: workitem.setStatus('inactive', actor=actor) if instance.getActiveWorkitems() == 0 and instance.status!='running': instance.setStatus(status='running', actor=actor) else: raise "WorkitemActionError","Wrong workitem enviroment" if REQUEST: REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER)
def activateWorkitem(self, instance_id, workitem_id, actor=None, REQUEST=None): """ declares the activation of the specified workitem of the given instance """ instance = getattr(self, instance_id) workitem = getattr(instance, str(workitem_id)) if REQUEST: action_actor=REQUEST.AUTHENTICATED_USER.getUserName() if not [r for r in REQUEST.AUTHENTICATED_USER.getRolesInContext(self) if r in workitem.pull_roles]: raise "PermissionError","User don't have pull role" else: action_actor='Engine' if instance.isActiveOrRunning() and workitem.status == 'inactive' and not workitem.blocked: if actor is not None and workitem.actor == '': self.assignWorkitem(instance_id, workitem_id, actor) workitem.setStatus('active', actor=action_actor) if instance.status!='active': instance.setStatus(status='active', actor=action_actor) else: raise "WorkitemActionError","Wrong workitem enviroment" if REQUEST: REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER)