summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@openerp.com>2013-11-14 14:55:02 +0100
committerChristophe Simonis <chs@openerp.com>2013-11-14 14:55:02 +0100
commitec88c042b29ab1e4e17bd343e2e5da829e088c83 (patch)
tree5425cf0e5f9ca5370074960b529c9edcb2724260
parent7c1cb42e1769ea32fa79468a2d7dfe0ac28fd8a9 (diff)
parent993bff902e22ab77b7a36d3f48ed12511e93e2b1 (diff)
[MERGE] forward port of branch saas-1 up to revid 4918 chs@openerp.com-20131114134731-n324awyon0spq624
bzr revid: chs@openerp.com-20131114135502-xqi6df3jzm7ng0io
-rw-r--r--openerp/addons/base/ir/ir_fields.py2
-rw-r--r--openerp/addons/base/tests/test_base.py42
-rw-r--r--openerp/osv/orm.py32
-rw-r--r--openerp/report/render/rml2pdf/trml2pdf.py27
-rw-r--r--openerpcommand/common.py3
5 files changed, 86 insertions, 20 deletions
diff --git a/openerp/addons/base/ir/ir_fields.py b/openerp/addons/base/ir/ir_fields.py
index 09622dadd17..e1522123dcf 100644
--- a/openerp/addons/base/ir/ir_fields.py
+++ b/openerp/addons/base/ir/ir_fields.py
@@ -253,7 +253,7 @@ class ir_fields_converter(orm.Model):
if not isinstance(selection, (tuple, list)):
# FIXME: Don't pass context to avoid translations?
# Or just copy context & remove lang?
- selection = selection(model, cr, uid)
+ selection = selection(model, cr, uid, context=None)
for item, label in selection:
labels = self._get_translations(
cr, uid, ('selection', 'model', 'code'), label, context=context)
diff --git a/openerp/addons/base/tests/test_base.py b/openerp/addons/base/tests/test_base.py
index 345973526c5..3a0131c2a05 100644
--- a/openerp/addons/base/tests/test_base.py
+++ b/openerp/addons/base/tests/test_base.py
@@ -304,5 +304,47 @@ class test_partner_recursion(common.TransactionCase):
cr, uid, p1, p2, p3 = self.cr, self.uid, self.p1, self.p2, self.p3
self.assertTrue(self.res_partner.write(cr, uid, [p1,p2,p3], {'phone': '123456'}))
+class test_translation(common.TransactionCase):
+
+ def setUp(self):
+ super(test_translation, self).setUp()
+ self.res_category = self.registry('res.partner.category')
+ self.ir_translation = self.registry('ir.translation')
+ cr, uid = self.cr, self.uid
+ self.registry('ir.translation').load(cr, ['base'], ['fr_BE'])
+ self.cat_id = self.res_category.create(cr, uid, {'name': 'Customers'})
+ self.ir_translation.create(cr, uid, {'name': 'res.partner.category,name', 'module':'base',
+ 'value': 'Clients', 'res_id': self.cat_id, 'lang':'fr_BE', 'state':'translated', 'type': 'model'})
+
+ def test_101_create_translated_record(self):
+ cr, uid = self.cr, self.uid
+
+ no_context_cat = self.res_category.browse(cr, uid, self.cat_id)
+ self.assertEqual(no_context_cat.name, 'Customers', "Error in basic name_get")
+
+ fr_context_cat = self.res_category.browse(cr, uid, self.cat_id, context={'lang':'fr_BE'})
+ self.assertEqual(fr_context_cat.name, 'Clients', "Translation not found")
+
+ def test_102_duplicate_record(self):
+ cr, uid = self.cr, self.uid
+ self.new_cat_id = self.res_category.copy(cr, uid, self.cat_id, context={'lang':'fr_BE'})
+
+ no_context_cat = self.res_category.browse(cr, uid, self.new_cat_id)
+ self.assertEqual(no_context_cat.name, 'Customers', "Duplication did not set untranslated value")
+
+ fr_context_cat = self.res_category.browse(cr, uid, self.new_cat_id, context={'lang':'fr_BE'})
+ self.assertEqual(fr_context_cat.name, 'Clients', "Did not found translation for initial value")
+
+ def test_103_duplicate_record_fr(self):
+ cr, uid = self.cr, self.uid
+ self.new_fr_cat_id = self.res_category.copy(cr, uid, self.cat_id, default={'name': 'Clients (copie)'}, context={'lang':'fr_BE'})
+
+ no_context_cat = self.res_category.browse(cr, uid, self.new_fr_cat_id)
+ self.assertEqual(no_context_cat.name, 'Clients (copie)', "Duplication with default value not applied")
+
+ fr_context_cat = self.res_category.browse(cr, uid, self.new_fr_cat_id, context={'lang':'fr_BE'})
+ self.assertEqual(fr_context_cat.name, 'Clients', "Did not found translation for initial value")
+
+
if __name__ == '__main__':
unittest2.main()
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 1ed1be7de6d..fa428cb7f00 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -5060,7 +5060,6 @@ class BaseModel(object):
# TODO it seems fields_get can be replaced by _all_columns (no need for translation)
fields = self.fields_get(cr, uid, context=context)
- translation_records = []
for field_name, field_def in fields.items():
# we must recursively copy the translations for o2o and o2m
if field_def['type'] == 'one2many':
@@ -5074,22 +5073,31 @@ class BaseModel(object):
target_obj.copy_translations(cr, uid, old_child, new_child, context=context)
# and for translatable fields we keep them for copy
elif field_def.get('translate'):
- trans_name = ''
+
if field_name in self._columns:
trans_name = self._name + "," + field_name
+ res_id = new_id
+
elif field_name in self._inherit_fields:
trans_name = self._inherit_fields[field_name][0] + "," + field_name
- if trans_name:
- trans_ids = trans_obj.search(cr, uid, [
- ('name', '=', trans_name),
- ('res_id', '=', old_id)
- ])
- translation_records.extend(trans_obj.read(cr, uid, trans_ids, context=context))
+ # get the id of the parent record to set the translation
+ inherit_field_name = self._inherit_fields[field_name][1]
+ res_id = self.read(cr, uid, [new_id], [inherit_field_name], context=context)[0][inherit_field_name][0]
+
+ else:
+ continue
- for record in translation_records:
- del record['id']
- record['res_id'] = new_id
- trans_obj.create(cr, uid, record, context=context)
+ trans_ids = trans_obj.search(cr, uid, [
+ ('name', '=', trans_name),
+ ('res_id', '=', old_id)
+ ])
+ records = trans_obj.read(cr, uid, trans_ids, context=context)
+ for record in records:
+ del record['id']
+ # remove source to avoid triggering _set_src
+ del record['source']
+ record.update({'res_id': res_id})
+ trans_obj.create(cr, uid, record, context=context)
def copy(self, cr, uid, id, default=None, context=None):
diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py
index 2052b128ad9..6a35e3a3806 100644
--- a/openerp/report/render/rml2pdf/trml2pdf.py
+++ b/openerp/report/render/rml2pdf/trml2pdf.py
@@ -631,6 +631,18 @@ class _rml_Illustration(platypus.flowables.Flowable):
drw = _rml_draw(self.localcontext ,self.node,self.styles, images=self.self2.images, path=self.self2.path, title=self.self2.title)
drw.render(self.canv, None)
+# Workaround for issue #15: https://bitbucket.org/rptlab/reportlab/issue/15/infinite-pages-produced-when-splitting
+original_pto_split = platypus.flowables.PTOContainer.split
+def split(self, availWidth, availHeight):
+ res = original_pto_split(self, availWidth, availHeight)
+ if len(res) > 2 and len(self._content) > 0:
+ header = self._content[0]._ptoinfo.header
+ trailer = self._content[0]._ptoinfo.trailer
+ if isinstance(res[-2], platypus.flowables.UseUpSpace) and len(header + trailer) == len(res[:-2]):
+ return []
+ return res
+platypus.flowables.PTOContainer.split = split
+
class _rml_flowable(object):
def __init__(self, doc, localcontext, images=None, path='.', title=None, canvas=None):
if images is None:
@@ -1012,11 +1024,16 @@ class _rml_template(object):
# Reset Page Number with new story tag
fis.append(PageReset())
story_cnt += 1
- if self.localcontext and self.localcontext.get('internal_header',False):
- self.doc_tmpl.afterFlowable(fis)
- self.doc_tmpl.build(fis,canvasmaker=NumberedCanvas)
- else:
- self.doc_tmpl.build(fis)
+ try:
+ if self.localcontext and self.localcontext.get('internal_header',False):
+ self.doc_tmpl.afterFlowable(fis)
+ self.doc_tmpl.build(fis,canvasmaker=NumberedCanvas)
+ else:
+ self.doc_tmpl.build(fis)
+ except platypus.doctemplate.LayoutError, e:
+ e.name = 'Print Error'
+ e.value = 'The document you are trying to print contains a table row that does not fit on one page. Please try to split it in smaller rows or contact your administrator.'
+ raise
def parseNode(rml, localcontext=None, fout=None, images=None, path='.', title=None):
node = etree.XML(rml)
diff --git a/openerpcommand/common.py b/openerpcommand/common.py
index f306d7f4b2d..9209f8e1eb6 100644
--- a/openerpcommand/common.py
+++ b/openerpcommand/common.py
@@ -40,8 +40,7 @@ def get_addons_from_paths(paths, exclude):
module_names = []
for p in paths:
if os.path.exists(p):
- names = list(set(os.listdir(p)))
- names = filter(lambda a: not (a.startswith('.') or a in exclude), names)
+ names = [n for n in os.listdir(p) if os.path.isfile(os.path.join(p, n, '__openerp__.py')) and not n.startswith('.') and n not in exclude]
names = filter(lambda a: os.path.isdir(os.path.join(p, a)), names)
names = filter(lambda a: os.path.exists(os.path.join(p, a, '__openerp__.py')), names)
module_names.extend(names)