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
=== added directory 'l10n_fr_rib'
=== added file 'l10n_fr_rib/__init__.py'
--- l10n_fr_rib/__init__.py 1970-01-01 00:00:00 +0000
+++ l10n_fr_rib/__init__.py 2011-11-28 16:11:34 +0000
@@ -0,0 +1,25 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# OpenERP, Open Source Management Solution
5# Copyright (C) 2011 Numérigraphe SARL.
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import bank
23
24# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
25
026
=== added file 'l10n_fr_rib/__openerp__.py'
--- l10n_fr_rib/__openerp__.py 1970-01-01 00:00:00 +0000
+++ l10n_fr_rib/__openerp__.py 2011-11-28 16:11:34 +0000
@@ -0,0 +1,48 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# OpenERP, Open Source Management Solution
5# Copyright (C) 2011 Numérigraphe SARL.
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22{
23 'name': 'French RIB Bank Details',
24 'version': '1.0',
25 'category': 'Hidden',
26 'description': '''
27This module lets users enter the banking details of Partners in the RIB format (French standard for bank accounts details).
28RIB 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:
29- Bank Code
30- Office Code
31- Account number
32- RIB key
33As 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.
34Since 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.
35To make this easier, this module will also let users find Banks using their RIB code.
36
37The 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.
38The 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".
39''',
40 'author' : u'Numérigraphe SARL',
41 'depends': ['base', 'account'],
42 'init_xml': ['bank_data.xml', ],
43 'update_xml': ['bank_view.xml', ],
44 'installable': True,
45 'active': False,
46}
47
48# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
049
=== added file 'l10n_fr_rib/bank.py'
--- l10n_fr_rib/bank.py 1970-01-01 00:00:00 +0000
+++ l10n_fr_rib/bank.py 2011-11-28 16:11:34 +0000
@@ -0,0 +1,117 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# OpenERP, Open Source Management Solution
5# Copyright (C) 2011 Numérigraphe SARL.
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import netsvc
23from osv import fields, osv
24from tools.translate import _
25
26class res_partner_bank(osv.osv):
27 """Add fields and behavior for French RIB"""
28 _inherit = "res.partner.bank"
29
30 def _check_key(self, cr, uid, ids):
31 """Check the RIB key"""
32 for bank_acc in self.browse(cr, uid, ids):
33 # Ignore the accounts of type other than rib
34 if bank_acc.state !='rib':
35 continue
36 # Fail if the needed values are empty of too short
37 if (not bank_acc.bank_code
38 or len(bank_acc.bank_code) != 5
39 or not bank_acc.office or len(bank_acc.office) != 5
40 or not bank_acc.acc_number or len(bank_acc.acc_number) != 11
41 or not bank_acc.key or len(bank_acc.key) != 2):
42 return False
43 # Get the rib data (without the key)
44 rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office,
45 bank_acc.acc_number)
46 # Translate letters into numbers according to a specific table
47 # (notice how s -> 2)
48 table = dict((ord(a), b) for a, b in zip(
49 u'abcdefghijklmnopqrstuvwxyz', u'12345678912345678923456789'))
50 rib = rib.lower().translate(table)
51 # compute the key
52 key = 97 - (100 * int(rib)) % 97
53 if int(bank_acc.key) != key:
54 return False
55 return True
56
57 def onchange_bank_id(self, cr, uid, ids, bank_id, context=None):
58 """Change the bank code"""
59 result = super(res_partner_bank, self).onchange_bank_id(cr, uid, ids, bank_id,
60 context=context)
61 if bank_id:
62 bank = self.pool.get('res.bank').browse(cr, uid, bank_id,
63 context=context)
64 result['bank_code'] = bank.rib_code
65 return {'value': result}
66
67 _columns = {
68 'bank_code': fields.char('Bank Code', size=64, readonly=True,),
69 'office': fields.char('Office Code', size=5, readonly=True,),
70 'key': fields.char('Key', size=2, readonly=True,
71 help="The key is a number allowing to check the "
72 "correctness of the other codes."),
73 }
74
75 def _construct_constraint_msg(self, cr, uid, ids, context=None):
76 """Quote the data in the warning message"""
77 # Only process the first id
78 if type(ids) not in (int, long):
79 id = ids[0]
80 rib = self.browse(cr, uid, id, context=context)
81 if rib:
82 return (_("\nThe RIB key %s does not correspond to the other "
83 "codes: %s %s %s.") %
84 (rib.key,
85 rib.bank_code,
86 rib.office,
87 rib.acc_number) )
88
89 _constraints = [(_check_key,
90 _construct_constraint_msg,
91 ["key"])]
92
93res_partner_bank()
94
95class res_bank(osv.osv):
96 """Add the bank code to make it easier to enter RIB data"""
97 _inherit = 'res.bank'
98
99 def name_search(self, cr, user, name, args=None, operator='ilike',
100 context=None, limit=80):
101 """Search by bank code in addition to the standard search"""
102 # Get the standard results
103 results = super(res_bank, self).name_search(cr, user,
104 name, args=args ,operator=operator, context=context, limit=limit)
105 # Get additional results using the RIB code
106 ids = self.search(cr, user, [('rib_code', operator, name)],
107 limit=limit, context=context)
108 # Merge the results
109 results = list(set(results + self.name_get(cr, user, ids, context)))
110 return results
111
112 _columns = {
113 'rib_code': fields.char('RIB Bank Code', size=64),
114 }
115res_bank()
116# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
117
0118
=== added file 'l10n_fr_rib/bank_data.xml'
--- l10n_fr_rib/bank_data.xml 1970-01-01 00:00:00 +0000
+++ l10n_fr_rib/bank_data.xml 2011-11-28 16:11:34 +0000
@@ -0,0 +1,44 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <!--
6 RIB bank details
7 -->
8 <record id="bank_rib" model="res.partner.bank.type">
9 <field name="name">RIB Bank Details</field>
10 <field name="code">rib</field>
11 </record>
12
13 <record id="rib_bank_code_field" model="res.partner.bank.type.field">
14 <field name="name">bank_code</field>
15 <field name="bank_type_id" ref="bank_rib"/>
16 <field eval="True" name="required"/>
17 <field eval="False" name="readonly"/>
18 </record>
19 <record id="rib_office_field" model="res.partner.bank.type.field">
20 <field name="name">office</field>
21 <field name="bank_type_id" ref="bank_rib"/>
22 <field eval="True" name="required"/>
23 <field eval="False" name="readonly"/>
24 </record>
25 <record id="bank_acc_number_field" model="res.partner.bank.type.field">
26 <field name="name">acc_number</field>
27 <field name="bank_type_id" ref="bank_rib"/>
28 <field eval="True" name="required"/>
29 <field eval="False" name="readonly"/>
30 <field name="size">11</field>
31 </record>
32 <record id="rib_key_field" model="res.partner.bank.type.field">
33 <field name="name">key</field>
34 <field name="bank_type_id" ref="bank_rib"/>
35 <field eval="True" name="required"/>
36 <field eval="False" name="readonly"/>
37 </record>
38 <record id="rib_bic_field" model="res.partner.bank.type.field">
39 <field name="name">bank_bic</field>
40 <field name="bank_type_id" ref="bank_rib"/>
41 <field name="required" eval="0"/>
42 </record>
43 </data>
44</openerp>
045
=== added file 'l10n_fr_rib/bank_view.xml'
--- l10n_fr_rib/bank_view.xml 1970-01-01 00:00:00 +0000
+++ l10n_fr_rib/bank_view.xml 2011-11-28 16:11:34 +0000
@@ -0,0 +1,44 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <!-- add the fields for French RIB to the partner form (subform)-->
5 <record id="view_partner_rib1_form" model="ir.ui.view">
6 <field name="name">res.partner.form.rib1.inherit</field>
7 <field name="model">res.partner</field>
8 <field name="inherit_id" ref="base.view_partner_form" />
9 <field name="type">form</field>
10 <field name="arch" type="xml">
11 <field name="acc_number" position="before">
12 <newline />
13 <field name="bank_code" />
14 <field name="office" />
15 <newline />
16 </field>
17 </field>
18 </record>
19 <record id="view_partner_rib2_form" model="ir.ui.view">
20 <field name="name">res.partner.form.rib2.inherit</field>
21 <field name="model">res.partner</field>
22 <field name="inherit_id" ref="base.view_partner_form" />
23 <field name="type">form</field>
24 <field name="arch" type="xml">
25 <field name="acc_number" position="after">
26 <field name="key" />
27 </field>
28 </field>
29 </record>
30
31 <!-- add the bank code-->
32 <record id="view_res_bank_form" model="ir.ui.view">
33 <field name="name">res.bank.form.rib.inherit</field>
34 <field name="model">res.bank</field>
35 <field name="inherit_id" ref="base.view_res_bank_form" />
36 <field name="type">form</field>
37 <field name="arch" type="xml">
38 <field name="bic" position="before">
39 <field name="rib_code" />
40 </field>
41 </field>
42 </record>
43 </data>
44</openerp>
045
=== added directory 'l10n_fr_rib/i18n'
=== added file 'l10n_fr_rib/i18n/fr.po'
--- l10n_fr_rib/i18n/fr.po 1970-01-01 00:00:00 +0000
+++ l10n_fr_rib/i18n/fr.po 2011-11-28 16:11:34 +0000
@@ -0,0 +1,116 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * l10n_fr_rib
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 6.1beta\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2011-11-21 12:37+0000\n"
10"PO-Revision-Date: 2011-11-21 12:37+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: l10n_fr_rib
19#: constraint:res.partner.bank:0
20msgid "\n"
21"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
22msgstr "\n"
23"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
24
25#. module: l10n_fr_rib
26#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
27msgid "Bank Accounts"
28msgstr "Comptes bancaires"
29
30#. module: l10n_fr_rib
31#: field:res.partner.bank,bank_code:0
32msgid "Bank Code"
33msgstr "Code banque"
34
35#. module: l10n_fr_rib
36#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
37msgid "bank_bic"
38msgstr "bank_bic"
39
40#. module: l10n_fr_rib
41#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
42msgid "office"
43msgstr "Agence"
44
45#. module: l10n_fr_rib
46#: field:res.bank,rib_code:0
47msgid "RIB Bank Code"
48msgstr "Code banque RIB"
49
50#. module: l10n_fr_rib
51#: model:ir.module.module,description:l10n_fr_rib.module_meta_information
52msgid "\n"
53"This module installs the base for RIB bank accounts (French standard for bank accounts). \n"
54"To make it easier to enter RIB data, it will also allow to search for banks by code."
55msgstr "\n"
56"Ce module installe la base pour les comptes bancaires RIB (norme française pour les n° de compte). \n"
57"Pour faciliter la saisie des RIBs, il permet aussi de chercher les banques par code."
58
59#. module: l10n_fr_rib
60#: field:res.partner.bank,office:0
61msgid "Office Code"
62msgstr "Code agence"
63
64#. module: l10n_fr_rib
65#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
66msgid "RIB Bank Details"
67msgstr "Relevé d'identité bancaire (RIB)"
68
69#. module: l10n_fr_rib
70#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
71msgid "bank_code"
72msgstr "bank_code"
73
74#. module: l10n_fr_rib
75#: code:addons/l10n_fr_rib/bank.py:109
76#, python-format
77msgid "\n"
78"The RIB key %s does not correspond to the other codes: %s %s %s."
79msgstr "\n"
80"La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
81
82#. module: l10n_fr_rib
83#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
84msgid "key"
85msgstr "key"
86
87#. module: l10n_fr_rib
88#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information
89msgid "French RIB Bank Details"
90msgstr "Relevés d'identité bancaire français (RIB)"
91
92#. module: l10n_fr_rib
93#: help:res.partner.bank,key:0
94msgid "The key is a number allowing to check the correctness of the other codes."
95msgstr "La clé est un nombre permettant de vérifier que les autres codes sont corrects."
96
97#. module: l10n_fr_rib
98#: field:res.partner.bank,key:0
99msgid "Key"
100msgstr "Clé"
101
102#. module: l10n_fr_rib
103#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
104msgid "%(bank_name)s: %(acc_number)s"
105msgstr "%(bank_name)s: %(acc_number)s"
106
107#. module: l10n_fr_rib
108#: model:ir.model,name:l10n_fr_rib.model_res_bank
109msgid "Bank"
110msgstr "Banque"
111
112#. module: l10n_fr_rib
113#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
114msgid "acc_number"
115msgstr "acc_number"
116
0117
=== added file 'l10n_fr_rib/i18n/l10n_fr_rib.pot'
--- l10n_fr_rib/i18n/l10n_fr_rib.pot 1970-01-01 00:00:00 +0000
+++ l10n_fr_rib/i18n/l10n_fr_rib.pot 2011-11-28 16:11:34 +0000
@@ -0,0 +1,112 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * l10n_fr_rib
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 6.1beta\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2011-11-21 12:36+0000\n"
10"PO-Revision-Date: 2011-11-21 12:36+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: l10n_fr_rib
19#: constraint:res.partner.bank:0
20msgid "\n"
21"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
22msgstr ""
23
24#. module: l10n_fr_rib
25#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
26msgid "Bank Accounts"
27msgstr ""
28
29#. module: l10n_fr_rib
30#: field:res.partner.bank,bank_code:0
31msgid "Bank Code"
32msgstr ""
33
34#. module: l10n_fr_rib
35#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
36msgid "bank_bic"
37msgstr ""
38
39#. module: l10n_fr_rib
40#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
41msgid "office"
42msgstr ""
43
44#. module: l10n_fr_rib
45#: field:res.bank,rib_code:0
46msgid "RIB Bank Code"
47msgstr ""
48
49#. module: l10n_fr_rib
50#: model:ir.module.module,description:l10n_fr_rib.module_meta_information
51msgid "\n"
52"This module installs the base for RIB bank accounts (French standard for bank accounts). \n"
53"To make it easier to enter RIB data, it will also allow to search for banks by code."
54msgstr ""
55
56#. module: l10n_fr_rib
57#: field:res.partner.bank,office:0
58msgid "Office Code"
59msgstr ""
60
61#. module: l10n_fr_rib
62#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
63msgid "RIB Bank Details"
64msgstr ""
65
66#. module: l10n_fr_rib
67#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
68msgid "bank_code"
69msgstr ""
70
71#. module: l10n_fr_rib
72#: code:addons/l10n_fr_rib/bank.py:109
73#, python-format
74msgid "\n"
75"The RIB key %s does not correspond to the other codes: %s %s %s."
76msgstr ""
77
78#. module: l10n_fr_rib
79#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
80msgid "key"
81msgstr ""
82
83#. module: l10n_fr_rib
84#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information
85msgid "French RIB Bank Details"
86msgstr ""
87
88#. module: l10n_fr_rib
89#: help:res.partner.bank,key:0
90msgid "The key is a number allowing to check the correctness of the other codes."
91msgstr ""
92
93#. module: l10n_fr_rib
94#: field:res.partner.bank,key:0
95msgid "Key"
96msgstr ""
97
98#. module: l10n_fr_rib
99#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
100msgid "%(bank_name)s: %(acc_number)s"
101msgstr ""
102
103#. module: l10n_fr_rib
104#: model:ir.model,name:l10n_fr_rib.model_res_bank
105msgid "Bank"
106msgstr ""
107
108#. module: l10n_fr_rib
109#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
110msgid "acc_number"
111msgstr ""
112

Subscribers

People subscribed via source and target branches

to all changes: