From 2455ef94639e63f1887bceb598a5b3e3150ff48a Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Fri, 12 Apr 2013 14:49:14 +0200 Subject: [PATCH 1/2] [FIX]ir_translation: replace source field to show value of the term stored in db and reflect change directly in db when changing source value bzr revid: csn@openerp.com-20130412124914-8epmco1z37ge1oui --- openerp/addons/base/ir/ir_translation.py | 30 ++++++++++++++++++- .../addons/base/ir/ir_translation_view.xml | 6 ++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index 5d71568315f..a75304743a9 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -155,12 +155,40 @@ class ir_translation(osv.osv): lang_data = lang_model.read(cr, uid, lang_ids, ['code', 'name'], context=context) return [(d['code'], d['name']) for d in lang_data] + def _get_src(self, cr, uid, ids, name, arg, context): + res = {} + for record in self.browse(cr,uid,ids,context=context): + if record.type != 'model': + res[record.id] = record.src + else: + data = record.name.split(',') + model = self.pool.get(data[0]) + field = data[1] + context_wo_lang = context.copy() + context_wo_lang.pop('lang', None) + res[record.id] = model.read(cr, uid, record.res_id, [field], context=context_wo_lang)[field] + return res + + def _set_src(self, cr, uid, id, name, value, args=None, context=None): + if value: + record=self.browse(cr,uid,id,context=context) + if record.type == 'model': + name = record.name + data = name.split(',') + model = self.pool.get(data[0]) + field = data[1] + context_wo_lang = context.copy() + context_wo_lang.pop('lang', None) + model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) + return self.write(cr,uid,id, {'src': value}, context=context_wo_lang) + _columns = { 'name': fields.char('Translated field', required=True), 'res_id': fields.integer('Record ID', select=True), 'lang': fields.selection(_get_language, string='Language'), 'type': fields.selection(TRANSLATION_TYPE, string='Type', select=True), - 'src': fields.text('Source'), + 'src': fields.text('Old source'), + 'source': fields.function(_get_src, fnct_inv=_set_src, type='text', string='Source'), 'value': fields.text('Translation Value'), 'module': fields.char('Module', help="Module this term belongs to", select=True), diff --git a/openerp/addons/base/ir/ir_translation_view.xml b/openerp/addons/base/ir/ir_translation_view.xml index d1c790de758..64a02576091 100644 --- a/openerp/addons/base/ir/ir_translation_view.xml +++ b/openerp/addons/base/ir/ir_translation_view.xml @@ -14,7 +14,7 @@ domain="[('comments', 'like', 'openerp-web')]"/> - + @@ -38,7 +38,7 @@ - + @@ -55,7 +55,7 @@ ir.translation - + From 56badfcb46f385eb659fb1a0c011d2def0dda1ae Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Mon, 15 Apr 2013 12:09:14 +0200 Subject: [PATCH 2/2] [REF]ir_translation: improve _get_src and _set_src function bzr revid: csn@openerp.com-20130415100914-wm0wqhgg5mou2wxs --- openerp/addons/base/ir/ir_translation.py | 43 ++++++++++++++---------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index a75304743a9..0a7b83f86b5 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -155,32 +155,41 @@ class ir_translation(osv.osv): lang_data = lang_model.read(cr, uid, lang_ids, ['code', 'name'], context=context) return [(d['code'], d['name']) for d in lang_data] - def _get_src(self, cr, uid, ids, name, arg, context): + def _get_src(self, cr, uid, ids, name, arg, context=None): + ''' Get source name for the translation. If object type is model then + return the value store in db. Otherwise return value store in src field + ''' + if not context: + context = {} res = {} - for record in self.browse(cr,uid,ids,context=context): + for record in self.browse(cr, uid, ids, context=context): if record.type != 'model': res[record.id] = record.src else: - data = record.name.split(',') - model = self.pool.get(data[0]) - field = data[1] + model, field = record.name.split(',') + #We need to take the context without the language information, because we want to read the + #value store in db and not on the one associate with current language. context_wo_lang = context.copy() context_wo_lang.pop('lang', None) res[record.id] = model.read(cr, uid, record.res_id, [field], context=context_wo_lang)[field] return res - def _set_src(self, cr, uid, id, name, value, args=None, context=None): - if value: - record=self.browse(cr,uid,id,context=context) - if record.type == 'model': - name = record.name - data = name.split(',') - model = self.pool.get(data[0]) - field = data[1] - context_wo_lang = context.copy() - context_wo_lang.pop('lang', None) - model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) - return self.write(cr,uid,id, {'src': value}, context=context_wo_lang) + def _set_src(self, cr, uid, id, name, value, args, context=None): + ''' When changing source term of a translation, change its value in db for + the associated object, and the src field + ''' + if not context: + context = {} + if value and record.model == 'model': + record = self.browse(cr, uid, id, context=context) + model, field = record.name.split(',') + #We need to take the context without the language information, because we want to write on the + #value store in db and not on the one associate with current language. + #Also not removing lang from context trigger an error when lang is different + context_wo_lang = context.copy() + context_wo_lang.pop('lang', None) + model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) + return self.write(cr, uid, id, {'src': value}, context=context_wo_lang) _columns = { 'name': fields.char('Translated field', required=True),