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.

67 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 = [('category_id', '=', category_id),
  16. ('name', '=', id_number.name),
  17. ('name', '!=', False),
  18. ('id', '!=', id_number.id)]
  19. if force_active:
  20. domain.append(('partner_id.active', '=', True))
  21. return self.env['res.partner.id_number'].search(domain)
  22. @api.multi
  23. def validate_res_partner_gln(self, id_number):
  24. self.ensure_one()
  25. if not id_number:
  26. return False
  27. try:
  28. ean.validate(id_number.name)
  29. except InvalidChecksum:
  30. return True
  31. cat = self.env.ref('partner_identification_gln.'
  32. 'partner_identification_gln_number_category').id
  33. duplicate_gln = self._search_duplicate(cat, id_number, True)
  34. if duplicate_gln:
  35. return True
  36. return False
  37. @api.multi
  38. def validate_res_partner_gcp(self, id_number):
  39. self.ensure_one()
  40. if not id_number:
  41. return False
  42. if len(id_number.name) < 1 or len(id_number.name) > 12:
  43. return True
  44. cat = self.env.ref('partner_identification_gln.'
  45. 'partner_identification_gcp_number_category').id
  46. duplicate_gln = self._search_duplicate(cat, id_number)
  47. if duplicate_gln:
  48. return True
  49. return False