From 31c2873468d85251c361f0e617e27966298f0a83 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Fri, 27 Jan 2012 16:01:03 +0100 Subject: [PATCH 1/3] Define a new res.partner.bank.type.field "iban-rib" to store both RIB (old French format) and I BAN on the same res.partner.bank. On res.partner.bank, we now use the field 'rib_acc_number' instead of 'acc_number' to store the RIB bank account number. Fix inheritance of the view 'view_partner_rib1_form' : it must inherit account.view_partner_property_form and not base.view_partner_form ! Add RIB fields to standard tree and form of res.partner.bank (not just the res.partner form view) Add max size on RIB fields. Replaced _construct_constraint_msg function by a raise in the check function : it simplifies the code and avoids a double browse on the object in case of invalid RIB. Constraint now declares all the fields that must trigger the check. Updated French translation. bzr revid: alexis@via.ecp.fr-20120127150103-2khrxo0j2wfrrffa --- addons/base_iban/base_iban.py | 2 +- addons/l10n_fr_rib/bank.py | 39 +++--- addons/l10n_fr_rib/bank_data.xml | 63 +++++++++- addons/l10n_fr_rib/bank_view.xml | 65 +++++++--- addons/l10n_fr_rib/i18n/fr.po | 160 ++++++++++++++---------- addons/l10n_fr_rib/i18n/l10n_fr_rib.pot | 143 +++++++++++++-------- 6 files changed, 307 insertions(+), 165 deletions(-) diff --git a/addons/base_iban/base_iban.py b/addons/base_iban/base_iban.py index 157b88960bf..3dac7010755 100644 --- a/addons/base_iban/base_iban.py +++ b/addons/base_iban/base_iban.py @@ -100,7 +100,7 @@ class res_partner_bank(osv.osv): Check the IBAN number ''' for bank_acc in self.browse(cr, uid, ids, context=context): - if bank_acc.state<>'iban': + if bank_acc.state not in ('iban', 'iban-rib'): continue iban = _format_iban(bank_acc.acc_number).lower() if iban[:2] in _iban_len and len(iban) != _iban_len[iban[:2]]: diff --git a/addons/l10n_fr_rib/bank.py b/addons/l10n_fr_rib/bank.py index 03f71f60dee..39d35a8254e 100644 --- a/addons/l10n_fr_rib/bank.py +++ b/addons/l10n_fr_rib/bank.py @@ -31,18 +31,18 @@ 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 not in ('rib', 'iban-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) + 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 +51,15 @@ 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.state == 'iban-rib': + if not self.check_iban(cr, uid, [bank_acc.id]): + 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 +74,18 @@ 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, 'Error message in raise', + ['acc_number', '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..bd01ed5c691 100644 --- a/addons/l10n_fr_rib/bank_data.xml +++ b/addons/l10n_fr_rib/bank_data.xml @@ -9,21 +9,23 @@ RIB Bank Details rib - + bank_code + 5 office + 5 - - acc_number + + rib_acc_number @@ -34,11 +36,66 @@ + 2 + + + acc_number + + + bank_bic + + + + + + 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/bank_view.xml b/addons/l10n_fr_rib/bank_view.xml index 56eb8393aef..af62b810aee 100644 --- a/addons/l10n_fr_rib/bank_view.xml +++ b/addons/l10n_fr_rib/bank_view.xml @@ -5,29 +5,56 @@ res.partner.form.rib1.inherit res.partner - + form - - - - - - + + + + + + + + + + + + + - - res.partner.form.rib2.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 diff --git a/addons/l10n_fr_rib/i18n/fr.po b/addons/l10n_fr_rib/i18n/fr.po index 4057dafb803..324c3f23940 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 14:22+0000\n" +"PO-Revision-Date: 2012-01-27 14:22+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,46 +16,11 @@ msgstr "" "Plural-Forms: \n" #. 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" - -#. 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,bank_code:0 -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" - -#. 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.bank,rib_code:0 -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." - #. module: l10n_fr_rib #: field:res.partner.bank,office:0 msgid "Office Code" @@ -66,51 +31,110 @@ msgstr "Code agence" msgid "RIB Bank Details" msgstr "Relevé d'identité bancaire (RIB)" -#. 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 +#: 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: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.bank_acc_number_field +#: 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.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" + +#. 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" + diff --git a/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot b/addons/l10n_fr_rib/i18n/l10n_fr_rib.pot index 8953cd5329e..c2f6adbd4de 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 14:22+0000\n" +"PO-Revision-Date: 2012-01-27 14:22+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,36 +16,11 @@ msgstr "" "Plural-Forms: \n" #. 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 "" - -#. 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" -msgstr "" - -#. 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.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 #: field:res.partner.bank,office:0 msgid "Office Code" @@ -56,45 +31,109 @@ msgstr "" msgid "RIB Bank Details" msgstr "" -#. module: l10n_fr_rib -#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field -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" -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 +#: field:res.partner.bank,rib_acc_number:0 +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" +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 #: field:res.partner.bank,key:0 msgid "Key" msgstr "" -#. module: l10n_fr_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.bank_acc_number_field +#: 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.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" +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 "" + From 9cf1cca384dc07ecb475690d43ee04010b2ca1f9 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Fri, 27 Jan 2012 19:49:31 +0100 Subject: [PATCH 2/3] 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 --- addons/base_iban/base_iban.py | 39 +++--- addons/l10n_fr_rib/__openerp__.py | 2 +- addons/l10n_fr_rib/bank.py | 8 +- addons/l10n_fr_rib/bank_data.xml | 51 +------ addons/l10n_fr_rib/i18n/fr.po | 170 +++++++++++------------- addons/l10n_fr_rib/i18n/l10n_fr_rib.pot | 122 ++++++++--------- 6 files changed, 165 insertions(+), 227 deletions(-) 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 "" + From e29721f8727187fd8eb9060bdaabee0450b0b4fd Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Mon, 30 Jan 2012 16:43:28 +0100 Subject: [PATCH 3/3] Add a RIB-specific 'format_layout' on the res.partner.bank.type bzr revid: alexis@via.ecp.fr-20120130154328-jljngocsy14t0zi3 --- addons/l10n_fr_rib/bank_data.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/l10n_fr_rib/bank_data.xml b/addons/l10n_fr_rib/bank_data.xml index 121cc2184ee..1a898a64218 100644 --- a/addons/l10n_fr_rib/bank_data.xml +++ b/addons/l10n_fr_rib/bank_data.xml @@ -8,6 +8,7 @@ RIB and optional IBAN rib + %(bank_name)s: %(bank_code)s %(office)s %(rib_acc_number)s %(key)s