diff --git a/bin/addons/__init__.py b/bin/addons/__init__.py index a198ef27942..41114488c13 100644 --- a/bin/addons/__init__.py +++ b/bin/addons/__init__.py @@ -179,7 +179,7 @@ def init_module_objects(cr, module_name, obj_list): for obj in obj_list: if hasattr(obj, 'init'): obj.init(cr) - obj._auto_init(cr) + obj._auto_init(cr, {'module': module_name}) cr.commit() def load_module_graph(cr, graph, status=None, **kwargs): diff --git a/bin/addons/base/base.sql b/bin/addons/base/base.sql index 911b90fe5da..21d667e3947 100644 --- a/bin/addons/base/base.sql +++ b/bin/addons/base/base.sql @@ -113,22 +113,22 @@ INHERITS (ir_actions); CREATE TABLE ir_ui_view ( - id serial NOT NULL, - name varchar(64) DEFAULT ''::varchar NOT NULL, - model varchar(64) DEFAULT ''::varchar NOT NULL, - "type" varchar(64) DEFAULT 'form'::varchar NOT NULL, - arch text NOT NULL, - field_parent varchar(64), - priority integer DEFAULT 5 NOT NULL, - primary key(id) + id serial NOT NULL, + name varchar(64) DEFAULT ''::varchar NOT NULL, + model varchar(64) DEFAULT ''::varchar NOT NULL, + "type" varchar(64) DEFAULT 'form'::varchar NOT NULL, + arch text NOT NULL, + field_parent varchar(64), + priority integer DEFAULT 5 NOT NULL, + primary key(id) ); CREATE TABLE ir_ui_menu ( - id serial NOT NULL, - parent_id int references ir_ui_menu on delete set null, - name varchar(64) DEFAULT ''::varchar NOT NULL, - icon varchar(64) DEFAULT ''::varchar, - primary key (id) + id serial NOT NULL, + parent_id int references ir_ui_menu on delete set null, + name varchar(64) DEFAULT ''::varchar NOT NULL, + icon varchar(64) DEFAULT ''::varchar, + primary key (id) ); select setval('ir_ui_menu_id_seq', 2); @@ -171,13 +171,13 @@ create table res_roles ( ); CREATE TABLE res_roles_users_rel ( - uid integer NOT NULL references res_users on delete cascade, - rid integer NOT NULL references res_roles on delete cascade + uid integer NOT NULL references res_users on delete cascade, + rid integer NOT NULL references res_roles on delete cascade ); CREATE TABLE res_groups_users_rel ( - uid integer NOT NULL references res_users on delete cascade, - gid integer NOT NULL references res_groups on delete cascade + uid integer NOT NULL references res_users on delete cascade, + gid integer NOT NULL references res_groups on delete cascade ); --------------------------------- @@ -318,3 +318,19 @@ CREATE TABLE res_company ( parent_id integer references res_company on delete set null, primary key(id) ); + +CREATE TABLE ir_model_data ( + id serial NOT NULL, + create_uid integer, + create_date timestamp without time zone, + write_date timestamp without time zone, + write_uid integer, + noupdate boolean, + name character varying(64) NOT NULL, + date_init timestamp without time zone, + date_update timestamp without time zone, + module character varying(64) NOT NULL, + model character varying(64) NOT NULL, + res_id integer, primary key(id) +); + diff --git a/bin/addons/base/base_menu.xml b/bin/addons/base/base_menu.xml index 5ec22f891ae..d0bf03679d1 100644 --- a/bin/addons/base/base_menu.xml +++ b/bin/addons/base/base_menu.xml @@ -1,27 +1,13 @@ - - + - - - - - - Your Companies - res.company - form - tree,form - - diff --git a/bin/addons/base/base_update.xml b/bin/addons/base/base_update.xml index 33bc475e2a1..52be640220f 100644 --- a/bin/addons/base/base_update.xml +++ b/bin/addons/base/base_update.xml @@ -169,30 +169,5 @@ - # Admin config - - - - - Users - res.users - form - tree,form - - - - tree - - - - - - form - - - - - - diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index 1efb8773a05..a2b237b46a9 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -140,7 +140,7 @@ class ir_model_fields(osv.osv): if not vals['name'].startswith('x_'): raise except_orm('Error', "Custom fields must have a name that starts with 'x_' !") self.pool.get(vals['model']).__init__(self.pool, cr) - self.pool.get(vals['model'])._auto_init(cr) + self.pool.get(vals['model'])._auto_init(cr,{}) return res ir_model_fields() diff --git a/bin/addons/base/ir/ir_ui_menu.py b/bin/addons/base/ir/ir_ui_menu.py index a63f2f0a062..4d993bcc0ff 100644 --- a/bin/addons/base/ir/ir_ui_menu.py +++ b/bin/addons/base/ir/ir_ui_menu.py @@ -89,6 +89,8 @@ class ir_ui_menu(osv.osv): context = {} ids = osv.orm.orm.search(self, cr, uid, args, offset, limit, order, context=context) + if uid==1: + return ids user_groups = self.pool.get('res.users').read(cr, uid, [uid])[0]['groups_id'] result = [] for menu in self.browse(cr, uid, ids): diff --git a/bin/addons/base/ir/ir_values.py b/bin/addons/base/ir/ir_values.py index 9e0e33a3187..8940cc8521b 100644 --- a/bin/addons/base/ir/ir_values.py +++ b/bin/addons/base/ir/ir_values.py @@ -77,8 +77,8 @@ class ir_values(osv.osv): 'company_id': lambda *a: False } - def _auto_init(self, cr): - super(ir_values, self)._auto_init(cr) + def _auto_init(self, cr, context={}): + super(ir_values, self)._auto_init(cr, context) cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_values_key_model_key2_index\'') if not cr.fetchone(): cr.execute('CREATE INDEX ir_values_key_model_key2_index ON ir_values (key, model, key2)') diff --git a/bin/addons/base/ir/workflow/workflow.py b/bin/addons/base/ir/workflow/workflow.py index 95db4c8c9e4..8da77f7d24a 100644 --- a/bin/addons/base/ir/workflow/workflow.py +++ b/bin/addons/base/ir/workflow/workflow.py @@ -147,8 +147,8 @@ class wkf_instance(osv.osv): 'res_type': fields.char('Resource Model', size=64), 'state': fields.char('State', size=32), } - def _auto_init(self, cr): - super(wkf_instance, self)._auto_init(cr) + def _auto_init(self, cr, context={}): + super(wkf_instance, self)._auto_init(cr, context) cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'wkf_instance_res_id_res_type_state_index\'') if not cr.fetchone(): cr.execute('CREATE INDEX wkf_instance_res_id_res_type_state_index ON wkf_instance (res_id, res_type, state)') @@ -178,8 +178,8 @@ class wkf_triggers(osv.osv): 'instance_id': fields.many2one('workflow.instance', 'Destination Instance', ondelete="cascade"), 'workitem_id': fields.many2one('workflow.workitem', 'Workitem', required=True, ondelete="cascade"), } - def _auto_init(self, cr): - super(wkf_triggers, self)._auto_init(cr) + def _auto_init(self, cr, context={}): + super(wkf_triggers, self)._auto_init(cr, context) cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'wkf_triggers_res_id_model_index\'') if not cr.fetchone(): cr.execute('CREATE INDEX wkf_triggers_res_id_model_index ON wkf_triggers (res_id, model)') diff --git a/bin/addons/base/res/partner/partner_view.xml b/bin/addons/base/res/partner/partner_view.xml index 6558070267d..dfdc529f343 100644 --- a/bin/addons/base/res/partner/partner_view.xml +++ b/bin/addons/base/res/partner/partner_view.xml @@ -503,28 +503,6 @@ - - - - - - Partner Categories - res.partner.category - form - tree,form - - - - - - Partner - res.partner - form - tree,form - - diff --git a/bin/osv/orm.py b/bin/osv/orm.py index cab07834f60..ea7228fe97d 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -76,21 +76,6 @@ class except_orm(Exception): self.value = value self.args = (name, value) -#class find_fields(object): -# def _start_el(self,name, attrs): -# if name == 'field' and attrs.get('name', False): -# self.datas[str(attrs['name'])] = attrs.get('preload','') -# def __init__(self): -# self.datas = {} -# def parse(self, datas): -# p = expat.ParserCreate() -# p.StartElementHandler = self._start_el -# p.Parse(datas, 1) -# return self.datas - -# -# TODO: trigger pour chaque action -# # Readonly python database object browser class browse_null(object): @@ -295,27 +280,79 @@ class orm_template(object): _description = None _inherits = {} - def _field_create(self, cr): + def _field_create(self, cr, context={}): cr.execute("SELECT id FROM ir_model WHERE model='%s'" % self._name) if not cr.rowcount: # reference model in order to have a description of its fonctionnality in custom_report - cr.execute("INSERT INTO ir_model (model, name, info) VALUES (%s, %s, %s)", (self._name, self._description, self.__doc__)) - cr.commit() - for k in self._columns: - f = self._columns[k] - cr.execute("select id, relate from ir_model_fields where model=%s and name=%s", (self._name,k)) - if not cr.rowcount: - cr.execute("select id from ir_model where model='%s'" % self._name) - model_id = cr.fetchone()[0] - cr.execute("INSERT INTO ir_model_fields (model_id, model, name, field_description, ttype, relate,relation,group_name,view_load,state,select_level) VALUES (%d,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", (model_id, self._name, k, f.string.replace("'", " "), f._type, (f.relate and 'True') or 'False', f._obj or 'NULL', f.group_name or '', (f.view_load and 'True') or 'False', 'base', str(f.select or 0))) - else: - id, relate = cr.fetchone() - if relate != f.relate: - cr.execute("UPDATE ir_model_fields SET relate=%s WHERE id=%d", ((f.relate and 'True') or 'False', id)) + cr.execute('select nextval(%s)', ('ir_model_id_seq',)) + id = cr.fetchone()[0] + cr.execute("INSERT INTO ir_model (id,model, name, info) VALUES (%s, %s, %s, %s)", (id,self._name, self._description, self.__doc__)) + if 'module' in context: + cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, now(), now(), %s, %s, %s)", \ + ( 'model_'+self._table, context['module'], 'ir.model', id) + ) cr.commit() - def _auto_init(self, cr): - self._field_create(cr) + cr.execute("select * from ir_model_fields where model=%s", (self._name,)) + cols = {} + for rec in cr.dictfetchall(): + cols[rec['name']] = rec + + cr.execute("select id from ir_model where model='%s'" % self._name) + model_id = cr.fetchone()[0] + + for (k,f) in self._columns.items(): + vals = { + 'model_id':model_id, + 'model':self._name, + 'name':k, + 'field_description':f.string.replace("'", " "), + 'ttype':f._type, + 'relate':(f.relate and 1) or 0, + 'relation':f._obj or 'NULL', + 'group_name':f.group_name or '', + 'view_load':(f.view_load and 1) or 0, + 'state':'base', + 'select_level':str(f.select or 0) + } + if k not in cols: + cr.execute('select nextval(%s)', ('ir_model_fields_id_seq',)) + id = cr.fetchone()[0] + vals['id'] = id + cr.execute("""INSERT INTO ir_model_fields ( + id, model_id, model, name, field_description, ttype, + relate,relation,group_name,view_load,state,select_level + ) VALUES ( + %d,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s, %s + )""", ( + id, vals['model_id'], vals['model'], vals['name'], vals['field_description'], vals['ttype'], + bool(vals['relate']), vals['relation'], vals['group_name'], bool(vals['view_load']), vals['state'], + vals['select_level'] + )) + if 'module' in context: + cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, now(), now(), %s, %s, %s)", \ + ( ('field_'+self._table+'_'+k)[:64], context['module'], 'ir.model.fields', id) + ) + else: + for key,val in vals.items(): + if cols[k][key]<>vals[key]: + print 'Different', cols[k][key], vals[key], k, key, self._name + cr.execute('update ir_model_fields set field_description=%s where model=%s and name=%s', (vals['field_description'],vals['model'],vals['name'])) + cr.commit() + cr.execute("""UPDATE ir_model_fields SET + model_id=%s, field_description=%s, ttype=%s, relate=%s, relation=%s, + group_name=%s, view_load=%s, state=%s, select_level=%s + WHERE + model=%s AND name=%s""", ( + vals['model_id'],vals['field_description'],vals['ttype'],bool(vals['relate']), + vals['relation'], vals['group_name'], bool(vals['view_load']), vals['state'], + vals['select_level'], vals['model'], vals['name'] + )) + continue + cr.commit() + + def _auto_init(self, cr, context={}): + self._field_create(cr, context) def __init__(self, cr): if not self._description: @@ -1206,10 +1243,10 @@ class orm(orm_template): _log_access = True _table = None _protected = ['read','write','create','default_get','perm_read','unlink','fields_get','fields_view_get','search','name_get','distinct_field_get','name_search','copy','import_data','search_count'] - def _auto_init(self, cr): + def _auto_init(self, cr, context={}): logger = netsvc.Logger() create = False - self._field_create(cr) + self._field_create(cr, context=context) if not hasattr(self, "_auto") or self._auto: cr.execute("SELECT relname FROM pg_class WHERE relkind in ('r','v') AND relname='%s'" % self._table) if not cr.rowcount: diff --git a/bin/tools/convert.py b/bin/tools/convert.py index 0db57b898d9..024275e983f 100644 --- a/bin/tools/convert.py +++ b/bin/tools/convert.py @@ -355,7 +355,7 @@ form: module.record_id""" % (xml_id,) 'auto_refresh': auto_refresh, } if rec.hasAttribute('target'): - res['target'] = rex.getAttribute('target') + res['target'] = rec.getAttribute('target') id = self.pool.get('ir.model.data')._update(cr, self.uid, 'ir.actions.act_window', self.module, res, xml_id, mode=self.mode) self.idref[xml_id] = int(id) diff --git a/bin/tools/translate.py b/bin/tools/translate.py index cd989ee39dc..2ab3b5159f6 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -54,14 +54,13 @@ def translate(cr, uid, name, source_type, lang, source=None): res_trans = cr.fetchone() res = res_trans and res_trans[0] or False return res - + def translate_code(cr, uid, source, context): lang = context.get('lang', False) if lang: return translate(cr, uid, None, 'code', lang, source) else: return source - _ = lambda source: translate_code(cr, uid, source, context) # Methods to export the translation file @@ -129,104 +128,28 @@ def trans_generate(lang, modules, dbname=None): l.sort() out = [["type","name","res_id","src","value"]] -#TODO: do everything through to_translate, for that, we'll probably need to change its -#format and have records = list of tuples (id, name, source) instead of just source to_translate = [] - # object fields - for obj_name, obj in l: - if in_modules(obj_name, modules): - for field_name, field_def in obj._columns.iteritems(): - name = obj_name + "," + field_name - value = "" - if lang: - cr.execute("SELECT * FROM ir_translation WHERE type='field' AND name=%s AND lang=%s", (name,lang)) - res = cr.dictfetchall() - if len(res): - value = res[0]['value'] - out.append(["field", name, "0", field_def.string.encode('utf8'), value]) - if field_def.help: - value = '' - if lang: - cr.execute('SELECT * FROM ir_translation ' \ - 'WHERE type=\'help\' ' \ - 'AND name = %s ' \ - 'AND lang = %s', (name, lang)) - res = cr.dictfetchall() - if res: - value = res[0]['value'] - out.append(['help', name, '0', field_def.help.encode('utf8'), value]) - if field_def.translate: - ids = osv.orm.orm.search(obj, cr, uid, []) - obj_values = obj.read(cr, uid, ids, [field_name]) - for obj_value in obj_values: - trans = "" - if lang: - cr.execute("SELECT * " \ - "FROM ir_translation " \ - "WHERE type='model' " \ - "AND name=%s AND res_id=%d AND lang=%s", - (name, obj_value['id'], lang)) - res = cr.dictfetchall() - if len(res): - trans = res[0]['value'] + if 'all' in modules: + cr.execute('select name,model,res_id,module from ir_model_data') + else: + cr.execute('select name,model,res_id,module from ir_model_data where module in ('+','.join(['%s']*len(modules))+')', modules) - res_id = obj_value['id'] - if obj_name in ('ir.model', 'ir.ui.menu'): - res_id = 0 - model_data_ids = model_data_obj.search(cr, uid, [ - ('model', '=', obj_name), - ('res_id', '=', obj_value['id']), - ]) - if model_data_ids: - model_data = model_data_obj.browse(cr, uid, - model_data_ids[0]) - res_id = model_data.module + '.' + model_data.name - - out.append(["model", name, res_id, - obj_value[field_name], trans]) - if hasattr(field_def, 'selection') and isinstance(field_def.selection, (list, tuple)): - for key, val in field_def.selection: - to_translate.append(["selection", name, [val.encode('utf8')]]) - - # reports (xsl and rml) - obj = pool.get("ir.actions.report.xml") - for i in obj.read(cr, uid, osv.orm.orm.search(obj, cr, uid, [])): - if in_modules(i["model"], modules): - name = i["report_name"] - fname = "" - if i["report_rml"]: - fname = i["report_rml"] - parse_func = trans_parse_rml - report_type = "rml" - elif i["report_xsl"]: - fname = i["report_xsl"] - parse_func = trans_parse_xsl - report_type = "xsl" - try: - xmlstr = tools.file_open(fname).read() - d = xml.dom.minidom.parseString(xmlstr) - to_translate.append([report_type, name, parse_func(d.documentElement)]) - except IOError: - if fname: - logger.notifyChannel("init", netsvc.LOG_WARNING, "couldn't export translation for report %s %s %s" % (name, report_type, fname)) - - # views - obj = pool.get("ir.ui.view") - for i in obj.read(cr, uid, osv.orm.orm.search(obj, cr, uid, [])): - if in_modules(i["model"], modules): - d = xml.dom.minidom.parseString(i['arch']) - to_translate.append(["view", i['model'], trans_parse_view(d.documentElement)]) - - # wizards - for service_name, obj in netsvc._service.iteritems(): - if service_name.startswith('wizard.'): - for state_name, state_def in obj.states.iteritems(): + for (xml_name,model,res_id,module) in cr.fetchall(): + xml_name = module+'.'+xml_name + obj = pool.get(model).browse(cr, uid, res_id) + if model=='ir.ui.view': + d = xml.dom.minidom.parseString(obj.arch) + for t in trans_parse_view(d.documentElement): + to_translate.append(["view", obj.model, 0, t]) + elif model=='ir.actions.wizard': + service_name = 'wizard.'+obj.wiz_name + obj2 = netsvc._service[service_name] + for state_name, state_def in obj2.states.iteritems(): if 'result' in state_def: result = state_def['result'] if result['type'] != 'form': continue - name = obj.wiz_name + ',' + state_name # export fields @@ -234,47 +157,95 @@ def trans_generate(lang, modules, dbname=None): if 'string' in field_def: source = field_def['string'] res_name = name + ',' + field_name - to_translate.append(["wizard_field", res_name, [source]]) + to_translate.append(["wizard_field", res_name,0,source]) # export arch arch = result['arch'] if not isinstance(arch, UpdateableStr): d = xml.dom.minidom.parseString(arch) - to_translate.append(["wizard_view", name, trans_parse_view(d.documentElement)]) + for t in trans_parse_view(d.documentElement): + to_translate.append(["wizard_view", name, 0, t]) # export button labels for but_args in result['state']: button_name = but_args[0] button_label = but_args[1] res_name = name + ',' + button_name - to_translate.append(["wizard_button", res_name, [button_label]]) - + to_translate.append(["wizard_button", res_name, 0, button_label]) + + elif model=='ir.model.fields': + field_name = obj.name + field_def = pool.get(obj.model)._columns[field_name] + + name = obj.model + "," + field_name + to_translate.append(["field", name, 0, field_def.string.encode('utf8')]) + + if field_def.help: + to_translate.append(["help", name, 0, field_def.help.encode('utf8')]) + + if field_def.translate: + ids = pool.get(obj.model).search(cr, uid, []) + obj_values = pool.get(obj.model).read(cr, uid, ids, [field_name]) + for obj_value in obj_values: + res_id = obj_value['id'] + if obj.name in ('ir.model', 'ir.ui.menu'): + res_id = 0 + model_data_ids = model_data_obj.search(cr, uid, [ + ('model', '=', model), + ('res_id', '=', res_id), + ]) + if not model_data_ids: + to_translate.append(['model', name, 0, obj_value[field_name]]) + + if hasattr(field_def, 'selection') and isinstance(field_def.selection, (list, tuple)): + for key, val in field_def.selection: + to_translate.append(["selection", name, 0, val.encode('utf8')]) + + elif model=='ir.actions.report.xml': + name = obj.report_name + fname = "" + if obj.report_rml: + fname = obj.report_rml + parse_func = trans_parse_rml + report_type = "rml" + elif obj.report_xsl: + fname = obj.report_xsl + parse_func = trans_parse_xsl + report_type = "xsl" + try: + xmlstr = tools.file_open(fname).read() + d = xml.dom.minidom.parseString(xmlstr) + for t in parse_func(d.documentElement): + to_translate.append([report_type, name, 0, t]) + except IOError: + if fname: + logger.notifyChannel("init", netsvc.LOG_WARNING, "couldn't export translation for report %s %s %s" % (name, report_type, fname)) + + + for field_name,field_def in pool.get(model)._columns.items(): + if field_def.translate: + name = model + "," + field_name + to_translate.append(['model', name, xml_name, getattr(obj,field_name)]) + + # TODO: By module # code for root, dirs, files in os.walk(tools.config['root_path']): for fname in fnmatch.filter(files, '*.py'): frelativepath = join(root, fname) code_string = tools.file_open(frelativepath, subdir='').read() - -# TODO: add support for """ and '''... These should use the DOTALL flag -# DOTALL -# Make the "." special character match any character at all, including a -# newline; without this flag, "." will match anything except a newline. - # *? is the non-greedy version of the * qualifier iter = re.finditer( '[^a-zA-Z0-9_]_\([\s]*["\'](.*?)["\'][\s]*\)', code_string) + sources = [] for i in iter: - source = i.group(1).encode('utf8') -# TODO: check whether the same string has already been exported - res = trans_obj._get_source(cr, uid, frelativepath, 'code', lang, source) or '' - out.append(["code", frelativepath, "0", source, res]) + to_translate.append(['code', frelativepath, 0, i.group(1).encode('utf8')]) # translate strings marked as to be translated - for type, name, sources in to_translate: - for source in sources: - trans = trans_obj._get_source(cr, uid, name, type, lang, source) - out.append([type, name, "0", source, trans or '']) - + for a in to_translate: + (type, name, id, source) = a + trans = trans_obj._get_source(cr, uid, name, type, lang, source) + out.append([type, name, id, source, trans or '']) + cr.close() return out diff --git a/bin/workflow/instance.py b/bin/workflow/instance.py index 7b036ae2c97..d25bc367f4c 100644 --- a/bin/workflow/instance.py +++ b/bin/workflow/instance.py @@ -51,11 +51,9 @@ def delete(cr, ident): def validate(cr, inst_id, ident, signal, force_running=False): cr.execute("select * from wkf_workitem where inst_id=%d", (inst_id,)) for witem in cr.dictfetchall(): - print '-----' stack = [] workitem.process(cr, witem, ident, signal, force_running, stack=stack) # An action is returned - print '----- Got', stack _update_end(cr, inst_id, ident) return stack and stack[0] or False @@ -64,7 +62,6 @@ def update(cr, inst_id, ident): for witem in cr.dictfetchall(): stack = [] workitem.process(cr, witem, ident, stack=stack) - print 'End Update' return _update_end(cr, inst_id, ident) def _update_end(cr, inst_id, ident): diff --git a/bin/workflow/wkf_expr.py b/bin/workflow/wkf_expr.py index 434e091f4da..9a86b474f86 100644 --- a/bin/workflow/wkf_expr.py +++ b/bin/workflow/wkf_expr.py @@ -70,8 +70,6 @@ class Env(dict): def _eval_expr(cr, ident, workitem, action): ret=False - print '***' - print action for line in action.split('\n'): uid=ident[0] model=ident[1] @@ -83,17 +81,14 @@ def _eval_expr(cr, ident, workitem, action): else: wf_service = netsvc.LocalService("object_proxy") env = Env(wf_service, cr, uid, model, ids) - print line ret = eval(line, env) return ret def execute_action(cr, ident, workitem, activity): - print 'Execute Action' wf_service = netsvc.LocalService("object_proxy") obj = pooler.get_pool(cr.dbname).get('ir.actions.server') ctx = {'active_id':ident[2], 'active_ids':[ident[2]]} result = obj.run(cr, ident[0], [activity['action_id']], ctx) - print 'Result', result return result def execute(cr, ident, workitem, activity): diff --git a/bin/workflow/wkf_service.py b/bin/workflow/wkf_service.py index 0dc9ccd978e..f1c103ccfe0 100644 --- a/bin/workflow/wkf_service.py +++ b/bin/workflow/wkf_service.py @@ -85,7 +85,6 @@ class workflow_service(netsvc.Service): cr.execute('select id from wkf_instance where res_id=%d and res_type=%s and state=%s', (res_id, res_type, 'active')) for (id,) in cr.fetchall(): res2 = instance.validate(cr, id, ident, signal) - print 'Inst val,', res2 result = result or res2 return result