You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.9 KiB
69 lines
1.9 KiB
# Copyright 2016-2017 ACSONE SA/NV (<http://acsone.eu>)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
import logging
|
|
|
|
from odoo import api, models
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
try:
|
|
from stdnum import ean
|
|
from stdnum.exceptions import InvalidChecksum
|
|
except ImportError:
|
|
_logger.debug("Cannot `import external dependency python stdnum package`.")
|
|
|
|
|
|
class ResPartnerIdCategory(models.Model):
|
|
_inherit = "res.partner.id_category"
|
|
|
|
@api.model
|
|
def _search_duplicate(self, category_id, id_number, force_active=False):
|
|
domain = [
|
|
("category_id", "=", category_id),
|
|
("name", "=", id_number.name),
|
|
("name", "!=", False),
|
|
("id", "!=", id_number.id),
|
|
]
|
|
|
|
if force_active:
|
|
domain.append(("partner_id.active", "=", True))
|
|
return self.env["res.partner.id_number"].search(domain)
|
|
|
|
def validate_res_partner_gln(self, id_number):
|
|
self.ensure_one()
|
|
if not id_number:
|
|
return False
|
|
|
|
try:
|
|
ean.validate(id_number.name)
|
|
except InvalidChecksum:
|
|
return True
|
|
|
|
cat = self.env.ref(
|
|
"partner_identification_gln." "partner_identification_gln_number_category"
|
|
).id
|
|
duplicate_gln = self._search_duplicate(cat, id_number, True)
|
|
|
|
if duplicate_gln:
|
|
return True
|
|
|
|
return False
|
|
|
|
def validate_res_partner_gcp(self, id_number):
|
|
self.ensure_one()
|
|
if not id_number:
|
|
return False
|
|
|
|
if len(id_number.name) < 1 or len(id_number.name) > 12:
|
|
return True
|
|
|
|
cat = self.env.ref(
|
|
"partner_identification_gln." "partner_identification_gcp_number_category"
|
|
).id
|
|
duplicate_gln = self._search_duplicate(cat, id_number)
|
|
|
|
if duplicate_gln:
|
|
return True
|
|
|
|
return False
|