Merge lp:~numerigraphe/openobject-addons/trunk-rib into lp:openobject-addons

Proposed by Numérigraphe
Status: Superseded
Proposed branch: lp:~numerigraphe/openobject-addons/trunk-rib
Merge into: lp:openobject-addons
Diff against target: 542 lines (+506/-0)
7 files modified
l10n_fr_rib/__init__.py (+25/-0)
l10n_fr_rib/__openerp__.py (+48/-0)
l10n_fr_rib/bank.py (+117/-0)
l10n_fr_rib/bank_data.xml (+44/-0)
l10n_fr_rib/bank_view.xml (+44/-0)
l10n_fr_rib/i18n/fr.po (+116/-0)
l10n_fr_rib/i18n/l10n_fr_rib.pot (+112/-0)
To merge this branch: bzr merge lp:~numerigraphe/openobject-addons/trunk-rib
Reviewer Review Type Date Requested Status
Olivier Dony (Odoo) technical Approve
OpenERP Accounting Experts Pending
Review via email: mp+82886@code.launchpad.net

This proposal has been superseded by a proposal from 2011-12-08.

Description of the change

In this branch, I humbly propose a new module l10n_fr_rib, allowing users to enter bank account details in RIB format.
This format is still very widespread in France, so I think this may be of use for numerous users.
This module existed in the community branch in v5.

To post a comment you must log in.
Revision history for this message
Olivier Dony (Odoo) (odo-openerp) wrote :

Hello Lionel,

This looks like a very important addition to the l10n_fr modules, so I'm in favor of merging it :-)

Have you perhaps got the chance to ask other French OpenERP integrators to review it? Shouldn't we ask them?

A few remarks, nevertheless (line numbers are those of the current diff @r.5755):

- l.61: It would be great if the module manifest contained a more complete description, explaining where users can configure its features, and how to use them
- *: the source files should presumably bear your own copyright, rather than being copyright "OpenERP SA" ;-)
- l.139: assuming that every domain item in the list will be iterable is not correct, what about OR/AND/NOT operators? And actually if you only wanted to have name_search match on the `rib` column in addition to the _rec_name, you could simply override name_search or _name_search, without impacting the normal search().
- l.171: why do you check the constraint again when computing the error message? This will duplicate the check every time...
- l.202: this call to search() is actually a normal name_search() call except you're hardcoding the 'name' field. It'd be slightly better to call super.name_search() (which calls name_get for you, so you need a bit of refactoring)

Thanks!

PS: marking this MP as ``Work In Progress``, when you're ready don't forget to make it ``Needs Review`` again

review: Needs Fixing
Revision history for this message
Numérigraphe (numerigraphe) wrote :

I'll make these changes ASAP.

Revision history for this message
Numérigraphe (numerigraphe) wrote :

Dear Olivier,
I've made the changes you suggested.
I dropped the search method because it probably hasn't been working for ages (bad refactoring of mine I guess) and I can't remember what it was for.
I'd be glad to have more French users's reviews, but I don't know any, can you help pass the word please?

Lionel.

Revision history for this message
Numérigraphe (numerigraphe) wrote :

I have posted a message on the French forum, let's see if someone shows up.
  http://www.openerp.com/forum/topic29283.html
Lionel.

Revision history for this message
Olivier Dony (Odoo) (odo-openerp) wrote :

On 11/29/2011 09:38 AM, Numérigraphe wrote:
> I have posted a message on the French forum, let's see if someone shows up.
> http://www.openerp.com/forum/topic29283.html

Excellent, and thanks for the branch update too, it looks good to me now.

review: Approve (technical)
Revision history for this message
Olivier Dony (Odoo) (odo-openerp) wrote :

No-one provided feedback yet (I relayed on twitter too), so I suggest we merge it as it is now. Further improvements can of course be suggested later via new merge proposals, if someone was too late to provide feedback here.

Thanks for the contribution!

Revision history for this message
Numérigraphe (numerigraphe) wrote :

Great news, thanks Olivier!
Lionel.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'l10n_fr_rib'
2=== added file 'l10n_fr_rib/__init__.py'
3--- l10n_fr_rib/__init__.py 1970-01-01 00:00:00 +0000
4+++ l10n_fr_rib/__init__.py 2011-11-28 16:11:34 +0000
5@@ -0,0 +1,25 @@
6+# -*- encoding: utf-8 -*-
7+##############################################################################
8+#
9+# OpenERP, Open Source Management Solution
10+# Copyright (C) 2011 Numérigraphe SARL.
11+#
12+# This program is free software: you can redistribute it and/or modify
13+# it under the terms of the GNU Affero General Public License as
14+# published by the Free Software Foundation, either version 3 of the
15+# License, or (at your option) any later version.
16+#
17+# This program is distributed in the hope that it will be useful,
18+# but WITHOUT ANY WARRANTY; without even the implied warranty of
19+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20+# GNU Affero General Public License for more details.
21+#
22+# You should have received a copy of the GNU Affero General Public License
23+# along with this program. If not, see <http://www.gnu.org/licenses/>.
24+#
25+##############################################################################
26+
27+import bank
28+
29+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
30+
31
32=== added file 'l10n_fr_rib/__openerp__.py'
33--- l10n_fr_rib/__openerp__.py 1970-01-01 00:00:00 +0000
34+++ l10n_fr_rib/__openerp__.py 2011-11-28 16:11:34 +0000
35@@ -0,0 +1,48 @@
36+# -*- encoding: utf-8 -*-
37+##############################################################################
38+#
39+# OpenERP, Open Source Management Solution
40+# Copyright (C) 2011 Numérigraphe SARL.
41+#
42+# This program is free software: you can redistribute it and/or modify
43+# it under the terms of the GNU Affero General Public License as
44+# published by the Free Software Foundation, either version 3 of the
45+# License, or (at your option) any later version.
46+#
47+# This program is distributed in the hope that it will be useful,
48+# but WITHOUT ANY WARRANTY; without even the implied warranty of
49+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
50+# GNU Affero General Public License for more details.
51+#
52+# You should have received a copy of the GNU Affero General Public License
53+# along with this program. If not, see <http://www.gnu.org/licenses/>.
54+#
55+##############################################################################
56+
57+{
58+ 'name': 'French RIB Bank Details',
59+ 'version': '1.0',
60+ 'category': 'Hidden',
61+ 'description': '''
62+This module lets users enter the banking details of Partners in the RIB format (French standard for bank accounts details).
63+RIB Bank Accounts can be entered in the "Accounting" tab of the Partner form by specifying the account type "RIB". The four standard RIB fields will then become mandatory:
64+- Bank Code
65+- Office Code
66+- Account number
67+- RIB key
68+As a safety measure, OpenERP will check the RIB key whenever a RIB is saved, and will refuse to record the data if the key is incorrect. Please bear in mind that this can only happen when the user presses the "save" button, for example on the Partner Form.
69+Since each bank account may relate to a Bank, users may enter the RIB Bank Code in the Bank form - it will the pre-fill the Bank Code on the RIB when they select the Bank.
70+To make this easier, this module will also let users find Banks using their RIB code.
71+
72+The module base_iban can be a useful addition to this module, because French banks are now progressively adopting the international IBAN format instead of the RIB format.
73+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".
74+''',
75+ 'author' : u'Numérigraphe SARL',
76+ 'depends': ['base', 'account'],
77+ 'init_xml': ['bank_data.xml', ],
78+ 'update_xml': ['bank_view.xml', ],
79+ 'installable': True,
80+ 'active': False,
81+}
82+
83+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
84
85=== added file 'l10n_fr_rib/bank.py'
86--- l10n_fr_rib/bank.py 1970-01-01 00:00:00 +0000
87+++ l10n_fr_rib/bank.py 2011-11-28 16:11:34 +0000
88@@ -0,0 +1,117 @@
89+# -*- encoding: utf-8 -*-
90+##############################################################################
91+#
92+# OpenERP, Open Source Management Solution
93+# Copyright (C) 2011 Numérigraphe SARL.
94+#
95+# This program is free software: you can redistribute it and/or modify
96+# it under the terms of the GNU Affero General Public License as
97+# published by the Free Software Foundation, either version 3 of the
98+# License, or (at your option) any later version.
99+#
100+# This program is distributed in the hope that it will be useful,
101+# but WITHOUT ANY WARRANTY; without even the implied warranty of
102+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103+# GNU Affero General Public License for more details.
104+#
105+# You should have received a copy of the GNU Affero General Public License
106+# along with this program. If not, see <http://www.gnu.org/licenses/>.
107+#
108+##############################################################################
109+
110+import netsvc
111+from osv import fields, osv
112+from tools.translate import _
113+
114+class res_partner_bank(osv.osv):
115+ """Add fields and behavior for French RIB"""
116+ _inherit = "res.partner.bank"
117+
118+ def _check_key(self, cr, uid, ids):
119+ """Check the RIB key"""
120+ for bank_acc in self.browse(cr, uid, ids):
121+ # Ignore the accounts of type other than rib
122+ if bank_acc.state !='rib':
123+ continue
124+ # Fail if the needed values are empty of too short
125+ if (not bank_acc.bank_code
126+ or len(bank_acc.bank_code) != 5
127+ or not bank_acc.office or len(bank_acc.office) != 5
128+ or not bank_acc.acc_number or len(bank_acc.acc_number) != 11
129+ or not bank_acc.key or len(bank_acc.key) != 2):
130+ return False
131+ # Get the rib data (without the key)
132+ rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office,
133+ bank_acc.acc_number)
134+ # Translate letters into numbers according to a specific table
135+ # (notice how s -> 2)
136+ table = dict((ord(a), b) for a, b in zip(
137+ u'abcdefghijklmnopqrstuvwxyz', u'12345678912345678923456789'))
138+ rib = rib.lower().translate(table)
139+ # compute the key
140+ key = 97 - (100 * int(rib)) % 97
141+ if int(bank_acc.key) != key:
142+ return False
143+ return True
144+
145+ def onchange_bank_id(self, cr, uid, ids, bank_id, context=None):
146+ """Change the bank code"""
147+ result = super(res_partner_bank, self).onchange_bank_id(cr, uid, ids, bank_id,
148+ context=context)
149+ if bank_id:
150+ bank = self.pool.get('res.bank').browse(cr, uid, bank_id,
151+ context=context)
152+ result['bank_code'] = bank.rib_code
153+ return {'value': result}
154+
155+ _columns = {
156+ 'bank_code': fields.char('Bank Code', size=64, readonly=True,),
157+ 'office': fields.char('Office Code', size=5, readonly=True,),
158+ 'key': fields.char('Key', size=2, readonly=True,
159+ help="The key is a number allowing to check the "
160+ "correctness of the other codes."),
161+ }
162+
163+ def _construct_constraint_msg(self, cr, uid, ids, context=None):
164+ """Quote the data in the warning message"""
165+ # Only process the first id
166+ if type(ids) not in (int, long):
167+ id = ids[0]
168+ rib = self.browse(cr, uid, id, context=context)
169+ if rib:
170+ return (_("\nThe RIB key %s does not correspond to the other "
171+ "codes: %s %s %s.") %
172+ (rib.key,
173+ rib.bank_code,
174+ rib.office,
175+ rib.acc_number) )
176+
177+ _constraints = [(_check_key,
178+ _construct_constraint_msg,
179+ ["key"])]
180+
181+res_partner_bank()
182+
183+class res_bank(osv.osv):
184+ """Add the bank code to make it easier to enter RIB data"""
185+ _inherit = 'res.bank'
186+
187+ def name_search(self, cr, user, name, args=None, operator='ilike',
188+ context=None, limit=80):
189+ """Search by bank code in addition to the standard search"""
190+ # Get the standard results
191+ results = super(res_bank, self).name_search(cr, user,
192+ name, args=args ,operator=operator, context=context, limit=limit)
193+ # Get additional results using the RIB code
194+ ids = self.search(cr, user, [('rib_code', operator, name)],
195+ limit=limit, context=context)
196+ # Merge the results
197+ results = list(set(results + self.name_get(cr, user, ids, context)))
198+ return results
199+
200+ _columns = {
201+ 'rib_code': fields.char('RIB Bank Code', size=64),
202+ }
203+res_bank()
204+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
205+
206
207=== added file 'l10n_fr_rib/bank_data.xml'
208--- l10n_fr_rib/bank_data.xml 1970-01-01 00:00:00 +0000
209+++ l10n_fr_rib/bank_data.xml 2011-11-28 16:11:34 +0000
210@@ -0,0 +1,44 @@
211+<?xml version="1.0" encoding="utf-8"?>
212+<openerp>
213+ <data>
214+
215+ <!--
216+ RIB bank details
217+ -->
218+ <record id="bank_rib" model="res.partner.bank.type">
219+ <field name="name">RIB Bank Details</field>
220+ <field name="code">rib</field>
221+ </record>
222+
223+ <record id="rib_bank_code_field" model="res.partner.bank.type.field">
224+ <field name="name">bank_code</field>
225+ <field name="bank_type_id" ref="bank_rib"/>
226+ <field eval="True" name="required"/>
227+ <field eval="False" name="readonly"/>
228+ </record>
229+ <record id="rib_office_field" model="res.partner.bank.type.field">
230+ <field name="name">office</field>
231+ <field name="bank_type_id" ref="bank_rib"/>
232+ <field eval="True" name="required"/>
233+ <field eval="False" name="readonly"/>
234+ </record>
235+ <record id="bank_acc_number_field" model="res.partner.bank.type.field">
236+ <field name="name">acc_number</field>
237+ <field name="bank_type_id" ref="bank_rib"/>
238+ <field eval="True" name="required"/>
239+ <field eval="False" name="readonly"/>
240+ <field name="size">11</field>
241+ </record>
242+ <record id="rib_key_field" model="res.partner.bank.type.field">
243+ <field name="name">key</field>
244+ <field name="bank_type_id" ref="bank_rib"/>
245+ <field eval="True" name="required"/>
246+ <field eval="False" name="readonly"/>
247+ </record>
248+ <record id="rib_bic_field" model="res.partner.bank.type.field">
249+ <field name="name">bank_bic</field>
250+ <field name="bank_type_id" ref="bank_rib"/>
251+ <field name="required" eval="0"/>
252+ </record>
253+ </data>
254+</openerp>
255
256=== added file 'l10n_fr_rib/bank_view.xml'
257--- l10n_fr_rib/bank_view.xml 1970-01-01 00:00:00 +0000
258+++ l10n_fr_rib/bank_view.xml 2011-11-28 16:11:34 +0000
259@@ -0,0 +1,44 @@
260+<?xml version="1.0" encoding="utf-8"?>
261+<openerp>
262+ <data>
263+ <!-- add the fields for French RIB to the partner form (subform)-->
264+ <record id="view_partner_rib1_form" model="ir.ui.view">
265+ <field name="name">res.partner.form.rib1.inherit</field>
266+ <field name="model">res.partner</field>
267+ <field name="inherit_id" ref="base.view_partner_form" />
268+ <field name="type">form</field>
269+ <field name="arch" type="xml">
270+ <field name="acc_number" position="before">
271+ <newline />
272+ <field name="bank_code" />
273+ <field name="office" />
274+ <newline />
275+ </field>
276+ </field>
277+ </record>
278+ <record id="view_partner_rib2_form" model="ir.ui.view">
279+ <field name="name">res.partner.form.rib2.inherit</field>
280+ <field name="model">res.partner</field>
281+ <field name="inherit_id" ref="base.view_partner_form" />
282+ <field name="type">form</field>
283+ <field name="arch" type="xml">
284+ <field name="acc_number" position="after">
285+ <field name="key" />
286+ </field>
287+ </field>
288+ </record>
289+
290+ <!-- add the bank code-->
291+ <record id="view_res_bank_form" model="ir.ui.view">
292+ <field name="name">res.bank.form.rib.inherit</field>
293+ <field name="model">res.bank</field>
294+ <field name="inherit_id" ref="base.view_res_bank_form" />
295+ <field name="type">form</field>
296+ <field name="arch" type="xml">
297+ <field name="bic" position="before">
298+ <field name="rib_code" />
299+ </field>
300+ </field>
301+ </record>
302+ </data>
303+</openerp>
304
305=== added directory 'l10n_fr_rib/i18n'
306=== added file 'l10n_fr_rib/i18n/fr.po'
307--- l10n_fr_rib/i18n/fr.po 1970-01-01 00:00:00 +0000
308+++ l10n_fr_rib/i18n/fr.po 2011-11-28 16:11:34 +0000
309@@ -0,0 +1,116 @@
310+# Translation of OpenERP Server.
311+# This file contains the translation of the following modules:
312+# * l10n_fr_rib
313+#
314+msgid ""
315+msgstr ""
316+"Project-Id-Version: OpenERP Server 6.1beta\n"
317+"Report-Msgid-Bugs-To: \n"
318+"POT-Creation-Date: 2011-11-21 12:37+0000\n"
319+"PO-Revision-Date: 2011-11-21 12:37+0000\n"
320+"Last-Translator: <>\n"
321+"Language-Team: \n"
322+"MIME-Version: 1.0\n"
323+"Content-Type: text/plain; charset=UTF-8\n"
324+"Content-Transfer-Encoding: \n"
325+"Plural-Forms: \n"
326+
327+#. module: l10n_fr_rib
328+#: constraint:res.partner.bank:0
329+msgid "\n"
330+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
331+msgstr "\n"
332+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
333+
334+#. module: l10n_fr_rib
335+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
336+msgid "Bank Accounts"
337+msgstr "Comptes bancaires"
338+
339+#. module: l10n_fr_rib
340+#: field:res.partner.bank,bank_code:0
341+msgid "Bank Code"
342+msgstr "Code banque"
343+
344+#. module: l10n_fr_rib
345+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
346+msgid "bank_bic"
347+msgstr "bank_bic"
348+
349+#. module: l10n_fr_rib
350+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
351+msgid "office"
352+msgstr "Agence"
353+
354+#. module: l10n_fr_rib
355+#: field:res.bank,rib_code:0
356+msgid "RIB Bank Code"
357+msgstr "Code banque RIB"
358+
359+#. module: l10n_fr_rib
360+#: model:ir.module.module,description:l10n_fr_rib.module_meta_information
361+msgid "\n"
362+"This module installs the base for RIB bank accounts (French standard for bank accounts). \n"
363+"To make it easier to enter RIB data, it will also allow to search for banks by code."
364+msgstr "\n"
365+"Ce module installe la base pour les comptes bancaires RIB (norme française pour les n° de compte). \n"
366+"Pour faciliter la saisie des RIBs, il permet aussi de chercher les banques par code."
367+
368+#. module: l10n_fr_rib
369+#: field:res.partner.bank,office:0
370+msgid "Office Code"
371+msgstr "Code agence"
372+
373+#. module: l10n_fr_rib
374+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
375+msgid "RIB Bank Details"
376+msgstr "Relevé d'identité bancaire (RIB)"
377+
378+#. module: l10n_fr_rib
379+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
380+msgid "bank_code"
381+msgstr "bank_code"
382+
383+#. module: l10n_fr_rib
384+#: code:addons/l10n_fr_rib/bank.py:109
385+#, python-format
386+msgid "\n"
387+"The RIB key %s does not correspond to the other codes: %s %s %s."
388+msgstr "\n"
389+"La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
390+
391+#. module: l10n_fr_rib
392+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
393+msgid "key"
394+msgstr "key"
395+
396+#. module: l10n_fr_rib
397+#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information
398+msgid "French RIB Bank Details"
399+msgstr "Relevés d'identité bancaire français (RIB)"
400+
401+#. module: l10n_fr_rib
402+#: help:res.partner.bank,key:0
403+msgid "The key is a number allowing to check the correctness of the other codes."
404+msgstr "La clé est un nombre permettant de vérifier que les autres codes sont corrects."
405+
406+#. module: l10n_fr_rib
407+#: field:res.partner.bank,key:0
408+msgid "Key"
409+msgstr "Clé"
410+
411+#. module: l10n_fr_rib
412+#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
413+msgid "%(bank_name)s: %(acc_number)s"
414+msgstr "%(bank_name)s: %(acc_number)s"
415+
416+#. module: l10n_fr_rib
417+#: model:ir.model,name:l10n_fr_rib.model_res_bank
418+msgid "Bank"
419+msgstr "Banque"
420+
421+#. module: l10n_fr_rib
422+#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
423+msgid "acc_number"
424+msgstr "acc_number"
425+
426
427=== added file 'l10n_fr_rib/i18n/l10n_fr_rib.pot'
428--- l10n_fr_rib/i18n/l10n_fr_rib.pot 1970-01-01 00:00:00 +0000
429+++ l10n_fr_rib/i18n/l10n_fr_rib.pot 2011-11-28 16:11:34 +0000
430@@ -0,0 +1,112 @@
431+# Translation of OpenERP Server.
432+# This file contains the translation of the following modules:
433+# * l10n_fr_rib
434+#
435+msgid ""
436+msgstr ""
437+"Project-Id-Version: OpenERP Server 6.1beta\n"
438+"Report-Msgid-Bugs-To: \n"
439+"POT-Creation-Date: 2011-11-21 12:36+0000\n"
440+"PO-Revision-Date: 2011-11-21 12:36+0000\n"
441+"Last-Translator: <>\n"
442+"Language-Team: \n"
443+"MIME-Version: 1.0\n"
444+"Content-Type: text/plain; charset=UTF-8\n"
445+"Content-Transfer-Encoding: \n"
446+"Plural-Forms: \n"
447+
448+#. module: l10n_fr_rib
449+#: constraint:res.partner.bank:0
450+msgid "\n"
451+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
452+msgstr ""
453+
454+#. module: l10n_fr_rib
455+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
456+msgid "Bank Accounts"
457+msgstr ""
458+
459+#. module: l10n_fr_rib
460+#: field:res.partner.bank,bank_code:0
461+msgid "Bank Code"
462+msgstr ""
463+
464+#. module: l10n_fr_rib
465+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
466+msgid "bank_bic"
467+msgstr ""
468+
469+#. module: l10n_fr_rib
470+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
471+msgid "office"
472+msgstr ""
473+
474+#. module: l10n_fr_rib
475+#: field:res.bank,rib_code:0
476+msgid "RIB Bank Code"
477+msgstr ""
478+
479+#. module: l10n_fr_rib
480+#: model:ir.module.module,description:l10n_fr_rib.module_meta_information
481+msgid "\n"
482+"This module installs the base for RIB bank accounts (French standard for bank accounts). \n"
483+"To make it easier to enter RIB data, it will also allow to search for banks by code."
484+msgstr ""
485+
486+#. module: l10n_fr_rib
487+#: field:res.partner.bank,office:0
488+msgid "Office Code"
489+msgstr ""
490+
491+#. module: l10n_fr_rib
492+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
493+msgid "RIB Bank Details"
494+msgstr ""
495+
496+#. module: l10n_fr_rib
497+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
498+msgid "bank_code"
499+msgstr ""
500+
501+#. module: l10n_fr_rib
502+#: code:addons/l10n_fr_rib/bank.py:109
503+#, python-format
504+msgid "\n"
505+"The RIB key %s does not correspond to the other codes: %s %s %s."
506+msgstr ""
507+
508+#. module: l10n_fr_rib
509+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
510+msgid "key"
511+msgstr ""
512+
513+#. module: l10n_fr_rib
514+#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information
515+msgid "French RIB Bank Details"
516+msgstr ""
517+
518+#. module: l10n_fr_rib
519+#: help:res.partner.bank,key:0
520+msgid "The key is a number allowing to check the correctness of the other codes."
521+msgstr ""
522+
523+#. module: l10n_fr_rib
524+#: field:res.partner.bank,key:0
525+msgid "Key"
526+msgstr ""
527+
528+#. module: l10n_fr_rib
529+#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
530+msgid "%(bank_name)s: %(acc_number)s"
531+msgstr ""
532+
533+#. module: l10n_fr_rib
534+#: model:ir.model,name:l10n_fr_rib.model_res_bank
535+msgid "Bank"
536+msgstr ""
537+
538+#. module: l10n_fr_rib
539+#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
540+msgid "acc_number"
541+msgstr ""
542+

Subscribers

People subscribed via source and target branches

to all changes: