21
21
##############################################################################
23
from openerp.osv.orm import Model, fields
23
from openerp.osv import orm, fields
24
24
from tools import mod10r
28
"""Inherit res.bank class in order to add swiss specific field"""
31
### Internal reference
32
'code': fields.char('Code', size=64),
33
###Swiss unik bank identifier also use in IBAN number
34
'clearing': fields.char('Clearing number', size=64),
36
'city': fields.char('City', size=128, select=1),
40
class ResPartnerBank(Model):
42
Inherit res.partner.bank class in order to add swiss specific fields and state controls
44
_inherit = "res.partner.bank"
47
'name': fields.char('Description', size=128, required=True),
48
'bvr_adherent_num': fields.char('Bank BVR adherent number', size=11,
49
help=("Your Bank adherent number to be printed in references of your BVR."
50
"This is not a postal account number.")),
51
'acc_number': fields.char('Account/IBAN Number', size=64, required=True),
27
class BankCommon(object):
55
29
def _check_9_pos_postal_num(self, number):
55
class Bank(orm.Model, BankCommon):
56
"""Inherit res.bank class in order to add swiss specific field"""
59
### Internal reference
60
'code': fields.char('Code', size=64, select=True),
61
###Swiss unik bank identifier also use in IBAN number
62
'clearing': fields.char('Clearing number', size=64),
64
'city': fields.char('City', size=128, select=1),
66
'ccp': fields.char('CCP', size=64, select=1)
69
def _check_ccp_duplication(self, cursor, uid, ids):
70
p_acc_obj = self.pool['res.partner.bank']
71
for bank in self.browse(cursor, uid, ids):
72
p_acc_ids = p_acc_obj.search(cursor, uid, [('bank', '=', bank.id)])
74
check = p_acc_obj._check_ccp_duplication(cursor, uid, p_acc_ids)
81
79
def _check_postal_num(self, cursor, uid, ids):
83
81
validate postal number format
85
83
banks = self.browse(cursor, uid, ids)
87
if not b.state in ('bv', 'bvr'):
89
return self._check_9_pos_postal_num(b.acc_number) or \
90
self._check_5_pos_postal_num(b.acc_number)
93
_constraints = [(_check_postal_num,
94
'Please enter a correct postal number. (01-23456-1 or 12345)',
87
if not (self._check_9_pos_postal_num(bank.ccp) or
88
self._check_5_pos_postal_num(bank.ccp)):
92
def name_get(self, cursor, uid, ids, context=None):
94
cols = ('bic', 'name', 'street', 'city')
95
for bank in self.browse(cursor, uid, ids, context):
96
vals = (bank[x] for x in cols if bank[x])
97
res.append((bank.id, ' - '.join(vals)))
100
def name_search(self, cursor, uid, name, args=None, operator='ilike', context=None, limit=80):
106
cols = ('code', 'bic', 'name', 'street', 'city')
108
for val in name.split(' '):
110
tmp_ids = self.search(cursor, uid, [(col, 'ilike', val)] + args, limit=limit)
114
# we sort by occurence
115
to_ret_ids = list(set(ids))
116
to_ret_ids = sorted(to_ret_ids, key=lambda x: ids.count(x), reverse=True)
118
return self.name_get(cursor, uid, to_ret_ids, context=context)
120
_constraints = [(_check_postal_num,
121
'Please enter a correct postal number. (01-23456-1 or 12345)',
124
(_check_ccp_duplication,
125
'You can not enter a ccp both on the bank and on an account'
127
['acc_number', 'bank'])]
130
class ResPartnerBank(orm.Model, BankCommon):
132
Inherit res.partner.bank class in order to add swiss specific fields and state controls
134
_inherit = 'res.partner.bank'
137
'name': fields.char('Description', size=128, required=True),
138
'bvr_adherent_num': fields.char('Bank BVR adherent number', size=11,
139
help=("Your Bank adherent number to be printed in references of your BVR."
140
"This is not a postal account number.")),
141
'acc_number': fields.char('Account/IBAN Number', size=64, required=True),
142
'ccp': fields.related('bank', 'ccp', type='char', string='CCP',
146
def get_account_number(self, cursor, uid, bid, context=None):
147
if isinstance(bid, list):
149
current = self.browse(cursor, uid, bid, context=context)
150
if current.state not in ('bv', 'bvr'):
151
return current.acc_number
152
if current.bank and current.bank.ccp:
153
return current.bank.ccp
155
return current.acc_number
157
def _check_postal_num(self, cursor, uid, ids):
159
validate postal number format
161
p_banks = self.browse(cursor, uid, ids)
162
for p_bank in p_banks:
163
if not p_bank.state in ('bv', 'bvr'):
165
if not (self._check_9_pos_postal_num(p_bank.get_account_number()) or
166
self._check_5_pos_postal_num(p_bank.get_account_number())):
170
def _check_ccp_duplication(self, cursor, uid, ids):
172
Ensure that there is not a ccp in bank and res partner bank
175
p_banks = self.browse(cursor, uid, ids)
176
for p_bank in p_banks:
177
if not p_bank.state in ('bv', 'bvr'):
179
bank_ccp = p_bank.bank.ccp if p_bank.bank else False
182
part_bank_check = (self._check_5_pos_postal_num(p_bank.acc_number) or
183
self._check_9_pos_postal_num(p_bank.acc_number))
184
bank_check = (self._check_5_pos_postal_num(p_bank.bank.ccp) or
185
self._check_9_pos_postal_num(p_bank.bank.ccp))
186
if part_bank_check and bank_check:
190
_constraints = [(_check_postal_num,
191
'Please enter a correct postal number. (01-23456-1 or 12345)',
194
(_check_ccp_duplication,
195
'You can not enter a ccp both on the bank and on an account'
197
['acc_number', 'bank'])]
97
199
_sql_constraints = [('bvr_adherent_uniq', 'unique (bvr_adherent_num)',
98
'The BVR adherent number must be unique !')]
200
'The BVR adherent number must be unique !')]
100
202
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: