summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2015-12-01 08:53:20 +0100
committerMartin Trigaux <mat@odoo.com>2015-12-01 10:19:25 +0100
commit253437f81f70e8852907725a2b2fed13e4ec6d43 (patch)
tree3c8896f294edf47b2cdbccdc40352329ddf6e86f
parent516c8de3e98e53633800327175e96a1a631d6753 (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.py19
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()