Odoo18-Base/addons/l10n_in/models/product_template.py
2025-01-06 10:57:38 +07:00

34 lines
1.4 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import re
from odoo import api, models, fields, _
class ProductTemplate(models.Model):
_inherit = 'product.template'
l10n_in_hsn_code = fields.Char(string="HSN/SAC Code", help="Harmonized System Nomenclature/Services Accounting Code")
l10n_in_hsn_warning = fields.Text(string="HSC/SAC warning", compute="_compute_l10n_in_hsn_warning")
@api.depends('sale_ok', 'l10n_in_hsn_code')
def _compute_l10n_in_hsn_warning(self):
digit_suffixes = {
'4': _("either 4, 6 or 8"),
'6': _("either 6 or 8"),
'8': _("8")
}
active_hsn_code_digit_len = max(
int(company.l10n_in_hsn_code_digit)
for company in self.env.companies
)
for record in self:
check_hsn = record.sale_ok and record.l10n_in_hsn_code and active_hsn_code_digit_len
if check_hsn and (not re.match(r'^\d{4}$|^\d{6}$|^\d{8}$', record.l10n_in_hsn_code) or len(record.l10n_in_hsn_code) < active_hsn_code_digit_len):
record.l10n_in_hsn_warning = _(
"HSN code field must consist solely of digits and be %s in length.",
digit_suffixes.get(str(active_hsn_code_digit_len))
)
continue
record.l10n_in_hsn_warning = False