You have been requested to review the proposed merge of lp:~numerigraphe/openobject-addons/trunk-rib into lp:openobject-addons.
For more details, see: https://code.launchpad.net/~numerigraphe/openobject-addons/trunk-rib/+merge/82886 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. -- https://code.launchpad.net/~numerigraphe/openobject-addons/trunk-rib/+merge/82886 Your team OpenERP Accounting Experts is requested to review the proposed merge of lp:~numerigraphe/openobject-addons/trunk-rib into lp:openobject-addons.
=== 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-21 14:25:34 +0000 @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import bank + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + === 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-21 14:25:34 +0000 @@ -0,0 +1,37 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + 'name': 'French RIB Bank Details', + 'version': '1.0', + 'category': 'Hidden', + 'description': ''' +This module installs the base for RIB bank accounts (French standard for bank accounts). +To make it easier to enter RIB data, it will also allow to search for banks by code.''', + 'author' : u'Numérigraphe SARL', + 'depends': ['base', 'account'], + 'init_xml': ['bank_data.xml', ], + 'update_xml': ['bank_view.xml', ], + 'installable': True, + 'active': False, +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: === 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-21 14:25:34 +0000 @@ -0,0 +1,148 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import string +import unicodedata + +import netsvc +from osv import fields, osv +from tools.translate import _ + +class res_partner_bank(osv.osv): + """Add fields and behavior for French RIB""" + _inherit = "res.partner.bank" + + def _check_key(self, cr, uid, ids): + print """Check the RIB key""" + for bank_acc in self.browse(cr, uid, ids): + # Ignore the accounts of type other than rib + if bank_acc.state !='rib': + continue + # Fail if the needed values are empty of too short + if (not bank_acc.bank_code + or len(bank_acc.bank_code) != 5 + or not bank_acc.office or len(bank_acc.office) != 5 + or not bank_acc.acc_number or len(bank_acc.acc_number) != 11 + or not bank_acc.key or len(bank_acc.key) != 2): + return False + + # Get the rib data (without the key) + rib = "%s%s%s" % (bank_acc.bank_code, bank_acc.office, + bank_acc.acc_number) + print rib + # Translate letters into numbers according to a specific table + # (notice how s -> 2) + # Note: maketrans and translate work best with latin1 - that + # should not be a problem for RIB data + # XXX use dict((ord(a), b) for a, b in zip(intab, outtab)) + # and translate() + rib = rib.lower().encode('latin-1').translate( + string.maketrans(u'abcdefghijklmnopqrstuvwxyz', + u'12345678912345678923456789')) + print rib + # compute the key + key = 97 - (100 * int(rib)) % 97 + print int(bank_acc.key), key + if int(bank_acc.key) != key: + return False + return True + + def search(self, cr, uid, args, offset=0, limit=None, order=None, + context=None, count=False): + """Search on type == rib""" + res = super(res_partner_bank, self).search(cr, uid, args, offset, + limit=limit, order=order, context=context, count=count) + if filter(lambda x:x[0] == 'acc_number' , args): + #get the value of the search + rib_value = filter(lambda x:x[0] == 'acc_number' , args)[0][2] + #get the other arguments of the search + args1 = filter(lambda x:x[0] != 'acc_number' , args) + #add the new criterion + args1 += [('rib', 'ilike', rib_value)] + #append the results to the older search + res += super(res_partner_bank, self).search(cr, uid, args1, offset, + limit, order, context=context, count=count) + return res + + def onchange_bank_id(self, cr, uid, ids, bank_id, context=None): + """Change the bank code""" + result = super(res_partner_bank, self).onchange_bank_id(cr, uid, ids, bank_id, + context=context) + if bank_id: + bank = self.pool.get('res.bank').browse(cr, uid, bank_id, + context=context) + result['bank_code'] = bank.code + return {'value': result} + + _columns = { + 'bank_code': fields.char('Bank Code', size=64, readonly=True,), + 'office': fields.char('Office Code', size=5, readonly=True,), + 'key': fields.char('Key', size=2, readonly=True, + help="The key is a number allowing to check the " + "correctness of the other codes."), + } + + def _construct_constraint_msg(self, cr, uid, ids, context=None): + """Quote the data in the warning message""" + if self._check_key(cr, uid, ids): + return + # Only process the first id + if type(ids) not in (int, long): + id = ids[0] + rib = self.browse(cr, uid, id, context=context) + if rib: + return (_("\nThe RIB key %s does not correspond to the other " + "codes: %s %s %s.") % + (rib.key, + rib.bank_code, + rib.office, + rib.acc_number) ) + + _constraints = [(_check_key, + _construct_constraint_msg, + ["key"])] + +res_partner_bank() + +class res_bank(osv.osv): + """Add the bank code to make it easier to enter RIB data""" + _inherit = 'res.bank' + + def name_search(self, cr, user, name, args=None, operator='ilike', + context=None, limit=80): + """Search by bank code""" + if args is None: + args = [] + ids = [] + if name: + ids = self.search(cr, user, [('name', operator, name)] + args, + limit=limit, context=context) + if not ids: + ids = self.search(cr, user, [('code', operator, name)] + args, + limit=limit, context=context) + return self.name_get(cr, user, ids, context) + + _columns = { + 'rib_code': fields.char('RIB Bank Code', size=64), + } +res_bank() +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + === 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-21 14:25:34 +0000 @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <!-- + RIB bank details + --> + <record id="bank_rib" model="res.partner.bank.type"> + <field name="name">RIB Bank Details</field> + <field name="code">rib</field> + </record> + + <record id="rib_bank_code_field" model="res.partner.bank.type.field"> + <field name="name">bank_code</field> + <field name="bank_type_id" ref="bank_rib"/> + <field eval="True" name="required"/> + <field eval="False" name="readonly"/> + </record> + <record id="rib_office_field" model="res.partner.bank.type.field"> + <field name="name">office</field> + <field name="bank_type_id" ref="bank_rib"/> + <field eval="True" name="required"/> + <field eval="False" name="readonly"/> + </record> + <record id="bank_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="True" name="required"/> + <field eval="False" name="readonly"/> + <field name="size">11</field> + </record> + <record id="rib_key_field" model="res.partner.bank.type.field"> + <field name="name">key</field> + <field name="bank_type_id" ref="bank_rib"/> + <field eval="True" name="required"/> + <field eval="False" name="readonly"/> + </record> + <record id="rib_bic_field" model="res.partner.bank.type.field"> + <field name="name">bank_bic</field> + <field name="bank_type_id" ref="bank_rib"/> + <field name="required" eval="0"/> + </record> + </data> +</openerp> === 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-21 14:25:34 +0000 @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- add the fields for French RIB to the partner form (subform)--> + <record id="view_partner_rib1_form" model="ir.ui.view"> + <field name="name">res.partner.form.rib1.inherit</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form" /> + <field name="type">form</field> + <field name="arch" type="xml"> + <field name="acc_number" position="before"> + <newline /> + <field name="bank_code" /> + <field name="office" /> + <newline /> + </field> + </field> + </record> + <record id="view_partner_rib2_form" model="ir.ui.view"> + <field name="name">res.partner.form.rib2.inherit</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form" /> + <field name="type">form</field> + <field name="arch" type="xml"> + <field name="acc_number" position="after"> + <field name="key" /> + </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> === 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-21 14:25:34 +0000 @@ -0,0 +1,116 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_fr_rib +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-21 12:37+0000\n" +"PO-Revision-Date: 2011-11-21 12:37+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_fr_rib +#: constraint:res.partner.bank:0 +msgid "\n" +"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments" +msgstr "\n" +"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments" + +#. module: l10n_fr_rib +#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank +msgid "Bank Accounts" +msgstr "Comptes bancaires" + +#. module: l10n_fr_rib +#: field:res.partner.bank,bank_code:0 +msgid "Bank Code" +msgstr "Code banque" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field +msgid "bank_bic" +msgstr "bank_bic" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field +msgid "office" +msgstr "Agence" + +#. module: l10n_fr_rib +#: field:res.bank,rib_code:0 +msgid "RIB Bank Code" +msgstr "Code banque RIB" + +#. module: l10n_fr_rib +#: model:ir.module.module,description:l10n_fr_rib.module_meta_information +msgid "\n" +"This module installs the base for RIB bank accounts (French standard for bank accounts). \n" +"To make it easier to enter RIB data, it will also allow to search for banks by code." +msgstr "\n" +"Ce module installe la base pour les comptes bancaires RIB (norme française pour les n° de compte). \n" +"Pour faciliter la saisie des RIBs, il permet aussi de chercher les banques par code." + +#. module: l10n_fr_rib +#: field:res.partner.bank,office:0 +msgid "Office Code" +msgstr "Code agence" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib +msgid "RIB Bank Details" +msgstr "Relevé d'identité bancaire (RIB)" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field +msgid "bank_code" +msgstr "bank_code" + +#. module: l10n_fr_rib +#: code:addons/l10n_fr_rib/bank.py:109 +#, python-format +msgid "\n" +"The RIB key %s does not correspond to the other codes: %s %s %s." +msgstr "\n" +"La clé RIB %s ne correspond pas aux autres codes : %s %s %s." + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field +msgid "key" +msgstr "key" + +#. module: l10n_fr_rib +#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information +msgid "French RIB Bank Details" +msgstr "Relevés d'identité bancaire français (RIB)" + +#. module: l10n_fr_rib +#: help:res.partner.bank,key:0 +msgid "The key is a number allowing to check the correctness of the other codes." +msgstr "La clé est un nombre permettant de vérifier que les autres codes sont corrects." + +#. module: l10n_fr_rib +#: field:res.partner.bank,key:0 +msgid "Key" +msgstr "Clé" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib +msgid "%(bank_name)s: %(acc_number)s" +msgstr "%(bank_name)s: %(acc_number)s" + +#. module: l10n_fr_rib +#: model:ir.model,name:l10n_fr_rib.model_res_bank +msgid "Bank" +msgstr "Banque" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field +msgid "acc_number" +msgstr "acc_number" + === 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-21 14:25:34 +0000 @@ -0,0 +1,112 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_fr_rib +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-21 12:36+0000\n" +"PO-Revision-Date: 2011-11-21 12:36+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_fr_rib +#: constraint:res.partner.bank:0 +msgid "\n" +"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments" +msgstr "" + +#. module: l10n_fr_rib +#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank +msgid "Bank Accounts" +msgstr "" + +#. module: l10n_fr_rib +#: field:res.partner.bank,bank_code:0 +msgid "Bank Code" +msgstr "" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field +msgid "bank_bic" +msgstr "" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field +msgid "office" +msgstr "" + +#. module: l10n_fr_rib +#: field:res.bank,rib_code:0 +msgid "RIB Bank Code" +msgstr "" + +#. module: l10n_fr_rib +#: model:ir.module.module,description:l10n_fr_rib.module_meta_information +msgid "\n" +"This module installs the base for RIB bank accounts (French standard for bank accounts). \n" +"To make it easier to enter RIB data, it will also allow to search for banks by code." +msgstr "" + +#. module: l10n_fr_rib +#: field:res.partner.bank,office:0 +msgid "Office Code" +msgstr "" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib +msgid "RIB Bank Details" +msgstr "" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field +msgid "bank_code" +msgstr "" + +#. module: l10n_fr_rib +#: code:addons/l10n_fr_rib/bank.py:109 +#, python-format +msgid "\n" +"The RIB key %s does not correspond to the other codes: %s %s %s." +msgstr "" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field +msgid "key" +msgstr "" + +#. module: l10n_fr_rib +#: model:ir.module.module,shortdesc:l10n_fr_rib.module_meta_information +msgid "French RIB Bank Details" +msgstr "" + +#. module: l10n_fr_rib +#: help:res.partner.bank,key:0 +msgid "The key is a number allowing to check the correctness of the other codes." +msgstr "" + +#. module: l10n_fr_rib +#: field:res.partner.bank,key:0 +msgid "Key" +msgstr "" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib +msgid "%(bank_name)s: %(acc_number)s" +msgstr "" + +#. module: l10n_fr_rib +#: model:ir.model,name:l10n_fr_rib.model_res_bank +msgid "Bank" +msgstr "" + +#. module: l10n_fr_rib +#: model:res.partner.bank.type.field,name:l10n_fr_rib.bank_acc_number_field +msgid "acc_number" +msgstr "" +
_______________________________________________ Mailing list: https://launchpad.net/~openerp-expert-accounting Post to : [email protected] Unsubscribe : https://launchpad.net/~openerp-expert-accounting More help : https://help.launchpad.net/ListHelp

