base_iban/base_iban.py : extracted IBAN check functionnality in a dedicated function, so that it can be used by other modules.

l10n_fr_rib :
- add dependancy on base_iban
- we now have a single res.partner.bank.type with required RIB and optional IBAN
- adapted code and translations accordingly
- 'acc_number' field should not trigger _check_key function ; it already triggers the check_iban function.

bzr revid: alexis@via.ecp.fr-20120127184931-wudv91s96znzwjae
This commit is contained in:
Alexis de Lattre 2012-01-27 19:49:31 +01:00
parent 31c2873468
commit 9cf1cca384
6 changed files with 165 additions and 227 deletions

View File

@ -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

View File

@ -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,

View File

@ -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()

View File

@ -6,7 +6,7 @@
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>
@ -42,7 +42,7 @@
<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>
@ -50,52 +50,5 @@
<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>

View File

@ -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"

View File

@ -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 ""