34 lines
1.4 KiB
Python
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
|