[MERGE] forward port of branch saas-3 up to 8f13e83
authorChristophe Simonis <chs@odoo.com>
Wed, 20 Aug 2014 15:51:20 +0000 (17:51 +0200)
committerChristophe Simonis <chs@odoo.com>
Wed, 20 Aug 2014 15:51:20 +0000 (17:51 +0200)
1  2 
addons/account/account.py
addons/account_voucher/account_voucher_view.xml
addons/sale/sale.py
addons/web/controllers/main.py
addons/web/static/src/js/view_form.js
addons/web/static/src/xml/base.xml
addons/web_calendar/static/src/js/web_calendar.js
openerp/osv/fields.py

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1264,27 -1222,18 +1264,27 @@@ class function(_column)
          # if we already have a value, don't recompute it.
          # This happen if case of stored many2one fields
          if values and not multi and name in values[0]:
-             result = {v['id']: v[name] for v in values}
+             result = dict((v['id'], v[name]) for v in values)
          elif values and multi and all(n in values[0] for n in name):
-             result = {v['id']: dict((n, v[n]) for n in name) for v in values}
+             result = dict((v['id'], dict((n, v[n]) for n in name)) for v in values)
          else:
              result = self._fnct(obj, cr, uid, ids, name, self._arg, context)
 -        for id in ids:
 -            if multi and id in result:
 -                for field, value in result[id].iteritems():
 -                    if value:
 -                        result[id][field] = self.postprocess(cr, uid, obj, field, value, context)
 -            elif result.get(id):
 -                result[id] = self.postprocess(cr, uid, obj, name, result[id], context)
 +        if multi:
 +            swap = {}
 +            for rid, values in result.iteritems():
 +                for f, v in values.iteritems():
 +                    if f not in name:
 +                        continue
 +                    swap.setdefault(f, {})[rid] = v
 +
 +            for field, values in swap.iteritems():
 +                new_values = self._postprocess_batch(cr, uid, obj, field, values, context)
 +                for rid, value in new_values.iteritems():
 +                    result[rid][field] = value
 +
 +        else:
 +            result = self._postprocess_batch(cr, uid, obj, name, result, context)
 +
          return result
  
      def set(self, cr, obj, id, name, value, user=None, context=None):