Merge pull request #507 from Tecnativa/10.0-mig-base_vat_optional_vies

[MIG] base_vat_optional_vies: Migration to 10.0
This commit is contained in:
Pedro M. Baeza
2017-08-08 15:52:04 +02:00
committed by GitHub
11 changed files with 237 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
===================================
Optional validation of VAT via VIES
===================================
This module extends base_vat module features allowing to know if VIES
validation was passed or not.
Then you can use "VIES validation passed" field in order to show VAT ID with
or without country preffix in invoices, for instance.
*NOTE*: Although VIES validation is set in your company, this validation
will not block VAT ID write (main difference to Odoo standard behavior) if this
VAT ID is valid in its country.
Configuration
=============
In order to activate VIES validation, you must set this option in your company:
Settings > Companies > Your Company > VIES VAT Check
Usage
=====
When VIES VAT Check is activated:
* Odoo will try to validate VAT against VIES online service
* If passed, then "VIES validation passed" field will be True
* If not passed, then try to validate using country validation method
* If validated, then "VIES validation passed" field will be False
* If not validated, then a ValidationError will be shown to user
When VIES VAT Check is not activated:
* "VIES validation passed" field will be always False
You must prefix VAT with country code (ISO 3166-1 alpha-2) and if you want to
bypass country validation you can use "EU" code
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/92/10.0
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/account-financial-tools/issues>`_. In case of trouble,
please check there if your issue has already been reported. If you spotted it
first, help us smash it by providing detailed and welcomed feedback.
Credits
=======
Contributors
------------
* Rafael Blasco <rafael.blasco@tecnativa.com>
* Antonio Espinosa <antonio.espinosa@tecnativa.com>
* Sergio Teruel <sergio.teruel@tecnativa.com>
* David Vidal <david.vidal@tecnativa.com>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.

View File

@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Tecnativa - Antonio Espinosa
# Copyright 2016 Tecnativa - Sergio Teruel
# Copyright 2017 Tecnativa - David Vidal
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': "Optional validation of VAT via VIES",
'category': 'Accounting',
'version': '10.0.1.0.0',
'depends': [
'base_vat',
],
'external_dependencies': {
'python': ['vatnumber'],
},
'data': [
'views/res_partner_view.xml',
],
'author': 'Tecnativa,'
'Odoo Community Association (OCA)',
'website': 'https://www.tecnativa.com',
'license': 'AGPL-3',
'installable': True,
}

View File

View File

@@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_vat_optional_vies
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-23 17:10+0000\n"
"PO-Revision-Date: 2017-06-23 19:11+0200\n"
"Last-Translator: David <david.vidal@tecnativa.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: es\n"
"X-Generator: Poedit 1.8.7.1\n"
#. module: base_vat_optional_vies
#: model:ir.model,name:base_vat_optional_vies.model_res_partner
msgid "Partner"
msgstr "Empresa"
#. module: base_vat_optional_vies
#: model:ir.model.fields,field_description:base_vat_optional_vies.field_res_partner_vies_passed
#: model:ir.model.fields,field_description:base_vat_optional_vies.field_res_users_vies_passed
msgid "VIES validation passed"
msgstr "Validación VIES aprobada"

View File

@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import res_partner

View File

@@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Tecnativa - Antonio Espinosa
# Copyright 2017 Tecnativa - David Vidal
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
vies_passed = fields.Boolean(
string="VIES validation passed", readonly=True)
@api.model
def simple_vat_check(self, country_code, vat_number):
res = super(ResPartner, self).simple_vat_check(
country_code, vat_number,
)
partner = self.env.context.get('vat_partner')
if partner and self.vies_passed:
# Can not be sure that this VAT is signed up in VIES
partner.update({'vies_passed': False})
return res
@api.model
def vies_vat_check(self, country_code, vat_number):
partner = self.env.context.get('vat_partner')
if partner:
# If there's an exception checking VIES, the upstream method will
# call simple_vat_check and thus the flag will be removed
partner.update({'vies_passed': True})
res = super(ResPartner, self).vies_vat_check(country_code, vat_number)
if not res:
return self.simple_vat_check(country_code, vat_number)
return res
@api.constrains('vat')
def check_vat(self):
for partner in self:
partner = partner.with_context(vat_partner=partner)
super(ResPartner, partner).check_vat()

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import test_res_partner

View File

@@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Tecnativa - Antonio Espinosa
# Copyright 2016 Tecnativa - Sergio Teruel
# Copyright 2017 Tecnativa - David Vidal
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import mock
from odoo.tests import common
class TestResPartner(common.TransactionCase):
def setUp(self):
super(TestResPartner, self).setUp()
self.company = self.env.user.company_id
self.company.vat_check_vies = True
self.partner = self.env['res.partner'].create({
'name': 'Test partner',
})
self.vatnumber_path = (
'odoo.addons.base_vat.models.res_partner.vatnumber'
)
def test_validate_vat_vies(self):
with mock.patch(self.vatnumber_path) as mock_vatnumber:
mock_vatnumber.check_vies.return_value = True
self.partner.vat = 'ESB87530432'
self.assertEqual(self.partner.vies_passed, True)
def test_exception_vat_vies(self):
with mock.patch(self.vatnumber_path) as mock_vatnumber:
mock_vatnumber.check_vies.side_effect = Exception()
self.partner.vat = 'ESB87530432'
self.assertEqual(self.partner.vies_passed, False)
def test_no_validate_vat(self):
with mock.patch(self.vatnumber_path) as mock_vatnumber:
mock_vatnumber.check_vies.return_value = False
self.partner.vat = 'ESB87530432'
self.assertEqual(self.partner.vies_passed, False)

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_partner_property_form" model="ir.ui.view">
<field name="name">Add VAT country and VIES passed fields</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="account.view_partner_property_form"/>
<field name="arch" type="xml">
<field name="property_account_position_id" position="after">
<field name="vies_passed"/>
</field>
</field>
</record>
</odoo>