diff --git a/addons/base_iban/base_iban.py b/addons/base_iban/base_iban.py
index 3dac7010755..d99d07f9f50 100644
--- a/addons/base_iban/base_iban.py
+++ b/addons/base_iban/base_iban.py
@@ -95,27 +95,36 @@ 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 if IBAN is not valid
+ """
+ iban = _format_iban(iban).lower()
+ if iban[:2] in _iban_len and len(iban) != _iban_len[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:
+ return False
+ return True
+
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 not in ('iban', 'iban-rib'):
+ if bank_acc.state<>'iban':
continue
- iban = _format_iban(bank_acc.acc_number).lower()
- if iban[:2] in _iban_len and len(iban) != _iban_len[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 072f8f5c1ac..def01f671b1 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 39d35a8254e..b6ae2a049e9 100644
--- a/addons/l10n_fr_rib/bank.py
+++ b/addons/l10n_fr_rib/bank.py
@@ -31,7 +31,7 @@ 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 not in ('rib', 'iban-rib'):
+ if bank_acc.state <> 'rib':
continue
# Fail if the needed values are empty of too short
if (not bank_acc.bank_code
@@ -56,8 +56,8 @@ class res_partner_bank(osv.osv):
"codes: %s %s %s.") %
(bank_acc.key, bank_acc.bank_code,
bank_acc.office, bank_acc.rib_acc_number) )
- if bank_acc.state == 'iban-rib':
- if not self.check_iban(cr, uid, [bank_acc.id]):
+ 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
@@ -84,7 +84,7 @@ class res_partner_bank(osv.osv):
}
_constraints = [(_check_key, 'Error message in raise',
- ['acc_number', 'rib_acc_number', 'bank_code', 'office', 'key'])]
+ ['rib_acc_number', 'bank_code', 'office', 'key'])]
res_partner_bank()
diff --git a/addons/l10n_fr_rib/bank_data.xml b/addons/l10n_fr_rib/bank_data.xml
index bd01ed5c691..121cc2184ee 100644
--- a/addons/l10n_fr_rib/bank_data.xml
+++ b/addons/l10n_fr_rib/bank_data.xml
@@ -6,7 +6,7 @@
RIB bank details
-->
- RIB Bank Details
+ RIB and optional IBAN
rib
@@ -42,7 +42,7 @@
acc_number
-
+
bank_bic
@@ -50,52 +50,5 @@
-
-
- IBAN and RIB
- iban-rib
-
-
-
- bank_code
-
-
-
- 5
-
-
- office
-
-
-
- 5
-
-
- rib_acc_number
-
-
-
- 11
-
-
- key
-
-
-
- 2
-
-
- acc_number
-
-
-
-
-
- bank_bic
-
-
-
-
-
diff --git a/addons/l10n_fr_rib/i18n/fr.po b/addons/l10n_fr_rib/i18n/fr.po
index 324c3f23940..e64880136ea 100644
--- a/addons/l10n_fr_rib/i18n/fr.po
+++ b/addons/l10n_fr_rib/i18n/fr.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.1rc1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-27 14:22+0000\n"
-"PO-Revision-Date: 2012-01-27 14:22+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"
@@ -15,53 +15,6 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
-#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_office_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
-msgid "office"
-msgstr "Agence"
-
-#. module: l10n_fr_rib
-#: field:res.partner.bank,office:0
-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)"
-
-#. 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
-#: field:res.partner.bank,rib_acc_number:0
-msgid "RIB account number"
-msgstr "Numéro de compte RIB"
-
-#. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_iban_rib
-msgid "IBAN and RIB"
-msgstr "IBAN et RIB"
-
-#. module: l10n_fr_rib
-#: 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
-#: field:res.partner.bank,key:0
-msgid "Key"
-msgstr "Clé"
-
-#. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_bank
-msgid "Bank"
-msgstr "Banque"
-
#. module: l10n_fr_rib
#: constraint:res.partner.bank:0
msgid "\n"
@@ -70,17 +23,82 @@ msgstr "\n"
"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_bank_code_field
+#: 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
+msgid "Bank Code"
+msgstr "Code banque"
+
+#. module: l10n_fr_rib
+#: 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
+msgid "office"
+msgstr "Agence"
+
+#. module: l10n_fr_rib
+#: field:res.bank,rib_code:0
+msgid "RIB Bank Code"
+msgstr "Code banque RIB"
+
+#. module: l10n_fr_rib
+#: 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
+msgid "Office Code"
+msgstr "Code agence"
+
+#. module: l10n_fr_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
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_key_field
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
msgid "key"
msgstr "key"
+#. 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
@@ -89,52 +107,22 @@ msgid "Error"
msgstr "Error"
#. module: l10n_fr_rib
-#: constraint:res.partner.bank:0
-msgid "Error message in raise"
-msgstr "Error message in raise"
-
-#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_acc_number_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
-msgid "acc_number"
-msgstr "acc_number"
-
-#. module: l10n_fr_rib
-#: field:res.partner.bank,bank_code:0
-msgid "Bank Code"
-msgstr "Code banque"
-
-#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_bic_field
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
msgid "bank_bic"
msgstr "bank_bic"
#. module: l10n_fr_rib
-#: field:res.bank,rib_code:0
-msgid "RIB Bank Code"
-msgstr "Code banque RIB"
-
-#. 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
-#: 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.iban_rib_rib_acc_number_field
-#: 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,format_layout:l10n_fr_rib.bank_iban_rib
#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
msgid "%(bank_name)s: %(acc_number)s"
msgstr "%(bank_name)s: %(acc_number)s"
+#. module: l10n_fr_rib
+#: model:ir.model,name:l10n_fr_rib.model_res_bank
+msgid "Bank"
+msgstr "Banque"
+
+#. module: l10n_fr_rib
+#: 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 c2f6adbd4de..bca587cbf90 100644
--- a/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot
+++ b/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.1rc1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-27 14:22+0000\n"
-"PO-Revision-Date: 2012-01-27 14:22+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"
@@ -16,24 +16,14 @@ msgstr ""
"Plural-Forms: \n"
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_office_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
-msgid "office"
-msgstr ""
-
-#. module: l10n_fr_rib
-#: field:res.partner.bank,office:0
-msgid "Office Code"
+#: constraint:res.partner.bank:0
+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 Bank Details"
-msgstr ""
-
-#. 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."
+msgid "RIB and optional IBAN"
msgstr ""
#. module: l10n_fr_rib
@@ -42,8 +32,24 @@ msgid "RIB account number"
msgstr ""
#. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_iban_rib
-msgid "IBAN and RIB"
+#: field:res.partner.bank,bank_code:0
+msgid "Bank Code"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: 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
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
+msgid "office"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: field:res.bank,rib_code:0
+msgid "RIB Bank Code"
msgstr ""
#. module: l10n_fr_rib
@@ -53,33 +59,45 @@ msgid "The IBAN %s is not valid."
msgstr ""
#. module: l10n_fr_rib
-#: field:res.partner.bank,key:0
-msgid "Key"
+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
+msgid "Bank Accounts"
msgstr ""
#. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_bank
-msgid "Bank"
+#: field:res.partner.bank,office:0
+msgid "Office Code"
msgstr ""
#. module: l10n_fr_rib
-#: constraint:res.partner.bank:0
-msgid "\n"
-"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
+msgid "rib_acc_number"
msgstr ""
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_bank_code_field
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
msgid "bank_code"
msgstr ""
#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_key_field
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
msgid "key"
msgstr ""
+#. 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 ""
+
+#. 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
@@ -88,52 +106,22 @@ msgid "Error"
msgstr ""
#. module: l10n_fr_rib
-#: constraint:res.partner.bank:0
-msgid "Error message in raise"
-msgstr ""
-
-#. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_acc_number_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
-msgid "acc_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.iban_rib_bic_field
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
msgid "bank_bic"
msgstr ""
#. module: l10n_fr_rib
-#: field:res.bank,rib_code:0
-msgid "RIB Bank Code"
-msgstr ""
-
-#. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
-msgid "Bank Accounts"
-msgstr ""
-
-#. module: l10n_fr_rib
-#: 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
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_rib_acc_number_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
-msgid "rib_acc_number"
-msgstr ""
-
-#. module: l10n_fr_rib
-#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_iban_rib
#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
msgid "%(bank_name)s: %(acc_number)s"
msgstr ""
+#. module: l10n_fr_rib
+#: model:ir.model,name:l10n_fr_rib.model_res_bank
+msgid "Bank"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
+msgid "acc_number"
+msgstr ""
+