2011-01-14 12:41:54 +00:00
# -*- encoding: utf-8 -*-
2009-02-13 15:53:46 +00:00
##############################################################################
#
2011-01-14 12:41:54 +00:00
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Donors: Hasa Sàrl, Open Net Sàrl and Prisme Solutions Informatique SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
2009-02-13 15:53:46 +00:00
#
2011-01-14 12:41:54 +00:00
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
2009-02-13 15:53:46 +00:00
#
2011-01-14 12:41:54 +00:00
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
2009-02-13 15:53:46 +00:00
#
##############################################################################
2011-09-16 14:32:55 +00:00
from tools . translate import _
2009-02-13 15:53:46 +00:00
from osv import fields , osv
2012-01-17 17:21:53 +00:00
import re
2009-02-13 15:53:46 +00:00
class Bank ( osv . osv ) :
2009-10-16 11:25:20 +00:00
""" Inherit res.bank class in order to add swiss specific field """
_inherit = ' res.bank '
_columns = {
2011-09-16 14:32:55 +00:00
### Internal reference
' code ' : fields . char ( ' Code ' , size = 64 ) ,
2009-10-16 11:25:20 +00:00
###Swiss unik bank identifier also use in IBAN number
' clearing ' : fields . char ( ' Clearing number ' , size = 64 ) ,
### city of the bank
' city ' : fields . char ( ' City ' , size = 128 , select = 1 ) ,
}
2009-02-13 15:53:46 +00:00
Bank ( )
2009-10-16 11:25:20 +00:00
2011-09-16 14:32:55 +00:00
class ResPartnerBank ( osv . osv ) :
2009-10-16 11:25:20 +00:00
_inherit = " res.partner.bank "
2010-08-19 05:44:05 +00:00
2009-10-16 11:25:20 +00:00
_columns = {
2011-09-16 14:32:55 +00:00
' name ' : fields . char ( ' Description ' , size = 128 , required = True ) ,
2012-01-17 17:21:53 +00:00
' post_number ' : fields . char ( ' Post number ' , size = 64 , help = " Postal number 0x-xxxxxx-x or xxxxx " ) ,
' bvr_adherent_num ' : fields . char ( ' Bank BVR adherent number ' , size = 11 , help = " Your Bank adherent number to be printed in references of your BVR. This is not a postal account number. " ) ,
2011-09-16 14:32:55 +00:00
' dta_code ' : fields . char ( ' DTA code ' , size = 5 ) ,
' print_bank ' : fields . boolean ( ' Print Bank on BVR ' ) ,
' print_account ' : fields . boolean ( ' Print Account Number on BVR ' ) ,
' acc_number ' : fields . char ( ' Account/IBAN Number ' , size = 64 ) ,
2011-11-04 16:26:24 +00:00
' my_bank ' : fields . boolean ( ' Use my account to print BVR ? ' , help = " Check to print BVR invoices " ) ,
2011-09-16 14:32:55 +00:00
}
def name_get ( self , cursor , uid , ids , context = None ) :
if not len ( ids ) :
return [ ]
bank_type_obj = self . pool . get ( ' res.partner.bank.type ' )
type_ids = bank_type_obj . search ( cursor , uid , [ ] )
bank_type_names = { }
for bank_type in bank_type_obj . browse ( cursor , uid , type_ids ,
context = context ) :
bank_type_names [ bank_type . code ] = bank_type . name
res = [ ]
for r in self . read ( cursor , uid , ids , [ ' name ' , ' state ' ] , context ) :
res . append ( ( r [ ' id ' ] , r [ ' name ' ] + ' : ' + bank_type_names . get ( r [ ' state ' ] , ' ' ) ) )
2011-11-04 16:26:24 +00:00
return res
2011-11-07 15:22:56 +00:00
def _prepare_name ( self , bank ) :
2011-11-04 16:26:24 +00:00
" Hook to get bank number of bank account "
2012-01-19 10:08:46 +00:00
res = u ' '
if bank . acc_number :
res = super ( ResPartnerBank , self ) . _prepare_name ( bank ) or u ' '
2011-11-04 16:26:24 +00:00
if bank . post_number :
2012-01-17 17:21:53 +00:00
if res :
res = u " %s - %s " % ( res , bank . post_number )
else :
res = bank . post_number
2011-11-04 16:26:24 +00:00
return res
2010-08-19 05:44:05 +00:00
2012-01-17 17:21:53 +00:00
def _check_9_pos_postal_num ( self , number ) :
"""
check if a postal number in format xx - xxxxxx - x is correct ,
return true if it matches the pattern
and if check sum mod10 is ok
"""
from tools import mod10r
pattern = r ' ^[0-9] {2} -[0-9] { 1,6}-[0-9]$ '
if not re . search ( pattern , number ) :
return False
num , checksum = ( number . replace ( ' - ' , ' ' ) [ : - 1 ] , number [ - 1 : ] )
return mod10r ( num ) [ - 1 : ] == checksum
def _check_5_pos_postal_num ( self , number ) :
"""
check if a postal number on 5 positions is correct
"""
pattern = r ' ^[0-9] { 1,5}$ '
if not re . search ( pattern , number ) :
return False
return True
def _check_postal_num ( self , cursor , uid , ids ) :
banks = self . browse ( cursor , uid , ids )
for b in banks :
return self . _check_9_pos_postal_num ( b . post_number ) or \
self . _check_5_pos_postal_num ( b . post_number )
_constraints = [ ( _check_postal_num ,
' Please enter a correct postal number. (01-23456-5 or 12345) ' ,
[ ' post_number ' ] ) ]
2011-09-16 14:32:55 +00:00
_sql_constraints = [ ( ' bvr_adherent_uniq ' , ' unique (bvr_adherent_num) ' ,
' The BVR adherent number must be unique ! ' ) ]
2010-08-19 05:44:05 +00:00
2011-09-16 14:32:55 +00:00
ResPartnerBank ( )
2011-11-22 08:51:38 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: