Improvements inmenus
Translations by modules removed print statement bzr revid: fp@tinyerp.com-eddee689d274afc56e6b7703a7cd22b9792f2c7b
This commit is contained in:
@@ -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
@@ -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,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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)')
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user