From c00b20f3149f0ae763cc571ddc256cda9fd9f9cc Mon Sep 17 00:00:00 2001
From: "Pieter J. Kersten"
Date: Wed, 24 Feb 2010 10:47:29 +0100
Subject: [PATCH] [FIX] account_banking: search could raise exception [FIX]
account_banking: update existing IBAN numbers on install and update
---
account_banking/account_banking.py | 60 +++++++++++++++++++++++++++---
1 file changed, 55 insertions(+), 5 deletions(-)
diff --git a/account_banking/account_banking.py b/account_banking/account_banking.py
index fd3d68b8a..2b3c91071 100644
--- a/account_banking/account_banking.py
+++ b/account_banking/account_banking.py
@@ -62,6 +62,26 @@ import sepa
from osv import osv, fields
from tools.translate import _
from wizard.banktools import get_or_create_bank
+import pooler
+
+class account_banking_settings(osv.osv):
+ '''Settings for the account_banking module'''
+ _name = 'account.banking.settings'
+ _description = __doc__
+ _columns = {
+ 'use_online': fields.boolean('Online Sources',
+ help=('Select this if you want to be '
+ 'able to use the online banking '
+ 'resources from the internet '
+ 'to auto complete account and '
+ 'bank info.')
+ ),
+ }
+ _defaults = {
+ 'use_online': lambda *a: True,
+ }
+
+account_banking_settings()
class account_banking_account_settings(osv.osv):
'''Default Journal for Bank Account'''
@@ -882,6 +902,32 @@ class res_partner_bank(osv.osv):
self._founder = mro[i]
break
+ def init(self, cursor):
+ '''
+ Update existing iban accounts to comply to new regime
+ '''
+ cursor.execute('select id, acc_number, iban '
+ 'from res_partner_bank '
+ 'where '
+ 'upper(iban) != iban or '
+ 'acc_number is NULL'
+ )
+ for id, acc_number, iban in cursor.fetchall():
+ new_iban = new_acc_number = False
+ if iban:
+ iban_acc = sepa.IBAN(iban)
+ if iban_acc.valid:
+ new_acc_number = iban_acc.localized_BBAN
+ new_iban = str(iban_acc)
+ elif iban != iban.upper():
+ new_iban = iban.upper
+ if iban != new_iban or new_acc_number != acc_number:
+ cursor.execute('update res_partner_bank '
+ 'set iban = %s, acc_number = %s '
+ 'where id = %s' % (
+ new_iban, new_acc_number, id
+ ))
+
def create(self, cursor, uid, vals, context={}):
'''
Create dual function IBAN account for SEPA countries
@@ -918,21 +964,25 @@ class res_partner_bank(osv.osv):
d = dict(zip(lst, lst))
return d.keys()
+ extras = []
+
# Match acc_number searches as IBAN searches
- extras = [('iban',) + x[1:] for x in args if x[0] == 'acc_number']
+ iban_equiv = [('iban',) + x[1:] for x in args if x[0] == 'acc_number']
+ if iban_equiv:
+ extras.append(iban_equiv)
# Add local account search for IBAN searches
- extra = []
+ extra_args = []
for x in [x for x in args if x[0] == 'iban' and x[1] in ('=', '==')]:
iban = sepa.IBAN(x[2])
if iban.valid:
# There are countries that have no localized_BBAN
try:
- extra.append(('acc_number', '=', iban.localized_BBAN))
+ extra_args.append(('acc_number', '=', iban.localized_BBAN))
except:
pass
- if extra:
- extras.append(extra)
+ if extra_args:
+ extras.append(extra_args)
# Original search (_founder)
results = self._founder.search(self, cursor, uid, args, *rest, **kwargs)