diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml
index aa45e0fcd6d..1d1168e8e3f 100644
--- a/bin/addons/base/ir/ir.xml
+++ b/bin/addons/base/ir/ir.xml
@@ -280,6 +280,7 @@
+
diff --git a/bin/addons/base/res/res_currency.py b/bin/addons/base/res/res_currency.py
index 0eb1befb599..2f1a137c645 100644
--- a/bin/addons/base/res/res_currency.py
+++ b/bin/addons/base/res/res_currency.py
@@ -45,6 +45,7 @@ class res_currency(osv.osv):
date=context['date']
else:
date=time.strftime('%Y-%m-%d')
+ date= date or time.strftime('%Y-%m-%d')
for id in ids:
cr.execute("SELECT currency_id, rate FROM res_currency_rate WHERE currency_id = %d AND name <= '%s' ORDER BY name desc LIMIT 1" % (id, date))
if cr.rowcount:
diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index fed44126277..26834aa9fee 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -788,6 +788,11 @@ class orm_template(object):
'fields': xfields
}
attrs = {'views': views}
+ if node.hasAttribute('widget') and node.getAttribute('widget')=='selection':
+ # We can not use the domain has it is defined according to the record !
+ attrs['selection'] = self.pool.get(relation).name_search(cr, user, '', context=context)
+ if not attrs.get('required',False):
+ attrs['selection'].append((False,''))
fields[node.getAttribute('name')] = attrs
elif node.nodeType==node.ELEMENT_NODE and node.localName in ('form', 'tree'):
@@ -894,7 +899,6 @@ class orm_template(object):
context = {}
def _inherit_apply(src, inherit):
def _find(node, node2):
- # Check if xpath query or normal inherit (with field matching)
if node2.nodeType == node2.ELEMENT_NODE and node2.localName == 'xpath':
res = xpath.Evaluate(node2.getAttribute('expr'), node)
return res and res[0]
@@ -1245,6 +1249,11 @@ class orm_memory(orm_template):
field_value2[i][field2] = field_value[i][field2]
field_value = field_value2
value[field] = field_value
+
+ # get the default values from the context
+ for key in context or {}:
+ if key.startswith('default_'):
+ value[key[8:]] = context[key]
return value
def search(self, cr, user, args, offset=0, limit=None, order=None,
@@ -1680,6 +1689,9 @@ class orm(orm_template):
field_value2[i][field2] = field_value[i][field2]
field_value = field_value2
value[field] = field_value
+ for key in context or {}:
+ if key.startswith('default_'):
+ value[key[8:]] = context[key]
return value
diff --git a/bin/tools/convert.py b/bin/tools/convert.py
index 932107636be..e1c1188d0d5 100644
--- a/bin/tools/convert.py
+++ b/bin/tools/convert.py
@@ -97,12 +97,13 @@ def _eval_xml(self,node, pool, cr, uid, idref, context=None):
a_eval = node.getAttribute('eval')
if len(a_eval):
import time
- idref['time'] = time
+ idref2 = idref.copy()
+ idref2['time'] = time
import release
- idref['version'] = release.version.rsplit('.', 1)[0]
- idref['ref'] = lambda x: self.id_get(cr, False, x)
+ idref2['version'] = release.version.rsplit('.', 1)[0]
+ idref2['ref'] = lambda x: self.id_get(cr, False, x)
if len(f_model):
- idref['obj'] = _obj(self.pool, cr, uid, f_model, context=context)
+ idref2['obj'] = _obj(self.pool, cr, uid, f_model, context=context)
try:
import pytz
except:
@@ -111,8 +112,8 @@ def _eval_xml(self,node, pool, cr, uid, idref, context=None):
class pytzclass(object):
all_timezones=[]
pytz=pytzclass()
- idref['pytz'] = pytz
- return eval(a_eval, idref)
+ idref2['pytz'] = pytz
+ return eval(a_eval, idref2)
if t == 'xml':
def _process(s, idref):
m = re.findall('[^%]%\((.*?)\)[ds]', s)
@@ -842,7 +843,7 @@ def convert_xml_import(cr, module, xmlfile, idref=None, mode='init', noupdate =
logger.notifyChannel('init', netsvc.LOG_ERROR, relaxng.error_log.last_error)
raise
- if not idref:
+ if idref is None:
idref={}
if report is None:
report=assertion_report()