From 253437f81f70e8852907725a2b2fed13e4ec6d43 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Tue, 1 Dec 2015 08:53:20 +0100 Subject: [PATCH] [FIX] base: set module when creating translation Port revision 70287d4 to 9.0 When creating missing translations on an object (e.g. using blue flag icon on a field), the value of the module was not set. This was problematic as could create a duplicated translation when the module was updated or the translation reloaded (as the module is used in find_expr). opw 654036 --- openerp/addons/base/ir/ir_translation.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index 95a68af013b..93fa727365e 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -538,41 +538,46 @@ class ir_translation(osv.osv): def insert_missing(self, field, records): """ Insert missing translations for `field` on `records`. """ records = records.with_context(lang=None) + external_ids = records.get_external_id() # if no xml_id, empty string if callable(field.translate): # insert missing translations for each term in src - query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value) - SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s + query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value, module) + SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s, %(module)s FROM res_lang l WHERE NOT EXISTS ( SELECT 1 FROM ir_translation - WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s AND src=%(src)s + WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s AND src=%(src)s AND module=%(module)s ); """ for record in records: + module = external_ids[record.id].split('.')[0] src = record[field.name] or None for term in set(field.get_trans_terms(src)): self._cr.execute(query, { 'name': "%s,%s" % (field.model_name, field.name), 'res_id': record.id, 'src': term, + 'module': module }) else: # insert missing translations for src - query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value) - SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s + query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value, module) + SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s, %(module)s FROM res_lang l WHERE l.code != 'en_US' AND NOT EXISTS ( SELECT 1 FROM ir_translation - WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s + WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s AND module=%(module)s ); UPDATE ir_translation SET src=%(src)s - WHERE type='model' AND name=%(name)s AND res_id=%(res_id)s; + WHERE type='model' AND name=%(name)s AND res_id=%(res_id)s AND module=%(module)s; """ for record in records: + module = external_ids[record.id].split('.')[0] self._cr.execute(query, { 'name': "%s,%s" % (field.model_name, field.name), 'res_id': record.id, 'src': record[field.name] or None, + 'module': module }) self.clear_caches()