summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorqdp-odoo <qdp@odoo.com>2017-07-12 17:37:58 +0200
committerqdp-odoo <qdp@odoo.com>2017-07-12 17:48:43 +0200
commit99385d660d9881d7c23d2dd143f6219dcca19858 (patch)
treef2187d5cc673c6a1fcdd8d1e14e1d7a0b196fe21 /addons
parentdcf71c0148c51c20b5d5d2b594f590a1d1815b3c (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.xml11
-rw-r--r--addons/base_vat_autocomplete/__init__.py4
-rw-r--r--addons/base_vat_autocomplete/__manifest__.py20
-rw-r--r--addons/base_vat_autocomplete/models/__init__.py4
-rw-r--r--addons/base_vat_autocomplete/models/res_partner.py68
-rw-r--r--addons/base_vat_autocomplete/views/res_partner_views.xml28
-rw-r--r--addons/l10n_be/__manifest__.py1
-rw-r--r--addons/l10n_de/__manifest__.py1
-rw-r--r--addons/l10n_es/__manifest__.py1
-rw-r--r--addons/l10n_fr/__manifest__.py1
-rw-r--r--addons/l10n_gr/__manifest__.py1
-rw-r--r--addons/l10n_it/__manifest__.py1
-rw-r--r--addons/l10n_lu/__manifest__.py1
-rw-r--r--addons/l10n_nl/__manifest__.py1
-rw-r--r--addons/l10n_no/__manifest__.py1
-rw-r--r--addons/l10n_pl/__manifest__.py1
-rw-r--r--addons/l10n_pt/__manifest__.py1
-rw-r--r--addons/l10n_ro/__manifest__.py1
-rw-r--r--addons/l10n_uk/__manifest__.py1
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',