diff options
| author | qdp-odoo <qdp@odoo.com> | 2017-07-12 17:37:58 +0200 |
|---|---|---|
| committer | qdp-odoo <qdp@odoo.com> | 2017-07-12 17:48:43 +0200 |
| commit | 99385d660d9881d7c23d2dd143f6219dcca19858 (patch) | |
| tree | f2187d5cc673c6a1fcdd8d1e14e1d7a0b196fe21 /addons | |
| parent | dcf71c0148c51c20b5d5d2b594f590a1d1815b3c (diff) | |
[ADD] base_vat_autocomplete: module to fill partner's data from the VIES when encoding its VAT number
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/base_vat/views/res_partner_views.xml | 11 | ||||
| -rw-r--r-- | addons/base_vat_autocomplete/__init__.py | 4 | ||||
| -rw-r--r-- | addons/base_vat_autocomplete/__manifest__.py | 20 | ||||
| -rw-r--r-- | addons/base_vat_autocomplete/models/__init__.py | 4 | ||||
| -rw-r--r-- | addons/base_vat_autocomplete/models/res_partner.py | 68 | ||||
| -rw-r--r-- | addons/base_vat_autocomplete/views/res_partner_views.xml | 28 | ||||
| -rw-r--r-- | addons/l10n_be/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_de/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_es/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_fr/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_gr/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_it/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_lu/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_nl/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_no/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_pl/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_pt/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_ro/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/l10n_uk/__manifest__.py | 1 |
19 files changed, 148 insertions, 0 deletions
diff --git a/addons/base_vat/views/res_partner_views.xml b/addons/base_vat/views/res_partner_views.xml index 5e671527597..69e1603d224 100644 --- a/addons/base_vat/views/res_partner_views.xml +++ b/addons/base_vat/views/res_partner_views.xml @@ -10,4 +10,15 @@ </xpath> </field> </record> + + <record id="view_partner_short_form" model="ir.ui.view"> + <field name="name">res.partner.short.vat.inherit</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_short_form"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='vat']" position="attributes"> + <attribute name="string">VAT</attribute> + </xpath> + </field> + </record> </odoo> diff --git a/addons/base_vat_autocomplete/__init__.py b/addons/base_vat_autocomplete/__init__.py new file mode 100644 index 00000000000..dc5e6b693d1 --- /dev/null +++ b/addons/base_vat_autocomplete/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/addons/base_vat_autocomplete/__manifest__.py b/addons/base_vat_autocomplete/__manifest__.py new file mode 100644 index 00000000000..fc2205e07e5 --- /dev/null +++ b/addons/base_vat_autocomplete/__manifest__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'VAT Number Autocomplete', + 'version': '1.0', + 'category': 'Accounting', + 'description': """ +Auto-Complete Addresses based on VAT numbers +============================================ + + This module requires the python library stdnum to work. + """, + 'depends': ['base_vat'], + 'website': 'https://www.odoo.com/page/accounting', + 'data': [ + 'views/res_partner_views.xml', + ], + 'auto_install': True +} diff --git a/addons/base_vat_autocomplete/models/__init__.py b/addons/base_vat_autocomplete/models/__init__.py new file mode 100644 index 00000000000..9ec15f238e2 --- /dev/null +++ b/addons/base_vat_autocomplete/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import res_partner diff --git a/addons/base_vat_autocomplete/models/res_partner.py b/addons/base_vat_autocomplete/models/res_partner.py new file mode 100644 index 00000000000..3b25f99a8f1 --- /dev/null +++ b/addons/base_vat_autocomplete/models/res_partner.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import logging +import re + +from odoo import api, models + +_logger = logging.getLogger(__name__) + +try: + import stdnum.eu.vat as stdnum_vat +except ImportError: + _logger.warning('Python `stdnum` library not found, unable to call VIES service to detect address based on VAT number.') + stdnum_vat = None + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.onchange('vat') + def vies_vat_change(self): + def _check_city(lines, country='BE'): + if country == 'GB': + ukzip = '[A-Z]{1,2}[0-9][0-9A-Z]?\s?[0-9][A-Z]{2}' + if re.match(ukzip, lines[-1]): + cp = lines.pop() + city = lines.pop() + return (cp, city) + else: + result = re.match('((?:L-|AT-)?[0-9\-]+) (.+)', lines[-1]) + if result: + lines.pop() + return (result.group(1), result.group(2)) + return False + + if stdnum_vat is None: + return {} + + for partner in self: + if not partner.vat: + return {} + if len(partner.vat) > 5 and partner.vat[:2].lower() in stdnum_vat.country_codes: + result = stdnum_vat.check_vies(partner.vat) + if not result['valid']: + return {} + + if (not partner.name) and (result['name'] != '---'): + partner.name = result['name'] + + #parse the address from VIES and fill the partner's data + if result['address'] == '---': return {} + + lines = [x for x in result['address'].split("\n") if x] + if len(lines) == 1: + lines = [x.strip() for x in lines[0].split(',') if x] + if len(lines) == 1: + lines = [x.strip() for x in lines[0].split(' ') if x] + partner.street = lines.pop(0) + if len(lines) > 0: + res = _check_city(lines, result['countryCode']) + if res: + partner.zip = res[0] + partner.city = res[1] + if len(lines) > 0: + partner.street2 = lines.pop(0) + + country = self.env['res.country'].search([('code', '=', result['countryCode'])], limit=1) + partner.country_id = country and country.id or False diff --git a/addons/base_vat_autocomplete/views/res_partner_views.xml b/addons/base_vat_autocomplete/views/res_partner_views.xml new file mode 100644 index 00000000000..1c56b7f93a9 --- /dev/null +++ b/addons/base_vat_autocomplete/views/res_partner_views.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="view_partner_form" model="ir.ui.view"> + <field name="name">res.partner.vat.inherit</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='vat']" position="replace"> + </xpath> + <xpath expr="//label[@for='street']" position="before"> + <field name="vat" string="VAT" placeholder="e.g. BE0477472701"/> + </xpath> + </field> + </record> + + <record id="view_partner_short_form" model="ir.ui.view"> + <field name="name">res.partner.short.vat.inherit</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_short_form"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='vat']" position="replace"> + </xpath> + <xpath expr="//label[@for='street']" position="before"> + <field name="vat" string="VAT" placeholder="e.g. BE0477472701"/> + </xpath> + </field> + </record> +</odoo> diff --git a/addons/l10n_be/__manifest__.py b/addons/l10n_be/__manifest__.py index e56382fdcf6..8608376d711 100644 --- a/addons/l10n_be/__manifest__.py +++ b/addons/l10n_be/__manifest__.py @@ -38,6 +38,7 @@ Wizards provided by this module: 'depends': [ 'account', 'base_iban', + 'base_vat', 'l10n_multilang', ], 'data': [ diff --git a/addons/l10n_de/__manifest__.py b/addons/l10n_de/__manifest__.py index 7be00c4af2b..b8f7cc440f8 100644 --- a/addons/l10n_de/__manifest__.py +++ b/addons/l10n_de/__manifest__.py @@ -15,6 +15,7 @@ German accounting chart and localization. 'depends': [ 'account', 'base_iban', + 'base_vat', ], 'data': [ 'data/account_account_types_data.xml', diff --git a/addons/l10n_es/__manifest__.py b/addons/l10n_es/__manifest__.py index 0bb0529445d..f966c53d353 100644 --- a/addons/l10n_es/__manifest__.py +++ b/addons/l10n_es/__manifest__.py @@ -29,6 +29,7 @@ Spanish charts of accounts (PGCE 2008). "depends" : [ "account", "base_iban", + "base_vat", ], "data" : [ 'data/account_account_type_data.xml', diff --git a/addons/l10n_fr/__manifest__.py b/addons/l10n_fr/__manifest__.py index c0a2c06dc63..51a8ae24836 100644 --- a/addons/l10n_fr/__manifest__.py +++ b/addons/l10n_fr/__manifest__.py @@ -32,6 +32,7 @@ configuration of their taxes and fiscal positions manually. 'depends': [ 'account', 'base_iban', + 'base_vat', ], 'data': [ 'data/l10n_fr_chart_data.xml', diff --git a/addons/l10n_gr/__manifest__.py b/addons/l10n_gr/__manifest__.py index 59f7c919178..e590fe92afe 100644 --- a/addons/l10n_gr/__manifest__.py +++ b/addons/l10n_gr/__manifest__.py @@ -17,6 +17,7 @@ Greek accounting chart and localization. 'depends': [ 'account', 'base_iban', + 'base_vat', ], 'data': [ 'data/account_type_data.xml', 'data/l10n_gr_chart_data.xml', diff --git a/addons/l10n_it/__manifest__.py b/addons/l10n_it/__manifest__.py index 7b668309c42..e335eda6f05 100644 --- a/addons/l10n_it/__manifest__.py +++ b/addons/l10n_it/__manifest__.py @@ -7,6 +7,7 @@ 'depends': [ 'account', 'base_iban', + 'base_vat', ], 'author': 'OpenERP Italian Community', 'description': """ diff --git a/addons/l10n_lu/__manifest__.py b/addons/l10n_lu/__manifest__.py index dc6fd4b8d4d..acaccc40811 100644 --- a/addons/l10n_lu/__manifest__.py +++ b/addons/l10n_lu/__manifest__.py @@ -27,6 +27,7 @@ Notes: 'depends': [ 'account', 'base_iban', + 'base_vat', ], 'data': [ # basic accounting data diff --git a/addons/l10n_nl/__manifest__.py b/addons/l10n_nl/__manifest__.py index d74a6fe23b9..88ddcd6b91c 100644 --- a/addons/l10n_nl/__manifest__.py +++ b/addons/l10n_nl/__manifest__.py @@ -12,6 +12,7 @@ 'depends': [ 'account', 'base_iban', + 'base_vat', ], 'data': [ 'data/account_account_tag.xml', diff --git a/addons/l10n_no/__manifest__.py b/addons/l10n_no/__manifest__.py index 8f27be7697c..61b1d3bd259 100644 --- a/addons/l10n_no/__manifest__.py +++ b/addons/l10n_no/__manifest__.py @@ -13,6 +13,7 @@ Updated for Odoo 9 by Bringsvor Consulting AS <www.bringsvor.com> "depends" : [ "account", "base_iban", + "base_vat", ], "data": ['data/l10n_no_chart_data.xml', 'data/account_tax_data.xml', diff --git a/addons/l10n_pl/__manifest__.py b/addons/l10n_pl/__manifest__.py index 544b988cc6e..f01647e2394 100644 --- a/addons/l10n_pl/__manifest__.py +++ b/addons/l10n_pl/__manifest__.py @@ -23,6 +23,7 @@ Wewnętrzny numer wersji OpenGLOBE 1.02 'depends' : [ 'account', 'base_iban', + 'base_vat', ], 'data': [ 'data/l10n_pl_chart_data.xml', diff --git a/addons/l10n_pt/__manifest__.py b/addons/l10n_pt/__manifest__.py index 1aab8d6535c..8e3a4412e08 100644 --- a/addons/l10n_pt/__manifest__.py +++ b/addons/l10n_pt/__manifest__.py @@ -13,6 +13,7 @@ 'description': 'Plano de contas SNC para Portugal', 'depends': ['base', 'account', + 'base_vat', ], 'data': [ 'data/l10n_pt_chart_data.xml', diff --git a/addons/l10n_ro/__manifest__.py b/addons/l10n_ro/__manifest__.py index a346b3006c3..a907e5f3a59 100644 --- a/addons/l10n_ro/__manifest__.py +++ b/addons/l10n_ro/__manifest__.py @@ -14,6 +14,7 @@ 'category': 'Localization', "depends" : [ 'account', + 'base_vat', ], "description": """ This is the module to manage the Accounting Chart, VAT structure, Fiscal Position and Tax Mapping. diff --git a/addons/l10n_uk/__manifest__.py b/addons/l10n_uk/__manifest__.py index 75383c13608..907c856d0cd 100644 --- a/addons/l10n_uk/__manifest__.py +++ b/addons/l10n_uk/__manifest__.py @@ -19,6 +19,7 @@ This is the latest UK Odoo localisation necessary to run Odoo accounting for UK 'depends': [ 'account', 'base_iban', + 'base_vat', ], 'data': [ 'data/l10n_uk_chart_data.xml', |
