Example #1
0
    def update(self):
        cr = self.session.cr

        cr.execute("select * from wkf_workitem where inst_id=%s", (self.instance['id'],))
        for work_item_values in cr.dictfetchall():
            stack = []
            WorkflowItem(self.session, self.record, work_item_values).process(stack=stack)
        return self._update_end()
Example #2
0
    def validate(self, signal, force_running=False):
        assert isinstance(signal, basestring)
        assert isinstance(force_running, bool)

        cr = self.session.cr
        cr.execute("select * from wkf_workitem where inst_id=%s", (self.instance['id'],))
        stack = []
        for i, work_item_values in enumerate(cr.dictfetchall()):
            if i > 0:
                # test if previous workitem has already processed this one
                cr.execute("select id from wkf_workitem where id=%s", (work_item_values['id'],))
                if not cr.fetchone():
                    continue
            wi = WorkflowItem(self.session, self.record, work_item_values)
            wi.process(signal=signal, force_running=force_running, stack=stack)
            # An action is returned
        self._update_end()
        return stack and stack[0] or False
Example #3
0
    def create(cls, session, record, workflow_id):
        assert isinstance(session, Session)
        assert isinstance(record, Record)
        assert isinstance(workflow_id, (int, long))

        cr = session.cr
        cr.execute('insert into wkf_instance (res_type,res_id,uid,wkf_id,state) values (%s,%s,%s,%s,%s) RETURNING id', (record.model, record.id, session.uid, workflow_id, 'active'))
        instance_id = cr.fetchone()[0]

        cr.execute('select * from wkf_activity where flow_start=True and wkf_id=%s', (workflow_id,))
        stack = []

        activities = cr.dictfetchall()
        for activity in activities:
            WorkflowItem.create(session, record, activity, instance_id, stack)

        cr.execute('SELECT * FROM wkf_instance WHERE id = %s', (instance_id,))
        values = cr.dictfetchone()
        wi = WorkflowInstance(session, record, values)
        wi.update()

        return wi