diff --git a/addons/l10n_be/models/__init__.py b/addons/l10n_be/models/__init__.py index ed727aa0a41..b3cdec34f4b 100644 --- a/addons/l10n_be/models/__init__.py +++ b/addons/l10n_be/models/__init__.py @@ -4,4 +4,4 @@ from . import account_chart_template from . import account_journal from . import account_move -from . import res_company +from . import res_partner diff --git a/addons/l10n_be/models/res_company.py b/addons/l10n_be/models/res_company.py deleted file mode 100644 index a8d7c92c6b7..00000000000 --- a/addons/l10n_be/models/res_company.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -# Copyright (c) 2011 Noviat nv/sa (www.noviat.be). All rights reserved. - -from odoo import api, models - - -class ResCompany(models.Model): - _inherit = 'res.company' - - @api.depends('vat', 'country_id') - def _compute_company_registry(self): - # OVERRIDE - # If a belgian company has a VAT number then it's company registry is it's VAT Number (without country code). - super(ResCompany, self)._compute_company_registry() - for company in self.filtered(lambda comp: comp.country_id.code == 'BE' and comp.vat): - vat_country, vat_number = self.env['res.partner']._split_vat(company.vat) - if vat_country == 'be' and self.env['res.partner'].simple_vat_check(vat_country, vat_number): - company.company_registry = vat_number diff --git a/addons/l10n_be/models/res_partner.py b/addons/l10n_be/models/res_partner.py new file mode 100644 index 00000000000..d1b174a7a52 --- /dev/null +++ b/addons/l10n_be/models/res_partner.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +# Copyright (c) 2011 Noviat nv/sa (www.noviat.be). All rights reserved. + +from odoo import api, models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.depends('vat', 'country_id') + def _compute_company_registry(self): + # OVERRIDE + # If a belgian company has a VAT number then it's company registry is it's VAT Number (without country code). + super()._compute_company_registry() + for partner in self.filtered(lambda p: p.country_id.code == 'BE' and p.vat): + vat_country, vat_number = self._split_vat(partner.vat) + if vat_country == 'be' and self.simple_vat_check(vat_country, vat_number): + partner.company_registry = vat_number diff --git a/odoo/addons/base/models/res_company.py b/odoo/addons/base/models/res_company.py index ae8488f39a0..86b822eca8e 100644 --- a/odoo/addons/base/models/res_company.py +++ b/odoo/addons/base/models/res_company.py @@ -85,7 +85,7 @@ class Company(models.Model): mobile = fields.Char(related='partner_id.mobile', store=True, readonly=False) website = fields.Char(related='partner_id.website', readonly=False) vat = fields.Char(related='partner_id.vat', string="Tax ID", readonly=False) - company_registry = fields.Char(compute='_compute_company_registry', store=True, readonly=False) + company_registry = fields.Char(related='partner_id.company_registry', string="Company ID", readonly=False) paperformat_id = fields.Many2one('report.paperformat', 'Paper format', default=lambda self: self.env.ref('base.paperformat_euro', raise_if_not_found=False)) external_report_layout_id = fields.Many2one('ir.ui.view', 'Document Template') base_onboarding_company_state = fields.Selection([ @@ -117,11 +117,6 @@ class Company(models.Model): def _get_company_address_update(self, partner): return dict((fname, partner[fname]) for fname in self._get_company_address_field_names()) - - def _compute_company_registry(self): - # exists to allow overrides - for company in self: - company.company_registry = company.company_registry # TODO @api.depends(): currently now way to formulate the dependency on the # partner's contact address diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index 305054aa961..196c489566c 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -129,7 +129,7 @@ class Partner(models.Model): _inherit = ['format.address.mixin', 'avatar.mixin'] _name = "res.partner" _order = "display_name, id" - _rec_names_search = ['display_name', 'email', 'ref', 'vat'] # TODO vat must be sanitized the same way for storing/searching + _rec_names_search = ['display_name', 'email', 'ref', 'vat', 'company_registry'] # TODO vat must be sanitized the same way for storing/searching def _default_category(self): return self.env['res.partner.category'].browse(self._context.get('category_id')) @@ -172,6 +172,9 @@ class Partner(models.Model): help='The internal user in charge of this contact.') vat = fields.Char(string='Tax ID', index=True, help="The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.") same_vat_partner_id = fields.Many2one('res.partner', string='Partner with same Tax ID', compute='_compute_same_vat_partner_id', store=False) + same_company_registry_partner_id = fields.Many2one('res.partner', string='Partner with same Company Registry', compute='_compute_same_vat_partner_id', store=False) + company_registry = fields.Char(string="Company ID", compute='_compute_company_registry', store=True, readonly=False, + help="The registry number of the company. Use it if it is different from the Tax ID. It must be unique across all partners of a same country") bank_ids = fields.One2many('res.partner.bank', 'partner_id', string='Banks') website = fields.Char('Website Link') comment = fields.Html(string='Notes') @@ -309,7 +312,7 @@ class Partner(models.Model): for partner in self - super_partner: partner.partner_share = not partner.user_ids or not any(not user.share for user in partner.user_ids) - @api.depends('vat', 'company_id') + @api.depends('vat', 'company_id', 'company_registry') def _compute_same_vat_partner_id(self): for partner in self: # use _origin to deal with onchange() @@ -324,6 +327,14 @@ class Partner(models.Model): if partner_id: domain += [('id', '!=', partner_id), '!', ('id', 'child_of', partner_id)] partner.same_vat_partner_id = bool(partner.vat) and not partner.parent_id and Partner.search(domain, limit=1) + # check company_registry + domain = [ + ('company_registry', '=', partner.company_registry), + ('company_id', 'in', [False, partner.company_id.id]), + ] + if partner_id: + domain += [('id', '!=', partner_id), '!', ('id', 'child_of', partner_id)] + partner.same_company_registry_partner_id = bool(partner.company_registry) and not partner.parent_id and Partner.search(domain, limit=1) @api.depends(lambda self: self._display_address_depends()) def _compute_contact_address(self): @@ -348,6 +359,11 @@ class Partner(models.Model): p = partner.commercial_partner_id partner.commercial_company_name = p.is_company and p.name or partner.company_name + def _compute_company_registry(self): + # exists to allow overrides + for company in self: + company.company_registry = company.company_registry + @api.model def _get_view(self, view_id=None, view_type='form', **options): if (not view_id) and (view_type == 'form') and self._context.get('force_email'): @@ -484,7 +500,7 @@ class Partner(models.Model): partners that aren't `commercial entities` themselves, and will be delegated to the parent `commercial entity`. The list is meant to be extended by inheriting classes. """ - return ['vat'] + return ['vat', 'company_registry'] def _commercial_sync_from_company(self): """ Handle sync of commercial fields when a new parent commercial entity is set, diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml index e3e304cdfe0..f84a737490f 100644 --- a/odoo/addons/base/views/res_partner_views.xml +++ b/odoo/addons/base/views/res_partner_views.xml @@ -156,6 +156,9 @@ +
@@ -341,6 +344,7 @@ + @@ -409,7 +413,7 @@ + filter_domain="['|', '|', '|', '|', ('display_name', 'ilike', self), ('ref', '=', self), ('email', 'ilike', self), ('vat', 'ilike', self), ('company_registry', 'ilike', self)]"/>