diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 48689c3c26e..3eafd247f59 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3792,6 +3792,12 @@ class BaseModel(object): for res_id in ids: getattr(wf_service, trigger)(uid, self._name, res_id, cr) + def _workflow_signal(self, cr, uid, ids, signal, context=None): + """Send given workflow signal""" + wf_service = netsvc.LocalService("workflow") + for res_id in ids: + wf_service.trg_validate(uid, self._name, res_id, signal, cr) + def unlink(self, cr, uid, ids, context=None): """ Delete records with given ids diff --git a/openerp/osv/osv.py b/openerp/osv/osv.py index 877e804314c..94f179c7897 100644 --- a/openerp/osv/osv.py +++ b/openerp/osv/osv.py @@ -184,16 +184,18 @@ class object_proxy(object): cr.close() return res - def exec_workflow_cr(self, cr, uid, obj, method, *args): - wf_service = netsvc.LocalService("workflow") - return wf_service.trg_validate(uid, obj, args[0], method, cr) + def exec_workflow_cr(self, cr, uid, obj, signal, *args): + object = pooler.get_pool(cr.dbname).get(obj) + if not object: + raise except_osv('Object Error', 'Object %s doesn\'t exist' % str(obj)) + return object._workflow_signal(cr, uid, [args[0]], signal) @check - def exec_workflow(self, db, uid, obj, method, *args): + def exec_workflow(self, db, uid, obj, signal, *args): cr = pooler.get_db(db).cursor() try: try: - res = self.exec_workflow_cr(cr, uid, obj, method, *args) + res = self.exec_workflow_cr(cr, uid, obj, signal, *args) cr.commit() except Exception: cr.rollback()