Improvements inmenus

Translations by modules
removed print statement

bzr revid: fp@tinyerp.com-eddee689d274afc56e6b7703a7cd22b9792f2c7b
This commit is contained in:
Fabien Pinckaers
2008-06-17 20:17:23 +00:00
parent d89c86bd9d
commit 8d16581e0f
15 changed files with 198 additions and 242 deletions
+1 -1
View File
@@ -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):
+33 -17
View File
@@ -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)
);
+1 -15
View File
@@ -1,27 +1,13 @@
<?xml version="1.0"?>
<terp>
<data>
<menuitem name="Administration" sequence="20" groups="group_admin" icon="terp-administration"/>
<menuitem name="Administration/Configuration" sequence="1" id="menu_config"/>
<menuitem name="Administration" sequence="20" groups="group_admin" icon="terp-administration" id="menu_administration"/>
<menuitem name="Administration/Custom" sequence="2" id="menu_custom"/>
<menuitem name="Administration/Translations" sequence="4" id="menu_translation"/>
<menuitem name="Administration/Users" sequence="6" id="menu_users"/>
<menuitem name="Administration/Security" sequence="8" id="menu_security"/>
<menuitem name="Administration/Modules Management" sequence="10" id="menu_management"/>
<!--
# Admin config
-->
<menuitem name="Administration/Configuration/Base" sequence="1"/>
<record model="ir.actions.act_window" id="open_module_tree_company">
<field name="name">Your Companies</field>
<field name="res_model">res.company</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Administration/Configuration/Base/Define Main Company" action="open_module_tree_company" sequence="2" id="menu_company_def"/>
</data>
</terp>
-25
View File
@@ -169,30 +169,5 @@
</field>
</record>
# Admin config
<menuitem name="Administration/Configuration/User" sequence="4" id="menu_adm_conf_user"/>
<record model="ir.actions.act_window" id="open_module_users_list">
<field name="name">Users</field>
<field name="res_model">res.users</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<record model="ir.actions.act_window.view" id="open_module_users_list_view1">
<field name="sequence" eval="10"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_users_tree"/>
<field name="act_window_id" ref="open_module_users_list"/>
</record>
<record model="ir.actions.act_window.view" id="open_module_users_list_view2">
<field name="sequence" eval="20"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_users_form"/>
<field name="act_window_id" ref="open_module_users_list"/>
</record>
<menuitem name="Administration/Configuration/User/Define Users" action="open_module_users_list" sequence="1" id="menu_users_list"/>
</data>
</terp>
+1 -1
View File
@@ -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()
+2
View File
@@ -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):
+2 -2
View File
@@ -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)')
+4 -4
View File
@@ -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)')
@@ -503,28 +503,6 @@
<menuitem name="Partners/Configuration/Categories/Edit Categories" action="action_partner_category_form" id="menu_partner_category_form"/>
<!--
# Admin config
-->
<menuitem name="Administration/Configuration/Partner" sequence="3"/>
<record model="ir.actions.act_window" id="open_module_type_partenaire">
<field name="name">Partner Categories</field>
<field name="res_model">res.partner.category</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Administration/Configuration/Partner/Define Partners Categories" action="open_module_type_partenaire" sequence="1" id="menu_type_partenaire"/>
<record model="ir.actions.act_window" id="open_module_def_partenaire">
<field name="name">Partner</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Administration/Configuration/Partner/Define Partners" action="open_module_def_partenaire" sequence="2" id="menu_partenaire_def"/>
</data>
</terp>
+70 -33
View File
@@ -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:
+1 -1
View File
@@ -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)
+83 -112
View File
@@ -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
-3
View File
@@ -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):
-5
View File
@@ -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):
-1
View File
@@ -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