Example #1
0
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
Example #2
0
    def validate(self, signal):
        result = False
        # ids of all active workflow instances for a corresponding resource (id, model_nam)
        self.cr.execute('select id from wkf_instance where res_id=%s and res_type=%s and state=%s', (self.record.id, self.record.model, 'active'))
        # TODO: Refactor the workflow instance object
        for (instance_id,) in self.cr.fetchall():
            wi = WorkflowInstance(self.session, self.record, {'id': instance_id})

            res2 = wi.validate(signal)

            result = result or res2
        return result
Example #3
0
    def create(self):
        WorkflowService.CACHE.setdefault(self.cr.dbname, {})

        wkf_ids = WorkflowService.CACHE[self.cr.dbname].get(self.record.model, None)

        if not wkf_ids:
            self.cr.execute('select id from wkf where osv=%s and on_create=True', (self.record.model,))
            wkf_ids = self.cr.fetchall()
            WorkflowService.CACHE[self.cr.dbname][self.record.model] = wkf_ids

        for (wkf_id, ) in wkf_ids:
            WorkflowInstance.create(self.session, self.record, wkf_id)
Example #4
0
def s_validate(self, signal):
    result = False
    # ids of all active workflow instances for a corresponding resource (id, model_nam)
    self.cr.execute(
        'select id from wkf_instance where res_id=%s and res_type=%s and progress',
        (self.record.id, self.record.model))
    # TODO: Refactor the workflow instance object
    for (instance_id, ) in self.cr.fetchall():
        wi = WorkflowInstance(self.session, self.record, {'id': instance_id})
        res2 = wi.validate(signal)

        result = result or res2
    return result
Example #5
0
    def create(self):
        WorkflowService.CACHE.setdefault(self.cr.dbname, {})

        wkf_ids = WorkflowService.CACHE[self.cr.dbname].get(
            self.record.model, None)

        if not wkf_ids:
            self.cr.execute(
                'select id from wkf where osv=%s and on_create=True',
                (self.record.model, ))
            wkf_ids = self.cr.fetchall()
            WorkflowService.CACHE[self.cr.dbname][self.record.model] = wkf_ids

        for (wkf_id, ) in wkf_ids:
            WorkflowInstance.create(self.session, self.record, wkf_id)
Example #6
0
 def write(self):
     self.cr.execute(
         'select id from wkf_instance where res_id=%s and res_type=%s and state=%s',
         (self.record.id or None, self.record.model or None, 'active'))
     for (instance_id, ) in self.cr.fetchall():
         WorkflowInstance(self.session, self.record, {
             'id': instance_id
         }).update()
Example #7
0
def s_create(self):
    WorkflowService.CACHE.setdefault(self.cr.dbname, {})

    wkf_ids = WorkflowService.CACHE[self.cr.dbname].get(
        self.record.model, None)

    if not wkf_ids:
        self.cr.execute(
            'select id from wkf where osv=%s and on_create=True and is_active',
            (self.record.model, ))
        wkf_ids = self.cr.fetchall()
        WorkflowService.CACHE[self.cr.dbname][self.record.model] = wkf_ids

    for (wkf_id, ) in wkf_ids:
        query = 'UPDATE %s SET wkf_id=%s WHERE id = %s' % (
            self.record.model.replace('.', '_'), wkf_id, self.record.id)
        self.cr.execute(query)
        WorkflowInstance.create(self.session, self.record, wkf_id)
Example #8
0
    def trigger(self):
        self.cr.execute(
            'select instance_id from wkf_triggers where res_id=%s and model=%s',
            (self.record.id, self.record.model))
        res = self.cr.fetchall()
        for (instance_id, ) in res:
            self.cr.execute(
                'select %s,res_type,res_id from wkf_instance where id=%s', (
                    self.session.uid,
                    instance_id,
                ))
            current_uid, current_model_name, current_record_id = self.cr.fetchone(
            )

            current_session = Session(self.session.cr, current_uid)
            current_record = Record(current_model_name, current_record_id)

            WorkflowInstance(current_session, current_record, {
                'id': instance_id
            }).update()
Example #9
0
 def delete(self):
     WorkflowInstance(self.session, self.record, {}).delete()