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
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,
"""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
"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
}
_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()
RIB bank details
-->
<record id="bank_rib" model="res.partner.bank.type">
- <field name="name">RIB Bank Details</field>
+ <field name="name">RIB and optional IBAN</field>
<field name="code">rib</field>
</record>
<field name="name">acc_number</field>
<field name="bank_type_id" ref="bank_rib"/>
<field eval="False" name="required"/>
- <field eval="True" name="readonly"/>
+ <field eval="False" name="readonly"/>
</record>
<record id="rib_bic_field" model="res.partner.bank.type.field">
<field name="name">bank_bic</field>
<field name="required" eval="False"/>
</record>
- <!-- IBAN and RIB -->
- <record id="bank_iban_rib" model="res.partner.bank.type">
- <field name="name">IBAN and RIB</field>
- <field name="code">iban-rib</field>
- </record>
-
- <record id="iban_rib_bank_code_field" model="res.partner.bank.type.field">
- <field name="name">bank_code</field>
- <field name="bank_type_id" ref="bank_iban_rib"/>
- <field eval="True" name="required"/>
- <field eval="False" name="readonly"/>
- <field name="size">5</field>
- </record>
- <record id="iban_rib_office_field" model="res.partner.bank.type.field">
- <field name="name">office</field>
- <field name="bank_type_id" ref="bank_iban_rib"/>
- <field eval="True" name="required"/>
- <field eval="False" name="readonly"/>
- <field name="size">5</field>
- </record>
- <record id="iban_rib_rib_acc_number_field" model="res.partner.bank.type.field">
- <field name="name">rib_acc_number</field>
- <field name="bank_type_id" ref="bank_iban_rib"/>
- <field eval="True" name="required"/>
- <field eval="False" name="readonly"/>
- <field name="size">11</field>
- </record>
- <record id="iban_rib_key_field" model="res.partner.bank.type.field">
- <field name="name">key</field>
- <field name="bank_type_id" ref="bank_iban_rib"/>
- <field eval="True" name="required"/>
- <field eval="False" name="readonly"/>
- <field name="size">2</field>
- </record>
- <record id="iban_rib_acc_number_field" model="res.partner.bank.type.field">
- <field name="name">acc_number</field>
- <field name="bank_type_id" ref="bank_iban_rib"/>
- <field eval="True" name="required"/>
- <field eval="False" name="readonly"/>
- </record>
- <record id="iban_rib_bic_field" model="res.partner.bank.type.field">
- <field name="name">bank_bic</field>
- <field name="bank_type_id" ref="bank_iban_rib"/>
- <field name="required" eval="0"/>
- </record>
-
-
</data>
</openerp>
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"
"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"
+#: constraint:res.partner.bank:0
+msgid "\n"
+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
+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,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."
+msgid "RIB and optional IBAN"
+msgstr "RIB et IBAN optionnel"
#. module: l10n_fr_rib
#: field:res.partner.bank,rib_acc_number:0
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"
+#: 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
msgstr "L'IBAN %s n'est pas valide."
#. module: l10n_fr_rib
-#: field:res.partner.bank,key:0
-msgid "Key"
-msgstr "Clé"
+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
+msgid "Bank Accounts"
+msgstr "Comptes bancaires"
#. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_bank
-msgid "Bank"
-msgstr "Banque"
+#: field:res.partner.bank,office:0
+msgid "Office Code"
+msgstr "Code agence"
#. 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"
-msgstr "\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 "rib_acc_number"
#. 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 "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
-#: code:addons/l10n_fr_rib/bank.py:54
-#: code:addons/l10n_fr_rib/bank.py:61
-#, python-format
-msgid "Error"
-msgstr "Error"
+#: 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
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"
+#: field:res.partner.bank,key:0
+msgid "Key"
+msgstr "Clé"
#. module: l10n_fr_rib
-#: field:res.partner.bank,bank_code:0
-msgid "Bank Code"
-msgstr "Code banque"
+#: 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.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."
+#: 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: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"
+#: model:ir.model,name:l10n_fr_rib.model_res_bank
+msgid "Bank"
+msgstr "Banque"
#. 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"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
+msgid "acc_number"
+msgstr "acc_number"
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"
"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"
+#: 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
-#: field:res.partner.bank,office:0
-msgid "Office Code"
+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
+msgid "RIB and optional IBAN"
msgstr ""
#. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
-msgid "RIB Bank Details"
+#: field:res.partner.bank,rib_acc_number:0
+msgid "RIB account number"
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."
+#: field:res.partner.bank,bank_code:0
+msgid "Bank Code"
msgstr ""
#. module: l10n_fr_rib
-#: field:res.partner.bank,rib_acc_number:0
-msgid "RIB account number"
+#: 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,name:l10n_fr_rib.bank_iban_rib
-msgid "IBAN and 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
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
-#: code:addons/l10n_fr_rib/bank.py:54
-#: code:addons/l10n_fr_rib/bank.py:61
-#, python-format
-msgid "Error"
+#: 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
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"
+#: field:res.partner.bank,key:0
+msgid "Key"
msgstr ""
#. module: l10n_fr_rib
-#: field:res.partner.bank,bank_code:0
-msgid "Bank Code"
+#: 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.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."
+#: 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: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"
+#: model:ir.model,name:l10n_fr_rib.model_res_bank
+msgid "Bank"
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"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
+msgid "acc_number"
msgstr ""