def create(cls, session, record, workflow_id): assert isinstance(session, Session) assert isinstance(record, Record) assert isinstance(workflow_id, int) 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
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
def i_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( 'SELECT flow_start, id, name, required, sequence FROM wkf_activity WHERE wkf_id=%s ORDER BY flow_start', (workflow_id, )) activities = cr.dictfetchall() wi = False stack = [] instance_id = False for activity in activities: if activity['flow_start']: cr.execute( """INSERT INTO wkf_instance (name, activity_id, required, sequence, res_type, res_id, uid, wkf_id, state, progress, date, is_active) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, true, now(), true) RETURNING id""", (activity['name'], activity['id'], activity['required'], activity['sequence'], record.model, record.id, session.uid, workflow_id, 'active')) instance_id = cr.fetchone()[0] 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() else: cr.execute( """INSERT INTO wkf_instance (name, activity_id, required, sequence, res_type, res_id, wkf_id, state, is_active) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, true) RETURNING id""", (activity['name'], activity['id'], activity['required'], activity['sequence'], record.model, record.id, workflow_id, 'active')) return wi
def _join_test(self, trans_id, inst_id, stack): def get_activity(transition_id): res = False cr.execute( 'SELECT is_active, activity_id FROM wkf_instance WHERE activity_id=(SELECT act_to FROM wkf_transition WHERE id=%s) AND res_id=%s AND res_type=%s LIMIT 1', (transition_id, self.record.id, self.record.model)) instance = cr.dictfetchone() if instance: if instance['is_active']: act_id = instance['activity_id'] cr.execute("SELECT * FROM wkf_activity WHERE id = %s", (act_id, )) res = cr.dictfetchone() else: cr.execute( "SELECT id from wkf_transition WHERE act_from=%s AND is_default=true LIMIT 1", (instance['activity_id'], )) new_transition_id = cr.dictfetchone() if new_transition_id: res = get_activity(new_transition_id['id']) return res cr = self.session.cr # cr.execute('select * from wkf_activity where id=(select act_to from wkf_transition where id=%s)', (trans_id,)) # cr.dictfetchone() activity = get_activity(trans_id) if activity: cr.execute( "SELECT id FROM wkf_instance WHERE activity_id=%s AND res_id=%s AND res_type=%s", (activity['id'], self.record.id, self.record.model)) instance = cr.dictfetchone() if activity['join_mode'] == 'XOR': WorkflowItem.create(self.session, self.record, activity, instance['id'], stack=stack) cr.execute( 'delete from wkf_witm_trans where inst_id=%s and trans_id=%s', (inst_id, trans_id)) else: cr.execute( 'select id from wkf_transition where act_to=%s ORDER BY sequence,id', (activity['id'], )) trans_ids = cr.fetchall() ok = True for (id, ) in trans_ids: cr.execute( 'select count(*) from wkf_witm_trans where trans_id=%s and inst_id=%s', (id, inst_id)) res = cr.fetchone()[0] if not res: ok = False break if ok: for (id, ) in trans_ids: cr.execute( 'delete from wkf_witm_trans where trans_id=%s and inst_id=%s', (id, inst_id)) WorkflowItem.create(self.session, self.record, activity, instance['id'], stack=stack)