[MERGE] l10n_fr_rib: improve check of RIB and IBAN (contrib from Akretion)

bzr revid: rco@openerp.com-20120201110507-ztz2ss626svv2jl6
This commit is contained in:
Raphael Collet 2012-02-01 12:05:07 +01:00
commit c0534b0100
7 changed files with 207 additions and 133 deletions

View File

@ -94,27 +94,34 @@ class res_partner_bank(osv.osv):
vals['acc_number'] = _pretty_iban(vals['acc_number']) vals['acc_number'] = _pretty_iban(vals['acc_number'])
return super(res_partner_bank, self).write(cr, uid, ids, vals, context) 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): def check_iban(self, cr, uid, ids, context=None):
''' '''
Check the IBAN number Check the IBAN number
''' '''
for bank_acc in self.browse(cr, uid, ids, context=context): for bank_acc in self.browse(cr, uid, ids, context=context):
if bank_acc.state<>'iban': if bank_acc.state != 'iban':
continue continue
iban = _format_iban(bank_acc.acc_number).lower() if not self.is_iban_valid(cr, uid, bank_acc.acc_number, context=context):
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:
return False return False
return True 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". 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', 'author' : u'Numérigraphe SARL',
'depends': ['base', 'account'], 'depends': ['account', 'base_iban'],
'init_xml': ['bank_data.xml', ], 'init_xml': ['bank_data.xml', ],
'update_xml': ['bank_view.xml', ], 'update_xml': ['bank_view.xml', ],
'installable': True, 'installable': True,

View File

@ -31,18 +31,17 @@ class res_partner_bank(osv.osv):
"""Check the RIB key""" """Check the RIB key"""
for bank_acc in self.browse(cr, uid, ids): for bank_acc in self.browse(cr, uid, ids):
# Ignore the accounts of type other than rib # Ignore the accounts of type other than rib
if bank_acc.state !='rib': if bank_acc.state != 'rib':
continue continue
# Fail if the needed values are empty of too short # Fail if the needed values are empty of too short
if (not bank_acc.bank_code if (not bank_acc.bank_code
or len(bank_acc.bank_code) != 5 or len(bank_acc.bank_code) != 5
or not bank_acc.office or len(bank_acc.office) != 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): or not bank_acc.key or len(bank_acc.key) != 2):
return False return False
# Get the rib data (without the key) # Get the rib data (without the key)
rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office, rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office, bank_acc.rib_acc_number)
bank_acc.acc_number)
# Translate letters into numbers according to a specific table # Translate letters into numbers according to a specific table
# (notice how s -> 2) # (notice how s -> 2)
table = dict((ord(a), b) for a, b in zip( table = dict((ord(a), b) for a, b in zip(
@ -51,7 +50,12 @@ class res_partner_bank(osv.osv):
# compute the key # compute the key
key = 97 - (100 * int(rib)) % 97 key = 97 - (100 * int(rib)) % 97
if int(bank_acc.key) != key: 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 return True
def onchange_bank_id(self, cr, uid, ids, bank_id, context=None): def onchange_bank_id(self, cr, uid, ids, bank_id, context=None):
@ -66,31 +70,17 @@ class res_partner_bank(osv.osv):
return result return result
_columns = { _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,), 'bank_code': fields.char('Bank Code', size=64, readonly=True,),
'office': fields.char('Office Code', size=5, readonly=True,), 'office': fields.char('Office Code', size=5, readonly=True,),
'key': fields.char('Key', size=2, readonly=True, 'key': fields.char('Key', size=2, readonly=True,
help="The key is a number allowing to check the " help="The key is a number allowing to check the "
"correctness of the other codes."), "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, _constraints = [(_check_key, 'The RIB and/or IBAN is not valid', ['rib_acc_number', 'bank_code', 'office', 'key'])]
_construct_constraint_msg,
["key"])]
res_partner_bank() res_partner_bank()
class res_bank(osv.osv): class res_bank(osv.osv):

View File

@ -6,24 +6,27 @@
RIB bank details RIB bank details
--> -->
<record id="bank_rib" model="res.partner.bank.type"> <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> <field name="code">rib</field>
<field name="format_layout">%(bank_name)s: %(bank_code)s %(office)s %(rib_acc_number)s %(key)s</field>
</record> </record>
<record id="rib_bank_code_field" model="res.partner.bank.type.field"> <record id="rib_bank_code_field" model="res.partner.bank.type.field">
<field name="name">bank_code</field> <field name="name">bank_code</field>
<field name="bank_type_id" ref="bank_rib"/> <field name="bank_type_id" ref="bank_rib"/>
<field eval="True" name="required"/> <field eval="True" name="required"/>
<field eval="False" name="readonly"/> <field eval="False" name="readonly"/>
<field name="size">5</field>
</record> </record>
<record id="rib_office_field" model="res.partner.bank.type.field"> <record id="rib_office_field" model="res.partner.bank.type.field">
<field name="name">office</field> <field name="name">office</field>
<field name="bank_type_id" ref="bank_rib"/> <field name="bank_type_id" ref="bank_rib"/>
<field eval="True" name="required"/> <field eval="True" name="required"/>
<field eval="False" name="readonly"/> <field eval="False" name="readonly"/>
<field name="size">5</field>
</record> </record>
<record id="bank_acc_number_field" model="res.partner.bank.type.field"> <record id="rib_rib_acc_number_field" model="res.partner.bank.type.field">
<field name="name">acc_number</field> <field name="name">rib_acc_number</field>
<field name="bank_type_id" ref="bank_rib"/> <field name="bank_type_id" ref="bank_rib"/>
<field eval="True" name="required"/> <field eval="True" name="required"/>
<field eval="False" name="readonly"/> <field eval="False" name="readonly"/>
@ -34,11 +37,19 @@
<field name="bank_type_id" ref="bank_rib"/> <field name="bank_type_id" ref="bank_rib"/>
<field eval="True" name="required"/> <field eval="True" name="required"/>
<field eval="False" name="readonly"/> <field eval="False" name="readonly"/>
<field name="size">2</field>
</record>
<record id="rib_acc_number_field" model="res.partner.bank.type.field">
<field name="name">acc_number</field>
<field name="bank_type_id" ref="bank_rib"/>
<field eval="False" name="required"/>
<field eval="False" name="readonly"/>
</record> </record>
<record id="rib_bic_field" model="res.partner.bank.type.field"> <record id="rib_bic_field" model="res.partner.bank.type.field">
<field name="name">bank_bic</field> <field name="name">bank_bic</field>
<field name="bank_type_id" ref="bank_rib"/> <field name="bank_type_id" ref="bank_rib"/>
<field name="required" eval="0"/> <field name="required" eval="False"/>
</record> </record>
</data> </data>
</openerp> </openerp>

View File

@ -1,44 +1,71 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data> <data>
<!-- add the fields for French RIB to the partner form (subform)--> <!-- add the fields for French RIB to the partner form (subform)-->
<record id="view_partner_rib1_form" model="ir.ui.view"> <record id="view_partner_rib1_form" model="ir.ui.view">
<field name="name">res.partner.form.rib1.inherit</field> <field name="name">res.partner.form.rib1.inherit</field>
<field name="model">res.partner</field> <field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" /> <field name="inherit_id" ref="account.view_partner_property_form" />
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="acc_number" position="before"> <data>
<newline /> <xpath expr="/form/notebook/page[@string='Accounting']/field[@name='bank_ids']/form/field[@name='acc_number']" position="before">
<field name="bank_code" /> <newline />
<field name="office" /> <field name="bank_code" />
<newline /> <field name="office" />
</field> <field name="rib_acc_number" />
</field> <field name="key" />
</record> <newline />
<record id="view_partner_rib2_form" model="ir.ui.view"> </xpath>
<field name="name">res.partner.form.rib2.inherit</field> <xpath expr="/form/notebook/page[@string='Accounting']/field[@name='bank_ids']/tree/field[@name='acc_number']" position="after">
<field name="model">res.partner</field> <field name="rib_acc_number"/>
<field name="inherit_id" ref="base.view_partner_form" /> </xpath>
<field name="type">form</field> </data>
<field name="arch" type="xml"> </field>
<field name="acc_number" position="after"> </record>
<field name="key" />
</field> <!-- add RIB fields to the form view of res.partner.bank -->
</field> <record id="view_partner_bank_rib_form" model="ir.ui.view">
</record> <field name="name">res.partner.bank.form.rib.inherit</field>
<field name="model">res.partner.bank</field>
<!-- add the bank code--> <field name="inherit_id" ref="base.view_partner_bank_form" />
<record id="view_res_bank_form" model="ir.ui.view"> <field name="type">form</field>
<field name="name">res.bank.form.rib.inherit</field> <field name="arch" type="xml">
<field name="model">res.bank</field> <field name="acc_number" position="before">
<field name="inherit_id" ref="base.view_res_bank_form" /> <field name="bank_code" />
<field name="type">form</field> <field name="office" />
<field name="arch" type="xml"> <newline />
<field name="bic" position="before"> <field name="rib_acc_number" />
<field name="rib_code" /> <field name="key" />
</field> <newline />
</field> </field>
</record> </field>
</data> </record>
<!-- add rib_acc_number to the tree view of res.partner.bank -->
<record id="view_partner_bank_rib_tree" model="ir.ui.view">
<field name="name">res.partner.bank.tree.rib.inherit</field>
<field name="model">res.partner.bank</field>
<field name="inherit_id" ref="base.view_partner_bank_tree" />
<field name="type">tree</field>
<field name="arch" type="xml">
<field name="acc_number" position="after">
<field name="rib_acc_number" />
</field>
</field>
</record>
<!-- add the bank code-->
<record id="view_res_bank_form" model="ir.ui.view">
<field name="name">res.bank.form.rib.inherit</field>
<field name="model">res.bank</field>
<field name="inherit_id" ref="base.view_res_bank_form" />
<field name="type">form</field>
<field name="arch" type="xml">
<field name="bic" position="before">
<field name="rib_code" />
</field>
</field>
</record>
</data>
</openerp> </openerp>

View File

@ -4,10 +4,10 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OpenERP Server 6.1beta\n" "Project-Id-Version: OpenERP Server 6.1rc1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-21 12:37+0000\n" "POT-Creation-Date: 2012-01-27 18:47+0000\n"
"PO-Revision-Date: 2011-11-21 12:37+0000\n" "PO-Revision-Date: 2012-01-27 18:47+0000\n"
"Last-Translator: <>\n" "Last-Translator: <>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\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" "Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank #: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
msgid "Bank Accounts" msgid "RIB and optional IBAN"
msgstr "Comptes bancaires" 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 #. module: l10n_fr_rib
#: field:res.partner.bank,bank_code:0 #: field:res.partner.bank,bank_code:0
@ -33,9 +38,10 @@ msgid "Bank Code"
msgstr "Code banque" msgstr "Code banque"
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field #: code:addons/l10n_fr_rib/bank.py:55
msgid "bank_bic" #, python-format
msgstr "bank_bic" 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 #. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field #: 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" msgstr "Code banque RIB"
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: model:ir.module.module,description:l10n_fr_rib.module_meta_information #: code:addons/l10n_fr_rib/bank.py:62
msgid "\n" #, python-format
"This module installs the base for RIB bank accounts (French standard for bank accounts). \n" msgid "The IBAN %s is not valid."
"To make it easier to enter RIB data, it will also allow to search for banks by code." msgstr "L'IBAN %s n'est pas valide."
msgstr "\n"
"Ce module installe la base pour les comptes bancaires RIB (norme française pour les n° de compte). \n" #. module: l10n_fr_rib
"Pour faciliter la saisie des RIBs, il permet aussi de chercher les banques par code." #: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
msgid "Bank Accounts"
msgstr "Comptes bancaires"
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: field:res.partner.bank,office:0 #: field:res.partner.bank,office:0
@ -62,43 +70,47 @@ msgid "Office Code"
msgstr "Code agence" msgstr "Code agence"
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
msgid "RIB Bank Details" msgid "rib_acc_number"
msgstr "Relevé d'identité bancaire (RIB)" msgstr "rib_acc_number"
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
msgid "bank_code" msgid "bank_code"
msgstr "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 #. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
msgid "key" msgid "key"
msgstr "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 #. module: l10n_fr_rib
#: help:res.partner.bank,key:0 #: help:res.partner.bank,key:0
msgid "The key is a number allowing to check the correctness of the other codes." 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." 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 #. module: l10n_fr_rib
#: field:res.partner.bank,key:0 #: field:res.partner.bank,key:0
msgid "Key" msgid "Key"
msgstr "Clé" 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 #. module: l10n_fr_rib
#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib #: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
msgid "%(bank_name)s: %(acc_number)s" msgid "%(bank_name)s: %(acc_number)s"
@ -110,7 +122,7 @@ msgid "Bank"
msgstr "Banque" msgstr "Banque"
#. module: l10n_fr_rib #. 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" msgid "acc_number"
msgstr "acc_number" msgstr "acc_number"

View File

@ -4,10 +4,10 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OpenERP Server 6.1beta\n" "Project-Id-Version: OpenERP Server 6.1rc1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-22 18:45+0000\n" "POT-Creation-Date: 2012-01-27 18:47+0000\n"
"PO-Revision-Date: 2011-12-22 18:45+0000\n" "PO-Revision-Date: 2012-01-27 18:47+0000\n"
"Last-Translator: <>\n" "Last-Translator: <>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\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" "Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
msgstr "" 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 #. module: l10n_fr_rib
#: field:res.partner.bank,bank_code:0 #: field:res.partner.bank,bank_code:0
msgid "Bank Code" msgid "Bank Code"
msgstr "" msgstr ""
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field #: code:addons/l10n_fr_rib/bank.py:55
msgid "bank_bic" #, python-format
msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
msgstr "" msgstr ""
#. module: l10n_fr_rib #. module: l10n_fr_rib
@ -41,6 +52,12 @@ msgstr ""
msgid "RIB Bank Code" msgid "RIB Bank Code"
msgstr "" 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 #. module: l10n_fr_rib
#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank #: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
msgid "Bank Accounts" msgid "Bank Accounts"
@ -52,8 +69,8 @@ msgid "Office Code"
msgstr "" msgstr ""
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
msgid "RIB Bank Details" msgid "rib_acc_number"
msgstr "" msgstr ""
#. module: l10n_fr_rib #. module: l10n_fr_rib
@ -61,13 +78,6 @@ msgstr ""
msgid "bank_code" msgid "bank_code"
msgstr "" 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 #. module: l10n_fr_rib
#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
msgid "key" msgid "key"
@ -78,11 +88,28 @@ msgstr ""
msgid "The key is a number allowing to check the correctness of the other codes." msgid "The key is a number allowing to check the correctness of the other codes."
msgstr "" msgstr ""
#. module: l10n_fr_rib
#: constraint:res.partner.bank:0
msgid "Error message in raise"
msgstr ""
#. module: l10n_fr_rib #. module: l10n_fr_rib
#: field:res.partner.bank,key:0 #: field:res.partner.bank,key:0
msgid "Key" msgid "Key"
msgstr "" 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 #. module: l10n_fr_rib
#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib #: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
msgid "%(bank_name)s: %(acc_number)s" msgid "%(bank_name)s: %(acc_number)s"
@ -94,7 +121,7 @@ msgid "Bank"
msgstr "" msgstr ""
#. module: l10n_fr_rib #. 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" msgid "acc_number"
msgstr "" msgstr ""