mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
Improves the module l10n_fr_siret :
- the SIREN and BIC fields are only shown in edit mode[*] - SIRET is displayed as SIREN+"*****" if a SIREN with no NIC is entered - the SIRET field introduced by l10n_fr is replaced by a "related" field for consistency. [*] In v8 and in patched versions of v7, the SIRET is also hidden in read-only mode for better user experience
This commit is contained in:
committed by
Guewen Baconnier
commit
0b88cccac6
@@ -1,4 +1,4 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
@@ -20,6 +20,4 @@
|
||||
##############################################################################
|
||||
|
||||
import partner
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
import company
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
@@ -21,25 +21,32 @@
|
||||
|
||||
{
|
||||
'name': 'French company identity numbers SIRET/SIREN/NIC',
|
||||
'version': '1.0',
|
||||
'version': '1.1',
|
||||
"category": 'Accounting',
|
||||
'description': """
|
||||
This module lets users keep track of the companies' unique
|
||||
identification numbers from the official SIRENE registry in France:
|
||||
SIRET, SIREN and NIC. These numbers identify each company and their
|
||||
subsidiaries, and are often required for administrative tasks.
|
||||
'description': '''
|
||||
This module add the French company identity numbers.
|
||||
====================================================
|
||||
|
||||
At the top of the Partner form, users will be able to enter the SIREN
|
||||
This can help any company doing business with French companies
|
||||
by letting users track the partners' unique identification
|
||||
numbers from the official SIRENE registry in France: SIRET, SIREN and NIC.
|
||||
These numbers identify each company and their subsidiaries, and are
|
||||
often required for administrative tasks.
|
||||
|
||||
On the Partner form, users will be able to enter the SIREN
|
||||
and NIC numbers, and the SIRET number will be calculated
|
||||
automatically. The last digits of the SIREN and NIC are control keys:
|
||||
OpenERP will check their validity when partners are recorded.
|
||||
""",
|
||||
'author' : u'Numérigraphe SARL',
|
||||
'depends': ['account'],
|
||||
'data': ['partner_view.xml',
|
||||
],
|
||||
|
||||
ATTENTION! this module replaces the fields on the Company form with the new
|
||||
ones on the Partner form, but it will NOT copy the corresponding data: you
|
||||
will have to enter them again.
|
||||
''',
|
||||
'author': u'Numérigraphe SARL',
|
||||
'depends': ['account', 'l10n_fr'],
|
||||
'data': [
|
||||
'partner_view.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
44
l10n_fr_siret/company.py
Normal file
44
l10n_fr_siret/company.py
Normal file
@@ -0,0 +1,44 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2011 Numérigraphe SARL.
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp.osv import fields, orm
|
||||
|
||||
|
||||
class res_company(orm.Model):
|
||||
"""Replace the company's fields for SIRET/RC with the partner's"""
|
||||
_inherit = 'res.company'
|
||||
|
||||
def _get_partner_change(self, cr, uid, ids, context=None):
|
||||
return self.pool.get('res.partner').search(
|
||||
cr, uid, [('partner_id', 'in', ids)], context=context)
|
||||
|
||||
_columns = {
|
||||
'siret': fields.related(
|
||||
'partner_id', 'siret', type='char', store={
|
||||
'res.partner': (_get_partner_change, ['siren', 'nic'], 20),
|
||||
'res.company': (lambda self, cr, uid, ids, c={}:
|
||||
ids, ['partner_id'], 20), }),
|
||||
'company_registry': fields.related(
|
||||
'partner_id', 'company_registry', type='char', store={
|
||||
'res.partner': (_get_partner_change, ['company_registry'], 20),
|
||||
'res.company': (lambda self, cr, uid, ids, c={}:
|
||||
ids, ['partner_id'], 20), })
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
@@ -27,10 +27,13 @@ from openerp.osv import fields, orm
|
||||
def _check_luhn(string):
|
||||
"""Luhn test to check control keys
|
||||
|
||||
Credits: http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#Python
|
||||
Credits:
|
||||
http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#Python
|
||||
"""
|
||||
r = [int(ch) for ch in string][::-1]
|
||||
return (sum(r[0::2]) + sum(sum(divmod(d*2,10)) for d in r[1::2])) % 10 == 0
|
||||
return (sum(r[0::2]) + sum(sum(divmod(d * 2, 10))
|
||||
for d in r[1::2])) % 10 == 0
|
||||
|
||||
|
||||
class Partner(orm.Model):
|
||||
"""Add the French official company identity numbers SIREN, NIC and SIRET"""
|
||||
@@ -38,29 +41,26 @@ class Partner(orm.Model):
|
||||
|
||||
def _get_siret(self, cr, uid, ids, field_name, arg, context=None):
|
||||
"""Concatenate the SIREN and NIC to form the SIRET"""
|
||||
sirets = {}
|
||||
for partner in self.browse(cr, uid, ids, context=context):
|
||||
if partner.siren and partner.nic:
|
||||
sirets[partner.id] = '%s%s' % (partner.siren, partner.nic)
|
||||
else:
|
||||
sirets[partner.id] = ''
|
||||
return sirets
|
||||
return {partner.id: '%s%s' % (partner.siren, partner.nic or '*****')
|
||||
if partner.siren else ''
|
||||
for partner in self.browse(cr, uid, ids, context=context)}
|
||||
|
||||
def _check_siret(self, cr, uid, ids):
|
||||
"""Check the SIREN's and NIC's keys (last digits)"""
|
||||
for partner in self.browse(cr, uid, ids, context=None):
|
||||
if partner.nic:
|
||||
# Check the NIC type and length
|
||||
if not partner.nic.isdecimal() or len(partner.nic)!=5:
|
||||
if not partner.nic.isdecimal() or len(partner.nic) != 5:
|
||||
return False
|
||||
if partner.siren:
|
||||
# Check the SIREN type, length and key
|
||||
if (not partner.siren.isdecimal()
|
||||
or len(partner.siren)!=9
|
||||
or not _check_luhn(partner.siren) ):
|
||||
or len(partner.siren) != 9
|
||||
or not _check_luhn(partner.siren)):
|
||||
return False
|
||||
# Check the NIC key (you need both SIREN and NIC to check it)
|
||||
if partner.nic and not _check_luhn(partner.siren + partner.nic):
|
||||
if partner.nic and not _check_luhn(partner.siren
|
||||
+ partner.nic):
|
||||
return False
|
||||
return True
|
||||
|
||||
@@ -74,26 +74,24 @@ class Partner(orm.Model):
|
||||
"of this office in the company in France. It "
|
||||
"makes the last 5 digits of the SIRET "
|
||||
"number."),
|
||||
'siret': fields.function(_get_siret, type="char", string='SIRET',
|
||||
'siret': fields.function(
|
||||
_get_siret, type="char", string='SIRET',
|
||||
method=True, size=14,
|
||||
store = {
|
||||
store={
|
||||
'res.partner': [lambda self, cr, uid, ids, context=None: ids,
|
||||
['siren', 'nic'],
|
||||
10]},
|
||||
['siren', 'nic'], 10]},
|
||||
help="The SIRET number is the official identity number of this "
|
||||
"company's office in France. It is composed of the 9 digits "
|
||||
"of the SIREN number and the 5 digits of the NIC number, ie. "
|
||||
"14 digits."),
|
||||
'company_registry': fields.char('Company Registry', size=64,
|
||||
help="The name of official registry where this "
|
||||
"company was declared."),
|
||||
'company_registry': fields.char(
|
||||
'Company Registry', size=64,
|
||||
help="The name of official registry where this "
|
||||
"company was declared."),
|
||||
}
|
||||
|
||||
_constraints = [
|
||||
(_check_siret,
|
||||
"The SIREN or NIC number is incorrect.",
|
||||
["siren", "nic"]),
|
||||
(_check_siret,
|
||||
"The SIREN or NIC number is incorrect.",
|
||||
["siren", "nic"]),
|
||||
]
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -1,25 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- Add the SIREN, NIC and SIRET numbers -->
|
||||
<record model="ir.ui.view" id="view_partner_add">
|
||||
<field name="name">res.partner.form.siret</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="account.view_partner_property_form" />
|
||||
<field name="arch" type="xml">
|
||||
<page string="Accounting" position="inside">
|
||||
<group>
|
||||
<group>
|
||||
<field name="siren" />
|
||||
<field name="nic" />
|
||||
<field name="siret" />
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_registry" />
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
<data>
|
||||
<!-- Add the SIREN and RC -->
|
||||
<record model="ir.ui.view" id="view_partner_add">
|
||||
<field name="name">res.partner.form.siret</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="account.view_partner_property_form" />
|
||||
<field name="arch" type="xml">
|
||||
<page string="Accounting" position="inside">
|
||||
<group>
|
||||
<group col="4">
|
||||
<!-- oe_read_only hides the field in read mode
|
||||
in v8+. v7.0 shows the field - no big deal.
|
||||
Those who care can patch the web client:
|
||||
lp:~numerigraphe-team/ocb-web/7.0-hide-oe_read_only
|
||||
-->
|
||||
<field name="siret" colspan="4" class="oe_read_only" />
|
||||
<field name="siren" class="oe_edit_only" string="SIREN/NIC" colspan="3"/>
|
||||
<field name="nic" class="oe_edit_only" nolabel="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_registry" />
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
Reference in New Issue
Block a user