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

  1. # Copyright 2016-2017 ACSONE SA/NV (<http://acsone.eu>)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. import logging
  4. from odoo import api, models
  5. _logger = logging.getLogger(__name__)
  6. try:
  7. from stdnum import ean
  8. from stdnum.exceptions import InvalidChecksum
  9. except ImportError:
  10. _logger.debug("Cannot `import external dependency python stdnum package`.")
  11. class ResPartnerIdCategory(models.Model):
  12. _inherit = "res.partner.id_category"
  13. @api.model
  14. def _search_duplicate(self, category_id, id_number, force_active=False):
  15. domain = [
  16. ("category_id", "=", category_id),
  17. ("name", "=", id_number.name),
  18. ("name", "!=", False),
  19. ("id", "!=", id_number.id),
  20. ]
  21. if force_active:
  22. domain.append(("partner_id.active", "=", True))
  23. return self.env["res.partner.id_number"].search(domain)
  24. def validate_res_partner_gln(self, id_number):
  25. self.ensure_one()
  26. if not id_number:
  27. return False
  28. try:
  29. ean.validate(id_number.name)
  30. except InvalidChecksum:
  31. return True
  32. cat = self.env.ref(
  33. "partner_identification_gln." "partner_identification_gln_number_category"
  34. ).id
  35. duplicate_gln = self._search_duplicate(cat, id_number, True)
  36. if duplicate_gln:
  37. return True
  38. return False
  39. def validate_res_partner_gcp(self, id_number):
  40. self.ensure_one()
  41. if not id_number:
  42. return False
  43. if len(id_number.name) < 1 or len(id_number.name) > 12:
  44. return True
  45. cat = self.env.ref(
  46. "partner_identification_gln." "partner_identification_gcp_number_category"
  47. ).id
  48. duplicate_gln = self._search_duplicate(cat, id_number)
  49. if duplicate_gln:
  50. return True
  51. return False