diff --git a/product/ERP5/Document/BankAccount.py b/product/ERP5/Document/BankAccount.py index d041e93cdd3a0c76b2b838049214f8680143b4b0..805bc8428acc83f06bfaf20b928ef0e73b37d180 100755 --- a/product/ERP5/Document/BankAccount.py +++ b/product/ERP5/Document/BankAccount.py @@ -32,9 +32,10 @@ from AccessControl import ClassSecurityInfo from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface from Products.ERP5Type.Document.Folder import Folder from Products.ERP5.Document.Coordinate import Coordinate +from Products.ERP5.Document.MetaNode import MetaNode import string -class BankAccount(Folder, Coordinate): +class BankAccount(Folder, Coordinate, MetaNode): """ A bank account number holds a collection of numbers and codes (ex. SWIFT, RIB, etc.) which may be used to identify a bank account. @@ -46,8 +47,8 @@ class BankAccount(Folder, Coordinate): BankAccount inherits from Base and from the mix-in Coordinate. """ - meta_type = 'ERP5 BankAccount' - portal_type = 'BankAccount' + meta_type = 'ERP5 Bank Account' + portal_type = 'Bank Account' add_permission = Permissions.AddPortalContent isPortalContent = 1 isRADContent = 1 @@ -68,141 +69,148 @@ class BankAccount(Folder, Coordinate): __implements__ = ( Interface.Coordinate ) - security.declareProtected(Permissions.View, 'getBankCode') - def getBankCode(self, **kw): - """ - Never return None. - """ - if self.bank_code == None: - return '' - return self.bank_code - - - security.declareProtected(Permissions.View, 'getBranch') - def getBranch(self, **kw): - """ - Never return None. - """ - if self.branch == None: - return '' - return self.branch - - - security.declareProtected(Permissions.View, 'getBankAccountNumber') - def getBankAccountNumber(self, **kw): - """ - Never return None. - """ - if self.bank_account_number == None: - return '' - return self.bank_account_number - - - security.declareProtected(Permissions.View, 'getBankCountryCode') - def getBankCountryCode(self, **kw): - """ - Never return None. - """ - if self.bank_country_code == None: - return '' - return self.bank_country_code - - - security.declareProtected(Permissions.View, 'getIbanTextFormat') - def getIbanTextFormat(self): - """ - Returns the standard IBAN text format - """ - iban = self.getIban() - l = 4 - s = "IBAN" - for i in range((len(iban) / l) + 1): - s += ' ' + iban[i*l : (i+1)*l] - return s.strip() - - - security.declareProtected(Permissions.View, 'getIbanTextFormat') - def getIban(self): - """ - The International Bank Account Number of this bank account. - IBAN is an international standard for identifying bank accounts worldwide. - """ - key = self.getIbanKey() - country_code = self.getBankCountryCode() - bban = self.getBban() - return (country_code + key + bban).upper().strip() - - - security.declareProtected(Permissions.View, 'getIbanKey') - def getIbanKey(self): - """ - The IBAN key ensure the integry of the IBAN code. - It's calculated with the ISO 7064 method (known as "97-10 modulo"). - """ - # Construct the alpha to number translation table - table = {} - for i in range(26): - table[chr(65+i)] = str(10+i) - # Calcul the key - country_code = self.getBankCountryCode() + '00' - s = self.getBban() + country_code - n = '' - for c in s: - if c.isalpha(): - n += table[c.upper()] - if c.isdigit(): - n += c - key = str(98 - (int(n) % 97)) - return key.zfill(2) - - - security.declareProtected(Permissions.View, 'getBban') - def getBban(self): - """ - The Basic Bank Account Number (BBAN) is the last part of the IBAN. - Usualy it correspond to the national bank account number. - """ - bank = self.getBankCode() - branch = self.getBranch() - ban = self.getBankAccountNumber() - key = self.getBbanKey() - return (bank + branch + ban + key).upper().strip() - - - security.declareProtected(Permissions.View, 'getBbanTextFormat') - def getBbanTextFormat(self, sep=' '): - """ - Returns a BBAN text format - """ - bank = self.getBankCode() - branch = self.getBranch() - ban = self.getBankAccountNumber() - key = self.getBbanKey() - return sep.join([bank, branch, ban, key]).upper().strip() - - - security.declareProtected(Permissions.View, 'getBbanKey') - def getBbanKey(self): - """ - The BBAN key ensure the integry of the BBAN code. - This is the french BBAN key algorithm. - """ - def transcode(string): - letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - digit = '12345678912345678923456789' - for i in range(len(letter)): - string = string.replace(letter[i], digit[i]) - return int(string) - - bank = self.getBankCode() - branch = self.getBranch() - ban = self.getBankAccountNumber() - if len(bank + branch + ban) == 0: - return '' - - bank += ('0' * (5 - len(bank))) - branch += ('0' * (5 - len(branch))) - - s = (bank + branch + ban).upper() - key = str(97 - ((transcode(s) * 100) % 97)) - return key.zfill(2) +# XXX The following "helper methods" have been commented out, and kept in the +# code as an example. +# It might be a potential hazard to have the system automatically fill in the +# security keys. It is far more secure to have the user enter them manually, +# and then have the system doucle-check them. +# This can be accomplished in ERP5 through the use of Constraint. +# +# security.declareProtected(Permissions.View, 'getBankCode') +# def getBankCode(self, **kw): +# """ +# Never return None. +# """ +# if self.bank_code == None: +# return '' +# return self.bank_code +# +# +# security.declareProtected(Permissions.View, 'getBranch') +# def getBranch(self, **kw): +# """ +# Never return None. +# """ +# if self.branch == None: +# return '' +# return self.branch +# +# +# security.declareProtected(Permissions.View, 'getBankAccountNumber') +# def getBankAccountNumber(self, **kw): +# """ +# Never return None. +# """ +# if self.bank_account_number == None: +# return '' +# return self.bank_account_number +# +# +# security.declareProtected(Permissions.View, 'getBankCountryCode') +# def getBankCountryCode(self, **kw): +# """ +# Never return None. +# """ +# if self.bank_country_code == None: +# return '' +# return self.bank_country_code +# +# +# security.declareProtected(Permissions.View, 'getIbanTextFormat') +# def getIbanTextFormat(self): +# """ +# Returns the standard IBAN text format +# """ +# iban = self.getIban() +# l = 4 +# s = "IBAN" +# for i in range((len(iban) / l) + 1): +# s += ' ' + iban[i*l : (i+1)*l] +# return s.strip() +# +# +# security.declareProtected(Permissions.View, 'getIbanTextFormat') +# def getIban(self): +# """ +# The International Bank Account Number of this bank account. +# IBAN is an international standard for identifying bank accounts worldwide. +# """ +# key = self.getIbanKey() +# country_code = self.getBankCountryCode() +# bban = self.getBban() +# return (country_code + key + bban).upper().strip() +# +# +# security.declareProtected(Permissions.View, 'getIbanKey') +# def getIbanKey(self): +# """ +# The IBAN key ensure the integry of the IBAN code. +# It's calculated with the ISO 7064 method (known as "97-10 modulo"). +# """ +# # Construct the alpha to number translation table +# table = {} +# for i in range(26): +# table[chr(65+i)] = str(10+i) +# # Calcul the key +# country_code = self.getBankCountryCode() + '00' +# s = self.getBban() + country_code +# n = '' +# for c in s: +# if c.isalpha(): +# n += table[c.upper()] +# if c.isdigit(): +# n += c +# key = str(98 - (int(n) % 97)) +# return key.zfill(2) +# +# +# security.declareProtected(Permissions.View, 'getBban') +# def getBban(self): +# """ +# The Basic Bank Account Number (BBAN) is the last part of the IBAN. +# Usualy it correspond to the national bank account number. +# """ +# bank = self.getBankCode() +# branch = self.getBranch() +# ban = self.getBankAccountNumber() +# key = self.getBbanKey() +# return (bank + branch + ban + key).upper().strip() +# +# +# security.declareProtected(Permissions.View, 'getBbanTextFormat') +# def getBbanTextFormat(self, sep=' '): +# """ +# Returns a BBAN text format +# """ +# bank = self.getBankCode() +# branch = self.getBranch() +# ban = self.getBankAccountNumber() +# key = self.getBbanKey() +# return sep.join([bank, branch, ban, key]).upper().strip() +# +# +# security.declareProtected(Permissions.View, 'getBbanKey') +# def getBbanKey(self): +# """ +# The BBAN key ensure the integry of the BBAN code. +# This is the french BBAN key algorithm. +# """ +# def transcode(string): +# letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +# digit = '12345678912345678923456789' +# for i in range(len(letter)): +# string = string.replace(letter[i], digit[i]) +# return int(string) +# +# bank = self.getBankCode() +# branch = self.getBranch() +# ban = self.getBankAccountNumber() +# if len(bank + branch + ban) == 0: +# return '' +# +# bank += ('0' * (5 - len(bank))) +# branch += ('0' * (5 - len(branch))) +# +# s = (bank + branch + ban).upper() +# key = str(97 - ((transcode(s) * 100) % 97)) +# return key.zfill(2) diff --git a/product/ERP5/PropertySheet/BankAccount.py b/product/ERP5/PropertySheet/BankAccount.py index 96046c948ce0eb54df7ebf2daceb51fc1c00e23a..ca787c9fd1a08441daf00c6c53cb57fda7a7cc2b 100755 --- a/product/ERP5/PropertySheet/BankAccount.py +++ b/product/ERP5/PropertySheet/BankAccount.py @@ -58,6 +58,11 @@ class BankAccount: 'type' : 'string', 'mode' : 'w' }, + {'id' : 'bank_account_holder_name', + 'description' : 'The bank account holder\'s name', + 'type' : 'string', + 'mode' : 'w' + }, ) _categories = ( 'source', ) diff --git a/product/ERP5/PropertySheet/CreditCard.py b/product/ERP5/PropertySheet/CreditCard.py deleted file mode 100755 index bff6b725c24f19b9f75b8b0cfde89c690bf82043..0000000000000000000000000000000000000000 --- a/product/ERP5/PropertySheet/CreditCard.py +++ /dev/null @@ -1,58 +0,0 @@ -############################################################################## -# -# Copyright (c) 2005 Nexedi SARL and Contributors. All Rights Reserved. -# Alexandre Boeglin <alex@boeglin.org> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class CreditCard: - """ - Properties for CreditCard Objects - """ - - _properties = ( - {'id' : 'card_number', - 'description' : 'The 16 digits card number', - 'type' : 'string', - 'mode' : 'w' - }, - {'id' : 'stop_date', - 'description' : 'The expiry date of the card', - 'type' : 'date', - 'mode' : 'w' - }, - {'id' : 'cardholder_name', - 'description' : "The cardholder's name as it appears on the card", - 'type' : 'string', - 'mode' : 'w' - }, - {'id' : 'security_key', - 'description' : 'The 3 digits code at the back of the card (CVV2'\ - ' or CVC)', - 'type' : 'string', - 'mode' : 'w' - }, - ) - - _categories = ( 'creditcard_type', )