From 27cdc052dd8d292e8513346d032444384a59fe47 Mon Sep 17 00:00:00 2001 From: "Andrea Grazioso (agr-odoo)" Date: Tue, 31 Jan 2023 15:27:44 +0000 Subject: [PATCH] [FIX] base_vat,l10n_ph: correct TIN check Register a ph contact with vat 123-456-789-012 Validation Error will raise Currently we use check the PH vat against regexp \d{3}-\d{3}-\d{3}-\d{5} This seems to be not correct according to the official documentation https://serp-p.pids.gov.ph/publication/public/view?slug=taxpayer-identification-number-tin-its-development-and-importance-in-tax-administration """ 12 digit number (E.g. 123 456 789 002), of which the first digit identifies type of taxpayer (0 for corporations, 1-9 for individuals and other businesses), second to eighth digits are sequential numbers between 0 and 9, ninth digit is a check number, last three digits are 000 for individuals and head office of businesses and 001-999 for branches of businesses, if any """ The TIN should be a 9 digit code + 3 for the branch code opw-3141793 closes odoo/odoo#116491 X-original-commit: f0e9a3ce7fec9bb86b8703a6d49c0bc70c80d5c3 Signed-off-by: Josse Colpaert Signed-off-by: Grazioso Andrea (agr) --- addons/base_vat/models/res_partner.py | 8 +++++++- addons/l10n_ph/models/res_partner.py | 15 +++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/addons/base_vat/models/res_partner.py b/addons/base_vat/models/res_partner.py index a51d9824b1f..0f3f350392b 100644 --- a/addons/base_vat/models/res_partner.py +++ b/addons/base_vat/models/res_partner.py @@ -63,7 +63,7 @@ _ref_vat = { 'no': 'NO123456785', 'nz': '49-098-576 or 49098576', 'pe': '10XXXXXXXXY or 20XXXXXXXXY or 15XXXXXXXXY or 16XXXXXXXXY or 17XXXXXXXXY', - 'ph': '123-456-789-01234', + 'ph': '123-456-789-123', 'pl': 'PL1234567883', 'pt': 'PT123456789', 'ro': 'RO1234567897', @@ -499,6 +499,12 @@ class ResPartner(models.Model): dig_check = 1 return int(vat[10]) == dig_check + # Philippines TIN (+ branch code) validation + __check_vat_ph_re = re.compile(r"\d{3}-\d{3}-\d{3}(-\d{3,5})?$") + + def check_vat_ph(self, vat): + return len(vat) >= 11 and len(vat) <= 17 and self.__check_vat_ph_re.match(vat) + def check_vat_ru(self, vat): ''' Check Russia VAT number. diff --git a/addons/l10n_ph/models/res_partner.py b/addons/l10n_ph/models/res_partner.py index d994711f0c8..0e1813cb26a 100644 --- a/addons/l10n_ph/models/res_partner.py +++ b/addons/l10n_ph/models/res_partner.py @@ -1,15 +1,12 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. -import re - from odoo import fields, api, models -CHECK_VAT_PH_RE = re.compile(r"\d{3}-\d{3}-\d{3}-\d{5}") class ResPartner(models.Model): _inherit = "res.partner" - branch_code = fields.Char("Branch Code", default='000', required=True) + branch_code = fields.Char("Branch Code", default='000', compute='_compute_branch_code', store=True) first_name = fields.Char("First Name") middle_name = fields.Char("Middle Name") last_name = fields.Char("Last Name") @@ -18,5 +15,11 @@ class ResPartner(models.Model): def _commercial_fields(self): return super()._commercial_fields() + ['branch_code'] - def check_vat_ph(self, vat): - return len(vat) == 17 and CHECK_VAT_PH_RE.match(vat) + @api.depends('vat', 'country_id') + def _compute_branch_code(self): + for partner in self: + branch_code = '000' + if partner.country_id.code == 'PH' and partner.vat: + match = partner.__check_vat_ph_re.match(partner.vat) + branch_code = match and match.group(1) and match.group(1)[1:] or branch_code + partner.branch_code = branch_code