diff options
| author | Martin Trigaux <mat@odoo.com> | 2015-12-01 08:53:20 +0100 |
|---|---|---|
| committer | Martin Trigaux <mat@odoo.com> | 2015-12-01 10:19:25 +0100 |
| commit | 253437f81f70e8852907725a2b2fed13e4ec6d43 (patch) | |
| tree | 3c8896f294edf47b2cdbccdc40352329ddf6e86f | |
| parent | 516c8de3e98e53633800327175e96a1a631d6753 (diff) | |
[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
| -rw-r--r-- | openerp/addons/base/ir/ir_translation.py | 19 |
1 files 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() |
