Merge lp:~akretion-team/openobject-addons/trunk-fr-display-rib-and-iban into lp:openobject-addons

Proposed by Alexis de Lattre
Status: Merged
Merged at revision: 6459
Proposed branch: lp:~akretion-team/openobject-addons/trunk-fr-display-rib-and-iban
Merge into: lp:openobject-addons
Diff against target: 557 lines (+196/-115)
7 files modified
base_iban/base_iban.py (+24/-15)
l10n_fr_rib/__openerp__.py (+1/-1)
l10n_fr_rib/bank.py (+18/-23)
l10n_fr_rib/bank_data.xml (+16/-5)
l10n_fr_rib/bank_view.xml (+50/-23)
l10n_fr_rib/i18n/fr.po (+45/-33)
l10n_fr_rib/i18n/l10n_fr_rib.pot (+42/-15)
To merge this branch: bzr merge lp:~akretion-team/openobject-addons/trunk-fr-display-rib-and-iban
Reviewer Review Type Date Requested Status
Raphael Collet (OpenERP) (community) Approve
Review via email: mp+90449@code.launchpad.net

Description of the change

The initiative of this merge proposal started on the forum :
http://www.openerp.com/forum/post99662.html#p99662 (in French, sorry)

We need to be able to define both the RIB (old French format) and the IBAN on the same res.partner.bank. Why ? For example, on the customer invoice report, we need to display both the RIB info (for "old school" French customers) and the IBAN/BIC info (for modern French customer and out-of-France customers) with the same "Bank account".

As I went through the code to develop what was needed, I made a number of fixes/enhancements :

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

- Constraint now declares all the fields that must trigger the check.

To post a comment you must log in.
Revision history for this message
Numérigraphe (numerigraphe) wrote :

Wouldn't it be possible to have just one RIB type, and make the IBAN fields read-write but not mandatory ?
Lionel Sausin.

Revision history for this message
Alexis de Lattre (alexis-via) wrote :

I just updated my code to have a single RIB type, as suggestion by Numérigraphe.

I also modified the code of the base_iban module to have IBAN validation in a dedicated function, that can be easily called by the localisation modules and in particular l10n_fr_rib. This change is fully backward compatible.

Revision history for this message
Raphael Collet (OpenERP) (rco-openerp) wrote :

Overall it looks fine.

Just a few things to fix before merging:
 - line 37 of diff below: please resolve the conflict (merge the trunk into your branch)
 - line 73: use '!=' instead of '<>' (the latter is obsolescent)
 - line 139: please use a better error message than 'Error message in raise'

Thanks,
Raphael

review: Needs Fixing
Revision history for this message
Alexis de Lattre (alexis-via) wrote :

@Raphael Collet
I took into account all your remarks and updated the branch.

Revision history for this message
Raphael Collet (OpenERP) (rco-openerp) wrote :

Looks good, now. Thanks!
Raphael

review: Approve
Revision history for this message
Alexis de Lattre (alexis-via) wrote :

@Raphael Collet
Thank you very much for your review and the merge. With these community merges, OpenERP is really heading in the right direction !

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'base_iban/base_iban.py'
2--- base_iban/base_iban.py 2012-01-30 11:15:21 +0000
3+++ base_iban/base_iban.py 2012-01-31 13:43:27 +0000
4@@ -94,27 +94,36 @@
5 vals['acc_number'] = _pretty_iban(vals['acc_number'])
6 return super(res_partner_bank, self).write(cr, uid, ids, vals, context)
7
8+ def is_iban_valid(self, cr, uid, iban, context=None):
9+ """Check if IBAN is valid or not
10+ @param iban: IBAN as string
11+ @return: True if IBAN is valid, False if IBAN is not valid
12+ """
13+ iban = _format_iban(iban).lower()
14+ if iban[:2] in _ref_iban and len(iban) != len(_format_iban(_ref_iban[iban[:2]])):
15+ return False
16+ #the four first digits have to be shifted to the end
17+ iban = iban[4:] + iban[:4]
18+ #letters have to be transformed into numbers (a = 10, b = 11, ...)
19+ iban2 = ""
20+ for char in iban:
21+ if char.isalpha():
22+ iban2 += str(ord(char)-87)
23+ else:
24+ iban2 += char
25+ #iban is correct if modulo 97 == 1
26+ if not int(iban2) % 97 == 1:
27+ return False
28+ return True
29+
30 def check_iban(self, cr, uid, ids, context=None):
31 '''
32 Check the IBAN number
33 '''
34 for bank_acc in self.browse(cr, uid, ids, context=context):
35- if bank_acc.state<>'iban':
36+ if bank_acc.state != 'iban':
37 continue
38- iban = _format_iban(bank_acc.acc_number).lower()
39- if iban[:2] in _ref_iban and len(iban) != len(_format_iban(_ref_iban[iban[:2]])):
40- return False
41- #the four first digits have to be shifted to the end
42- iban = iban[4:] + iban[:4]
43- #letters have to be transformed into numbers (a = 10, b = 11, ...)
44- iban2 = ""
45- for char in iban:
46- if char.isalpha():
47- iban2 += str(ord(char)-87)
48- else:
49- iban2 += char
50- #iban is correct if modulo 97 == 1
51- if not int(iban2) % 97 == 1:
52+ if not self.is_iban_valid(cr, uid, bank_acc.acc_number, context=context):
53 return False
54 return True
55
56
57=== modified file 'l10n_fr_rib/__openerp__.py'
58--- l10n_fr_rib/__openerp__.py 2012-01-30 10:18:37 +0000
59+++ l10n_fr_rib/__openerp__.py 2012-01-31 13:43:27 +0000
60@@ -38,7 +38,7 @@
61 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".
62 ''',
63 'author' : u'Numérigraphe SARL',
64- 'depends': ['base', 'account'],
65+ 'depends': ['account', 'base_iban'],
66 'init_xml': ['bank_data.xml', ],
67 'update_xml': ['bank_view.xml', ],
68 'installable': True,
69
70=== modified file 'l10n_fr_rib/bank.py'
71--- l10n_fr_rib/bank.py 2011-12-01 14:57:54 +0000
72+++ l10n_fr_rib/bank.py 2012-01-31 13:43:27 +0000
73@@ -31,18 +31,18 @@
74 """Check the RIB key"""
75 for bank_acc in self.browse(cr, uid, ids):
76 # Ignore the accounts of type other than rib
77- if bank_acc.state !='rib':
78+ if bank_acc.state != 'rib':
79 continue
80 # Fail if the needed values are empty of too short
81 if (not bank_acc.bank_code
82 or len(bank_acc.bank_code) != 5
83 or not bank_acc.office or len(bank_acc.office) != 5
84- or not bank_acc.acc_number or len(bank_acc.acc_number) != 11
85+ or not bank_acc.rib_acc_number or len(bank_acc.rib_acc_number) != 11
86 or not bank_acc.key or len(bank_acc.key) != 2):
87 return False
88 # Get the rib data (without the key)
89 rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office,
90- bank_acc.acc_number)
91+ bank_acc.rib_acc_number)
92 # Translate letters into numbers according to a specific table
93 # (notice how s -> 2)
94 table = dict((ord(a), b) for a, b in zip(
95@@ -51,7 +51,15 @@
96 # compute the key
97 key = 97 - (100 * int(rib)) % 97
98 if int(bank_acc.key) != key:
99- return False
100+ raise osv.except_osv(_('Error'),
101+ _("The RIB key %s does not correspond to the other "
102+ "codes: %s %s %s.") %
103+ (bank_acc.key, bank_acc.bank_code,
104+ bank_acc.office, bank_acc.rib_acc_number) )
105+ if bank_acc.acc_number:
106+ if not self.is_iban_valid(cr, uid, bank_acc.acc_number):
107+ raise osv.except_osv(_('Error'),
108+ _("The IBAN %s is not valid.") % bank_acc.acc_number)
109 return True
110
111 def onchange_bank_id(self, cr, uid, ids, bank_id, context=None):
112@@ -66,31 +74,18 @@
113 return result
114
115 _columns = {
116+ 'acc_number': fields.char('Account Number', size=64, required=False),
117+ 'rib_acc_number': fields.char('RIB account number', size=11, readonly=True,),
118 'bank_code': fields.char('Bank Code', size=64, readonly=True,),
119 'office': fields.char('Office Code', size=5, readonly=True,),
120 'key': fields.char('Key', size=2, readonly=True,
121 help="The key is a number allowing to check the "
122 "correctness of the other codes."),
123 }
124-
125- def _construct_constraint_msg(self, cr, uid, ids, context=None):
126- """Quote the data in the warning message"""
127- # Only process the first id
128- if type(ids) not in (int, long):
129- id = ids[0]
130- rib = self.browse(cr, uid, id, context=context)
131- if rib:
132- return (_("\nThe RIB key %s does not correspond to the other "
133- "codes: %s %s %s.") %
134- (rib.key,
135- rib.bank_code,
136- rib.office,
137- rib.acc_number) )
138-
139- _constraints = [(_check_key,
140- _construct_constraint_msg,
141- ["key"])]
142-
143+
144+ _constraints = [(_check_key, 'The RIB and/or IBAN is not valid',
145+ ['rib_acc_number', 'bank_code', 'office', 'key'])]
146+
147 res_partner_bank()
148
149 class res_bank(osv.osv):
150
151=== modified file 'l10n_fr_rib/bank_data.xml'
152--- l10n_fr_rib/bank_data.xml 2011-11-21 13:45:45 +0000
153+++ l10n_fr_rib/bank_data.xml 2012-01-31 13:43:27 +0000
154@@ -6,24 +6,27 @@
155 RIB bank details
156 -->
157 <record id="bank_rib" model="res.partner.bank.type">
158- <field name="name">RIB Bank Details</field>
159+ <field name="name">RIB and optional IBAN</field>
160 <field name="code">rib</field>
161+ <field name="format_layout">%(bank_name)s: %(bank_code)s %(office)s %(rib_acc_number)s %(key)s</field>
162 </record>
163-
164+
165 <record id="rib_bank_code_field" model="res.partner.bank.type.field">
166 <field name="name">bank_code</field>
167 <field name="bank_type_id" ref="bank_rib"/>
168 <field eval="True" name="required"/>
169 <field eval="False" name="readonly"/>
170+ <field name="size">5</field>
171 </record>
172 <record id="rib_office_field" model="res.partner.bank.type.field">
173 <field name="name">office</field>
174 <field name="bank_type_id" ref="bank_rib"/>
175 <field eval="True" name="required"/>
176 <field eval="False" name="readonly"/>
177+ <field name="size">5</field>
178 </record>
179- <record id="bank_acc_number_field" model="res.partner.bank.type.field">
180- <field name="name">acc_number</field>
181+ <record id="rib_rib_acc_number_field" model="res.partner.bank.type.field">
182+ <field name="name">rib_acc_number</field>
183 <field name="bank_type_id" ref="bank_rib"/>
184 <field eval="True" name="required"/>
185 <field eval="False" name="readonly"/>
186@@ -34,11 +37,19 @@
187 <field name="bank_type_id" ref="bank_rib"/>
188 <field eval="True" name="required"/>
189 <field eval="False" name="readonly"/>
190+ <field name="size">2</field>
191+ </record>
192+ <record id="rib_acc_number_field" model="res.partner.bank.type.field">
193+ <field name="name">acc_number</field>
194+ <field name="bank_type_id" ref="bank_rib"/>
195+ <field eval="False" name="required"/>
196+ <field eval="False" name="readonly"/>
197 </record>
198 <record id="rib_bic_field" model="res.partner.bank.type.field">
199 <field name="name">bank_bic</field>
200 <field name="bank_type_id" ref="bank_rib"/>
201- <field name="required" eval="0"/>
202+ <field name="required" eval="False"/>
203 </record>
204+
205 </data>
206 </openerp>
207
208=== modified file 'l10n_fr_rib/bank_view.xml'
209--- l10n_fr_rib/bank_view.xml 2011-11-21 13:45:45 +0000
210+++ l10n_fr_rib/bank_view.xml 2012-01-31 13:43:27 +0000
211@@ -5,29 +5,56 @@
212 <record id="view_partner_rib1_form" model="ir.ui.view">
213 <field name="name">res.partner.form.rib1.inherit</field>
214 <field name="model">res.partner</field>
215- <field name="inherit_id" ref="base.view_partner_form" />
216- <field name="type">form</field>
217- <field name="arch" type="xml">
218- <field name="acc_number" position="before">
219- <newline />
220- <field name="bank_code" />
221- <field name="office" />
222- <newline />
223- </field>
224- </field>
225- </record>
226- <record id="view_partner_rib2_form" model="ir.ui.view">
227- <field name="name">res.partner.form.rib2.inherit</field>
228- <field name="model">res.partner</field>
229- <field name="inherit_id" ref="base.view_partner_form" />
230- <field name="type">form</field>
231- <field name="arch" type="xml">
232- <field name="acc_number" position="after">
233- <field name="key" />
234- </field>
235- </field>
236- </record>
237-
238+ <field name="inherit_id" ref="account.view_partner_property_form" />
239+ <field name="type">form</field>
240+ <field name="arch" type="xml">
241+ <data>
242+ <xpath expr="/form/notebook/page[@string='Accounting']/field[@name='bank_ids']/form/field[@name='acc_number']" position="before">
243+ <newline />
244+ <field name="bank_code" />
245+ <field name="office" />
246+ <field name="rib_acc_number" />
247+ <field name="key" />
248+ <newline />
249+ </xpath>
250+ <xpath expr="/form/notebook/page[@string='Accounting']/field[@name='bank_ids']/tree/field[@name='acc_number']" position="after">
251+ <field name="rib_acc_number" />
252+ </xpath>
253+ </data>
254+ </field>
255+ </record>
256+
257+ <!-- add RIB fields to the form view of res.partner.bank -->
258+ <record id="view_partner_bank_rib_form" model="ir.ui.view">
259+ <field name="name">res.partner.bank.form.rib.inherit</field>
260+ <field name="model">res.partner.bank</field>
261+ <field name="inherit_id" ref="base.view_partner_bank_form" />
262+ <field name="type">form</field>
263+ <field name="arch" type="xml">
264+ <field name="acc_number" position="before">
265+ <field name="bank_code" />
266+ <field name="office" />
267+ <newline />
268+ <field name="rib_acc_number" />
269+ <field name="key" />
270+ <newline />
271+ </field>
272+ </field>
273+ </record>
274+
275+ <!-- add rib_acc_number to the tree view of res.partner.bank -->
276+ <record id="view_partner_bank_rib_tree" model="ir.ui.view">
277+ <field name="name">res.partner.bank.tree.rib.inherit</field>
278+ <field name="model">res.partner.bank</field>
279+ <field name="inherit_id" ref="base.view_partner_bank_tree" />
280+ <field name="type">tree</field>
281+ <field name="arch" type="xml">
282+ <field name="acc_number" position="after">
283+ <field name="rib_acc_number" />
284+ </field>
285+ </field>
286+ </record>
287+
288 <!-- add the bank code-->
289 <record id="view_res_bank_form" model="ir.ui.view">
290 <field name="name">res.bank.form.rib.inherit</field>
291
292=== modified file 'l10n_fr_rib/i18n/fr.po'
293--- l10n_fr_rib/i18n/fr.po 2011-11-21 13:45:45 +0000
294+++ l10n_fr_rib/i18n/fr.po 2012-01-31 13:43:27 +0000
295@@ -4,10 +4,10 @@
296 #
297 msgid ""
298 msgstr ""
299-"Project-Id-Version: OpenERP Server 6.1beta\n"
300+"Project-Id-Version: OpenERP Server 6.1rc1\n"
301 "Report-Msgid-Bugs-To: \n"
302-"POT-Creation-Date: 2011-11-21 12:37+0000\n"
303-"PO-Revision-Date: 2011-11-21 12:37+0000\n"
304+"POT-Creation-Date: 2012-01-27 18:47+0000\n"
305+"PO-Revision-Date: 2012-01-27 18:47+0000\n"
306 "Last-Translator: <>\n"
307 "Language-Team: \n"
308 "MIME-Version: 1.0\n"
309@@ -23,9 +23,14 @@
310 "Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
311
312 #. module: l10n_fr_rib
313-#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
314-msgid "Bank Accounts"
315-msgstr "Comptes bancaires"
316+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
317+msgid "RIB and optional IBAN"
318+msgstr "RIB et IBAN optionnel"
319+
320+#. module: l10n_fr_rib
321+#: field:res.partner.bank,rib_acc_number:0
322+msgid "RIB account number"
323+msgstr "Numéro de compte RIB"
324
325 #. module: l10n_fr_rib
326 #: field:res.partner.bank,bank_code:0
327@@ -33,9 +38,10 @@
328 msgstr "Code banque"
329
330 #. module: l10n_fr_rib
331-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
332-msgid "bank_bic"
333-msgstr "bank_bic"
334+#: code:addons/l10n_fr_rib/bank.py:55
335+#, python-format
336+msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
337+msgstr "La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
338
339 #. module: l10n_fr_rib
340 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
341@@ -48,13 +54,15 @@
342 msgstr "Code banque RIB"
343
344 #. module: l10n_fr_rib
345-#: model:ir.module.module,description:l10n_fr_rib.module_meta_information
346-msgid "\n"
347-"This module installs the base for RIB bank accounts (French standard for bank accounts). \n"
348-"To make it easier to enter RIB data, it will also allow to search for banks by code."
349-msgstr "\n"
350-"Ce module installe la base pour les comptes bancaires RIB (norme française pour les n° de compte). \n"
351-"Pour faciliter la saisie des RIBs, il permet aussi de chercher les banques par code."
352+#: code:addons/l10n_fr_rib/bank.py:62
353+#, python-format
354+msgid "The IBAN %s is not valid."
355+msgstr "L'IBAN %s n'est pas valide."
356+
357+#. module: l10n_fr_rib
358+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
359+msgid "Bank Accounts"
360+msgstr "Comptes bancaires"
361
362 #. module: l10n_fr_rib
363 #: field:res.partner.bank,office:0
364@@ -62,9 +70,9 @@
365 msgstr "Code agence"
366
367 #. module: l10n_fr_rib
368-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
369-msgid "RIB Bank Details"
370-msgstr "Relevé d'identité bancaire (RIB)"
371+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
372+msgid "rib_acc_number"
373+msgstr "rib_acc_number"
374
375 #. module: l10n_fr_rib
376 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
377@@ -72,34 +80,38 @@
378 msgstr "bank_code"
379
380 #. module: l10n_fr_rib
381-#: code:addons/l10n_fr_rib/bank.py:109
382-#, python-format
383-msgid "\n"
384-"The RIB key %s does not correspond to the other codes: %s %s %s."
385-msgstr "\n"
386-"La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
387-
388-#. module: l10n_fr_rib
389 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
390 msgid "key"
391 msgstr "key"
392
393 #. module: l10n_fr_rib
394-#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information
395-msgid "French RIB Bank Details"
396-msgstr "Relevés d'identité bancaire français (RIB)"
397-
398-#. module: l10n_fr_rib
399 #: help:res.partner.bank,key:0
400 msgid "The key is a number allowing to check the correctness of the other codes."
401 msgstr "La clé est un nombre permettant de vérifier que les autres codes sont corrects."
402
403 #. module: l10n_fr_rib
404+#: constraint:res.partner.bank:0
405+msgid "Error message in raise"
406+msgstr "Error message in raise"
407+
408+#. module: l10n_fr_rib
409 #: field:res.partner.bank,key:0
410 msgid "Key"
411 msgstr "Clé"
412
413 #. module: l10n_fr_rib
414+#: code:addons/l10n_fr_rib/bank.py:54
415+#: code:addons/l10n_fr_rib/bank.py:61
416+#, python-format
417+msgid "Error"
418+msgstr "Error"
419+
420+#. module: l10n_fr_rib
421+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
422+msgid "bank_bic"
423+msgstr "bank_bic"
424+
425+#. module: l10n_fr_rib
426 #: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
427 msgid "%(bank_name)s: %(acc_number)s"
428 msgstr "%(bank_name)s: %(acc_number)s"
429@@ -110,7 +122,7 @@
430 msgstr "Banque"
431
432 #. module: l10n_fr_rib
433-#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
434+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
435 msgid "acc_number"
436 msgstr "acc_number"
437
438
439=== modified file 'l10n_fr_rib/i18n/l10n_fr_rib.pot'
440--- l10n_fr_rib/i18n/l10n_fr_rib.pot 2011-12-22 18:55:39 +0000
441+++ l10n_fr_rib/i18n/l10n_fr_rib.pot 2012-01-31 13:43:27 +0000
442@@ -4,10 +4,10 @@
443 #
444 msgid ""
445 msgstr ""
446-"Project-Id-Version: OpenERP Server 6.1beta\n"
447+"Project-Id-Version: OpenERP Server 6.1rc1\n"
448 "Report-Msgid-Bugs-To: \n"
449-"POT-Creation-Date: 2011-12-22 18:45+0000\n"
450-"PO-Revision-Date: 2011-12-22 18:45+0000\n"
451+"POT-Creation-Date: 2012-01-27 18:47+0000\n"
452+"PO-Revision-Date: 2012-01-27 18:47+0000\n"
453 "Last-Translator: <>\n"
454 "Language-Team: \n"
455 "MIME-Version: 1.0\n"
456@@ -22,13 +22,24 @@
457 msgstr ""
458
459 #. module: l10n_fr_rib
460+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
461+msgid "RIB and optional IBAN"
462+msgstr ""
463+
464+#. module: l10n_fr_rib
465+#: field:res.partner.bank,rib_acc_number:0
466+msgid "RIB account number"
467+msgstr ""
468+
469+#. module: l10n_fr_rib
470 #: field:res.partner.bank,bank_code:0
471 msgid "Bank Code"
472 msgstr ""
473
474 #. module: l10n_fr_rib
475-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
476-msgid "bank_bic"
477+#: code:addons/l10n_fr_rib/bank.py:55
478+#, python-format
479+msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
480 msgstr ""
481
482 #. module: l10n_fr_rib
483@@ -42,6 +53,12 @@
484 msgstr ""
485
486 #. module: l10n_fr_rib
487+#: code:addons/l10n_fr_rib/bank.py:62
488+#, python-format
489+msgid "The IBAN %s is not valid."
490+msgstr ""
491+
492+#. module: l10n_fr_rib
493 #: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
494 msgid "Bank Accounts"
495 msgstr ""
496@@ -52,8 +69,8 @@
497 msgstr ""
498
499 #. module: l10n_fr_rib
500-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
501-msgid "RIB Bank Details"
502+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
503+msgid "rib_acc_number"
504 msgstr ""
505
506 #. module: l10n_fr_rib
507@@ -62,13 +79,6 @@
508 msgstr ""
509
510 #. module: l10n_fr_rib
511-#: code:addons/l10n_fr_rib/bank.py:83
512-#, python-format
513-msgid "\n"
514-"The RIB key %s does not correspond to the other codes: %s %s %s."
515-msgstr ""
516-
517-#. module: l10n_fr_rib
518 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
519 msgid "key"
520 msgstr ""
521@@ -79,11 +89,28 @@
522 msgstr ""
523
524 #. module: l10n_fr_rib
525+#: constraint:res.partner.bank:0
526+msgid "Error message in raise"
527+msgstr ""
528+
529+#. module: l10n_fr_rib
530 #: field:res.partner.bank,key:0
531 msgid "Key"
532 msgstr ""
533
534 #. module: l10n_fr_rib
535+#: code:addons/l10n_fr_rib/bank.py:54
536+#: code:addons/l10n_fr_rib/bank.py:61
537+#, python-format
538+msgid "Error"
539+msgstr ""
540+
541+#. module: l10n_fr_rib
542+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
543+msgid "bank_bic"
544+msgstr ""
545+
546+#. module: l10n_fr_rib
547 #: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
548 msgid "%(bank_name)s: %(acc_number)s"
549 msgstr ""
550@@ -94,7 +121,7 @@
551 msgstr ""
552
553 #. module: l10n_fr_rib
554-#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field
555+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
556 msgid "acc_number"
557 msgstr ""
558

Subscribers

People subscribed via source and target branches

to all changes: