Merge lp:~openerp-dev/openobject-server/7.0-translation-inherits-mat into lp:openobject-server/7.0

Proposed by Martin Trigaux (OpenERP)
Status: Merged
Merged at revision: 5118
Proposed branch: lp:~openerp-dev/openobject-server/7.0-translation-inherits-mat
Merge into: lp:openobject-server/7.0
Diff against target: 107 lines (+63/-13)
2 files modified
openerp/addons/base/tests/test_base.py (+42/-0)
openerp/osv/orm.py (+21/-13)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/7.0-translation-inherits-mat
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+193788@code.launchpad.net

Description of the change

orm: when duplicating a record, if duplicates translations on a field from _inherits model, use the id of the parent record instead
Also avoid getting old value by removing 'source' value from read result.

To post a comment you must log in.
5119. By Martin Trigaux (OpenERP)

[IMP] comments

5120. By Martin Trigaux (OpenERP)

[ADD] base: tests for translations and duplication

5121. By Martin Trigaux (OpenERP)

[IMP] use assertEqual instead of assertTrue for better logging

Revision history for this message
Martin Trigaux (OpenERP) (mat-openerp) wrote :

Merged into 7.0

revno: 5118 [merge]
revision-id: <email address hidden>

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/addons/base/tests/test_base.py'
2--- openerp/addons/base/tests/test_base.py 2013-04-25 17:12:38 +0000
3+++ openerp/addons/base/tests/test_base.py 2013-11-04 15:40:02 +0000
4@@ -304,5 +304,47 @@
5 cr, uid, p1, p2, p3 = self.cr, self.uid, self.p1, self.p2, self.p3
6 self.assertTrue(self.res_partner.write(cr, uid, [p1,p2,p3], {'phone': '123456'}))
7
8+class test_translation(common.TransactionCase):
9+
10+ def setUp(self):
11+ super(test_translation, self).setUp()
12+ self.res_category = self.registry('res.partner.category')
13+ self.ir_translation = self.registry('ir.translation')
14+ cr, uid = self.cr, self.uid
15+ self.registry('ir.translation').load(cr, ['base'], ['fr_BE'])
16+ self.cat_id = self.res_category.create(cr, uid, {'name': 'Customers'})
17+ self.ir_translation.create(cr, uid, {'name': 'res.partner.category,name', 'module':'base',
18+ 'value': 'Clients', 'res_id': self.cat_id, 'lang':'fr_BE', 'state':'translated', 'type': 'model'})
19+
20+ def test_101_create_translated_record(self):
21+ cr, uid = self.cr, self.uid
22+
23+ no_context_cat = self.res_category.browse(cr, uid, self.cat_id)
24+ self.assertTrue(no_context_cat.name == 'Customers', "Error in basic name_get")
25+
26+ fr_context_cat = self.res_category.browse(cr, uid, self.cat_id, context={'lang':'fr_BE'})
27+ self.assertTrue(fr_context_cat.name == 'Clients', "Translation not found")
28+
29+ def test_102_duplicate_record(self):
30+ cr, uid = self.cr, self.uid
31+ self.new_cat_id = self.res_category.copy(cr, uid, self.cat_id, context={'lang':'fr_BE'})
32+
33+ no_context_cat = self.res_category.browse(cr, uid, self.new_cat_id)
34+ self.assertTrue(no_context_cat.name == 'Customers', "Duplication did not set untranslated value")
35+
36+ fr_context_cat = self.res_category.browse(cr, uid, self.new_cat_id, context={'lang':'fr_BE'})
37+ self.assertTrue(fr_context_cat.name == 'Clients', "Did not found translation for initial value")
38+
39+ def test_103_duplicate_record_fr(self):
40+ cr, uid = self.cr, self.uid
41+ self.new_fr_cat_id = self.res_category.copy(cr, uid, self.cat_id, default={'name': 'Clients (copie)'}, context={'lang':'fr_BE'})
42+
43+ no_context_cat = self.res_category.browse(cr, uid, self.new_fr_cat_id)
44+ self.assertTrue(no_context_cat.name == 'Clients (copie)', "Duplication with default value not applied")
45+
46+ fr_context_cat = self.res_category.browse(cr, uid, self.new_fr_cat_id, context={'lang':'fr_BE'})
47+ self.assertTrue(fr_context_cat.name == 'Clients', "Did not found translation for initial value")
48+
49+
50 if __name__ == '__main__':
51 unittest2.main()
52
53=== modified file 'openerp/osv/orm.py'
54--- openerp/osv/orm.py 2013-10-10 17:07:18 +0000
55+++ openerp/osv/orm.py 2013-11-04 15:40:02 +0000
56@@ -4985,7 +4985,6 @@
57 # TODO it seems fields_get can be replaced by _all_columns (no need for translation)
58 fields = self.fields_get(cr, uid, context=context)
59
60- translation_records = []
61 for field_name, field_def in fields.items():
62 # we must recursively copy the translations for o2o and o2m
63 if field_def['type'] == 'one2many':
64@@ -4999,22 +4998,31 @@
65 target_obj.copy_translations(cr, uid, old_child, new_child, context=context)
66 # and for translatable fields we keep them for copy
67 elif field_def.get('translate'):
68- trans_name = ''
69+
70 if field_name in self._columns:
71 trans_name = self._name + "," + field_name
72+ res_id = new_id
73+
74 elif field_name in self._inherit_fields:
75 trans_name = self._inherit_fields[field_name][0] + "," + field_name
76- if trans_name:
77- trans_ids = trans_obj.search(cr, uid, [
78- ('name', '=', trans_name),
79- ('res_id', '=', old_id)
80- ])
81- translation_records.extend(trans_obj.read(cr, uid, trans_ids, context=context))
82-
83- for record in translation_records:
84- del record['id']
85- record['res_id'] = new_id
86- trans_obj.create(cr, uid, record, context=context)
87+ # get the id of the parent record to set the translation
88+ inherit_field_name = self._inherit_fields[field_name][1]
89+ res_id = self.read(cr, uid, [new_id], [inherit_field_name], context=context)[0][inherit_field_name][0]
90+
91+ else:
92+ continue
93+
94+ trans_ids = trans_obj.search(cr, uid, [
95+ ('name', '=', trans_name),
96+ ('res_id', '=', old_id)
97+ ])
98+ records = trans_obj.read(cr, uid, trans_ids, context=context)
99+ for record in records:
100+ del record['id']
101+ # remove source to avoid triggering _set_src
102+ del record['source']
103+ record.update({'res_id': res_id})
104+ trans_obj.create(cr, uid, record, context=context)
105
106
107 def copy(self, cr, uid, id, default=None, context=None):