diff --git a/addons/base_iban/base_iban.py b/addons/base_iban/base_iban.py
index 45192710cac..c29647a1176 100644
--- a/addons/base_iban/base_iban.py
+++ b/addons/base_iban/base_iban.py
@@ -94,27 +94,34 @@ class res_partner_bank(osv.osv):
vals['acc_number'] = _pretty_iban(vals['acc_number'])
return super(res_partner_bank, self).write(cr, uid, ids, vals, context)
+ def is_iban_valid(self, cr, uid, iban, context=None):
+ """ Check if IBAN is valid or not
+ @param iban: IBAN as string
+ @return: True if IBAN is valid, False otherwise
+ """
+ iban = _format_iban(iban).lower()
+ if iban[:2] in _ref_iban and len(iban) != len(_format_iban(_ref_iban[iban[:2]])):
+ return False
+ #the four first digits have to be shifted to the end
+ iban = iban[4:] + iban[:4]
+ #letters have to be transformed into numbers (a = 10, b = 11, ...)
+ iban2 = ""
+ for char in iban:
+ if char.isalpha():
+ iban2 += str(ord(char)-87)
+ else:
+ iban2 += char
+ #iban is correct if modulo 97 == 1
+ return int(iban2) % 97 == 1
+
def check_iban(self, cr, uid, ids, context=None):
'''
Check the IBAN number
'''
for bank_acc in self.browse(cr, uid, ids, context=context):
- if bank_acc.state<>'iban':
+ if bank_acc.state != 'iban':
continue
- iban = _format_iban(bank_acc.acc_number).lower()
- if iban[:2] in _ref_iban and len(iban) != len(_format_iban(_ref_iban[iban[:2]])):
- return False
- #the four first digits have to be shifted to the end
- iban = iban[4:] + iban[:4]
- #letters have to be transformed into numbers (a = 10, b = 11, ...)
- iban2 = ""
- for char in iban:
- if char.isalpha():
- iban2 += str(ord(char)-87)
- else:
- iban2 += char
- #iban is correct if modulo 97 == 1
- if not int(iban2) % 97 == 1:
+ if not self.is_iban_valid(cr, uid, bank_acc.acc_number, context=context):
return False
return True
diff --git a/addons/l10n_fr_rib/__openerp__.py b/addons/l10n_fr_rib/__openerp__.py
index 7f4c43a1c5a..ac1b03f4b3e 100644
--- a/addons/l10n_fr_rib/__openerp__.py
+++ b/addons/l10n_fr_rib/__openerp__.py
@@ -38,7 +38,7 @@ The module base_iban can be a useful addition to this module, because French ban
The RIB and IBAN codes for a single account can be entered by recording two Bank Accounts in OpenERP: the first with the type "RIB", the second with the type "IBAN".
''',
'author' : u'Numérigraphe SARL',
- 'depends': ['base', 'account'],
+ 'depends': ['account', 'base_iban'],
'init_xml': ['bank_data.xml', ],
'update_xml': ['bank_view.xml', ],
'installable': True,
diff --git a/addons/l10n_fr_rib/bank.py b/addons/l10n_fr_rib/bank.py
index 03f71f60dee..992f6331adb 100644
--- a/addons/l10n_fr_rib/bank.py
+++ b/addons/l10n_fr_rib/bank.py
@@ -31,18 +31,17 @@ class res_partner_bank(osv.osv):
"""Check the RIB key"""
for bank_acc in self.browse(cr, uid, ids):
# Ignore the accounts of type other than rib
- if bank_acc.state !='rib':
+ if bank_acc.state != 'rib':
continue
# Fail if the needed values are empty of too short
if (not bank_acc.bank_code
or len(bank_acc.bank_code) != 5
or not bank_acc.office or len(bank_acc.office) != 5
- or not bank_acc.acc_number or len(bank_acc.acc_number) != 11
+ or not bank_acc.rib_acc_number or len(bank_acc.rib_acc_number) != 11
or not bank_acc.key or len(bank_acc.key) != 2):
return False
# Get the rib data (without the key)
- rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office,
- bank_acc.acc_number)
+ rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office, bank_acc.rib_acc_number)
# Translate letters into numbers according to a specific table
# (notice how s -> 2)
table = dict((ord(a), b) for a, b in zip(
@@ -51,7 +50,12 @@ class res_partner_bank(osv.osv):
# compute the key
key = 97 - (100 * int(rib)) % 97
if int(bank_acc.key) != key:
- return False
+ raise osv.except_osv(_('Error'),
+ _("The RIB key %s does not correspond to the other codes: %s %s %s.") % \
+ (bank_acc.key, bank_acc.bank_code, bank_acc.office, bank_acc.rib_acc_number) )
+ if bank_acc.acc_number:
+ if not self.is_iban_valid(cr, uid, bank_acc.acc_number):
+ raise osv.except_osv(_('Error'), _("The IBAN %s is not valid.") % bank_acc.acc_number)
return True
def onchange_bank_id(self, cr, uid, ids, bank_id, context=None):
@@ -66,31 +70,17 @@ class res_partner_bank(osv.osv):
return result
_columns = {
+ 'acc_number': fields.char('Account Number', size=64, required=False),
+ 'rib_acc_number': fields.char('RIB account number', size=11, readonly=True,),
'bank_code': fields.char('Bank Code', size=64, readonly=True,),
'office': fields.char('Office Code', size=5, readonly=True,),
'key': fields.char('Key', size=2, readonly=True,
help="The key is a number allowing to check the "
"correctness of the other codes."),
}
-
- def _construct_constraint_msg(self, cr, uid, ids, context=None):
- """Quote the data in the warning message"""
- # Only process the first id
- if type(ids) not in (int, long):
- id = ids[0]
- rib = self.browse(cr, uid, id, context=context)
- if rib:
- return (_("\nThe RIB key %s does not correspond to the other "
- "codes: %s %s %s.") %
- (rib.key,
- rib.bank_code,
- rib.office,
- rib.acc_number) )
- _constraints = [(_check_key,
- _construct_constraint_msg,
- ["key"])]
-
+ _constraints = [(_check_key, 'The RIB and/or IBAN is not valid', ['rib_acc_number', 'bank_code', 'office', 'key'])]
+
res_partner_bank()
class res_bank(osv.osv):
diff --git a/addons/l10n_fr_rib/bank_data.xml b/addons/l10n_fr_rib/bank_data.xml
index 1dc9f4c88fd..1a898a64218 100644
--- a/addons/l10n_fr_rib/bank_data.xml
+++ b/addons/l10n_fr_rib/bank_data.xml
@@ -6,24 +6,27 @@
RIB bank details
-->
- RIB Bank Details
+ RIB and optional IBAN
rib
+ %(bank_name)s: %(bank_code)s %(office)s %(rib_acc_number)s %(key)s
-
+
bank_code
+ 5
office
+ 5
-
- acc_number
+
+ rib_acc_number
@@ -34,11 +37,19 @@
+ 2
+
+
+ acc_number
+
+
+
bank_bic
-
+
+
diff --git a/addons/l10n_fr_rib/bank_view.xml b/addons/l10n_fr_rib/bank_view.xml
index 56eb8393aef..b974df2e999 100644
--- a/addons/l10n_fr_rib/bank_view.xml
+++ b/addons/l10n_fr_rib/bank_view.xml
@@ -1,44 +1,71 @@
-
-
-
- res.partner.form.rib1.inherit
- res.partner
-
- form
-
-
-
-
-
-
-
-
-
-
- res.partner.form.rib2.inherit
- res.partner
-
- form
-
-
-
-
-
-
-
-
-
- res.bank.form.rib.inherit
- res.bank
-
- form
-
-
-
-
-
-
-
+
+
+
+ res.partner.form.rib1.inherit
+ res.partner
+
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.bank.form.rib.inherit
+ res.partner.bank
+
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.bank.tree.rib.inherit
+ res.partner.bank
+
+ tree
+
+
+
+
+
+
+
+
+
+ res.bank.form.rib.inherit
+ res.bank
+
+ form
+
+
+
+
+
+
+
diff --git a/addons/l10n_fr_rib/i18n/fr.po b/addons/l10n_fr_rib/i18n/fr.po
index 4057dafb803..e64880136ea 100644
--- a/addons/l10n_fr_rib/i18n/fr.po
+++ b/addons/l10n_fr_rib/i18n/fr.po
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: OpenERP Server 6.1beta\n"
+"Project-Id-Version: OpenERP Server 6.1rc1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-21 12:37+0000\n"
-"PO-Revision-Date: 2011-11-21 12:37+0000\n"
+"POT-Creation-Date: 2012-01-27 18:47+0000\n"
+"PO-Revision-Date: 2012-01-27 18:47+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -23,9 +23,14 @@ msgstr "\n"
"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
#. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
-msgid "Bank Accounts"
-msgstr "Comptes bancaires"
+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
+msgid "RIB and optional IBAN"
+msgstr "RIB et IBAN optionnel"
+
+#. module: l10n_fr_rib
+#: field:res.partner.bank,rib_acc_number:0
+msgid "RIB account number"
+msgstr "Numéro de compte RIB"
#. module: l10n_fr_rib
#: field:res.partner.bank,bank_code:0
@@ -33,9 +38,10 @@ msgid "Bank Code"
msgstr "Code banque"
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
-msgid "bank_bic"
-msgstr "bank_bic"
+#: code:addons/l10n_fr_rib/bank.py:55
+#, python-format
+msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
+msgstr "La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
#. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
@@ -48,13 +54,15 @@ msgid "RIB Bank Code"
msgstr "Code banque RIB"
#. module: l10n_fr_rib
-#: model:ir.module.module,description:l10n_fr_rib.module_meta_information
-msgid "\n"
-"This module installs the base for RIB bank accounts (French standard for bank accounts). \n"
-"To make it easier to enter RIB data, it will also allow to search for banks by code."
-msgstr "\n"
-"Ce module installe la base pour les comptes bancaires RIB (norme française pour les n° de compte). \n"
-"Pour faciliter la saisie des RIBs, il permet aussi de chercher les banques par code."
+#: code:addons/l10n_fr_rib/bank.py:62
+#, python-format
+msgid "The IBAN %s is not valid."
+msgstr "L'IBAN %s n'est pas valide."
+
+#. module: l10n_fr_rib
+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
+msgid "Bank Accounts"
+msgstr "Comptes bancaires"
#. module: l10n_fr_rib
#: field:res.partner.bank,office:0
@@ -62,43 +70,47 @@ msgid "Office Code"
msgstr "Code agence"
#. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
-msgid "RIB Bank Details"
-msgstr "Relevé d'identité bancaire (RIB)"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
+msgid "rib_acc_number"
+msgstr "rib_acc_number"
#. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
msgid "bank_code"
msgstr "bank_code"
-#. module: l10n_fr_rib
-#: code:addons/l10n_fr_rib/bank.py:109
-#, python-format
-msgid "\n"
-"The RIB key %s does not correspond to the other codes: %s %s %s."
-msgstr "\n"
-"La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
-
#. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
msgid "key"
msgstr "key"
-#. module: l10n_fr_rib
-#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information
-msgid "French RIB Bank Details"
-msgstr "Relevés d'identité bancaire français (RIB)"
-
#. module: l10n_fr_rib
#: help:res.partner.bank,key:0
msgid "The key is a number allowing to check the correctness of the other codes."
msgstr "La clé est un nombre permettant de vérifier que les autres codes sont corrects."
+#. module: l10n_fr_rib
+#: constraint:res.partner.bank:0
+msgid "Error message in raise"
+msgstr "Error message in raise"
+
#. module: l10n_fr_rib
#: field:res.partner.bank,key:0
msgid "Key"
msgstr "Clé"
+#. module: l10n_fr_rib
+#: code:addons/l10n_fr_rib/bank.py:54
+#: code:addons/l10n_fr_rib/bank.py:61
+#, python-format
+msgid "Error"
+msgstr "Error"
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
+msgid "bank_bic"
+msgstr "bank_bic"
+
#. module: l10n_fr_rib
#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
msgid "%(bank_name)s: %(acc_number)s"
@@ -110,7 +122,7 @@ msgid "Bank"
msgstr "Banque"
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
msgid "acc_number"
msgstr "acc_number"
diff --git a/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot b/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot
index 8953cd5329e..bca587cbf90 100644
--- a/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot
+++ b/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: OpenERP Server 6.1beta\n"
+"Project-Id-Version: OpenERP Server 6.1rc1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-12-22 18:45+0000\n"
-"PO-Revision-Date: 2011-12-22 18:45+0000\n"
+"POT-Creation-Date: 2012-01-27 18:47+0000\n"
+"PO-Revision-Date: 2012-01-27 18:47+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -21,14 +21,25 @@ msgid "\n"
"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
msgstr ""
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
+msgid "RIB and optional IBAN"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: field:res.partner.bank,rib_acc_number:0
+msgid "RIB account number"
+msgstr ""
+
#. module: l10n_fr_rib
#: field:res.partner.bank,bank_code:0
msgid "Bank Code"
msgstr ""
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
-msgid "bank_bic"
+#: code:addons/l10n_fr_rib/bank.py:55
+#, python-format
+msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
msgstr ""
#. module: l10n_fr_rib
@@ -41,6 +52,12 @@ msgstr ""
msgid "RIB Bank Code"
msgstr ""
+#. module: l10n_fr_rib
+#: code:addons/l10n_fr_rib/bank.py:62
+#, python-format
+msgid "The IBAN %s is not valid."
+msgstr ""
+
#. module: l10n_fr_rib
#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
msgid "Bank Accounts"
@@ -52,8 +69,8 @@ msgid "Office Code"
msgstr ""
#. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
-msgid "RIB Bank Details"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
+msgid "rib_acc_number"
msgstr ""
#. module: l10n_fr_rib
@@ -61,13 +78,6 @@ msgstr ""
msgid "bank_code"
msgstr ""
-#. module: l10n_fr_rib
-#: code:addons/l10n_fr_rib/bank.py:83
-#, python-format
-msgid "\n"
-"The RIB key %s does not correspond to the other codes: %s %s %s."
-msgstr ""
-
#. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
msgid "key"
@@ -78,11 +88,28 @@ msgstr ""
msgid "The key is a number allowing to check the correctness of the other codes."
msgstr ""
+#. module: l10n_fr_rib
+#: constraint:res.partner.bank:0
+msgid "Error message in raise"
+msgstr ""
+
#. module: l10n_fr_rib
#: field:res.partner.bank,key:0
msgid "Key"
msgstr ""
+#. module: l10n_fr_rib
+#: code:addons/l10n_fr_rib/bank.py:54
+#: code:addons/l10n_fr_rib/bank.py:61
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
+msgid "bank_bic"
+msgstr ""
+
#. module: l10n_fr_rib
#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
msgid "%(bank_name)s: %(acc_number)s"
@@ -94,7 +121,7 @@ msgid "Bank"
msgstr ""
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
msgid "acc_number"
msgstr ""