[IMP] res.partner.bank: change _prepare_name_get() to make it usable by onchange...
authorRaphael Collet <rco@openerp.com>
Thu, 13 Sep 2012 11:44:03 +0000 (13:44 +0200)
committerRaphael Collet <rco@openerp.com>
Thu, 13 Sep 2012 11:44:03 +0000 (13:44 +0200)
bzr revid: rco@openerp.com-20120913114403-ny6h6vpijymj6o4s

openerp/addons/base/res/res_bank.py

index 3bfbd82..8f5d8aa 100644 (file)
@@ -172,37 +172,35 @@ class res_partner_bank(osv.osv):
                             ('required', field.required)]
         return res
 
-    def _prepare_name_get(self, cr, uid, bank_type_obj, bank_obj, context=None):
+    def _prepare_name_get(self, cr, uid, bank_dicts, context=None):
+        """ Format the name of a res.partner.bank.
+            This function is designed to be inherited to add replacement fields.
+            :param bank_dicts: a list of res.partner.bank dicts, as returned by the method read()
+            :return: [(id, name), ...], as returned by the method name_get()
         """
-        Format the name of a res.partner.bank.
-        This function is designed to be inherited to add replacement fields.
-        :param browse_record bank_type_obj: res.partner.bank.type object
-        :param browse_record bank_obj: res.partner.bank object
-        :rtype: str
-        :return: formatted name of a res.partner.bank record
-        """
-        return bank_type_obj.format_layout % bank_obj._data[bank_obj.id]
+        # prepare a mapping {code: format_layout} for all bank types
+        bank_type_obj = self.pool.get('res.partner.bank.type')
+        bank_types = bank_type_obj.browse(cr, uid, bank_type_obj.search(cr, uid, []), context=context)
+        bank_code_format = dict((bt.code, bt.format_layout) for bt in bank_types)
+
+        res = []
+        for data in bank_dicts:
+            name = data['acc_number']
+            if data['state'] and bank_code_format.get(data['state']):
+                try:
+                    if not data.get('bank_name'):
+                        data['bank_name'] = _('BANK')
+                    name = bank_code_format[data['state']] % data
+                except Exception:
+                    raise osv.except_osv(_("Formating Error"), _("Invalid Bank Account Type Name format."))
+            res.append((data['id'], name))
+        return res
 
     def name_get(self, cr, uid, ids, context=None):
         if not len(ids):
             return []
-        bank_type_obj = self.pool.get('res.partner.bank.type')
-        res = []
-        for val in self.browse(cr, uid, ids, context=context):
-            result = val.acc_number
-            if val.state:
-                type_ids = bank_type_obj.search(cr, uid, [('code','=',val.state)])
-                if type_ids:
-                    t = bank_type_obj.browse(cr, uid, type_ids[0], context=context)
-                    try:
-                        # avoid the default format_layout to result in "False: ..."
-                        if not val._data[val.id]['bank_name']:
-                            val._data[val.id]['bank_name'] = _('BANK')
-                        result = self._prepare_name_get(cr, uid, t, val, context=context)
-                    except Exception:
-                        raise osv.except_osv(_("Formating Error"), _("Invalid Bank Account Type Name format."))
-            res.append((val.id, result))
-        return res
+        bank_dicts = self.read(cr, uid, ids, context=context)
+        return self._prepare_name_get(cr, uid, bank_dicts, context=context)
 
     def onchange_company_id(self, cr, uid, ids, company_id, context=None):
         result = {}