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.

65 lines
1.9 KiB

  1. # -*- coding: utf-8 -*-
  2. # © 2016 ACSONE SA/NV (<http://acsone.eu>)
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. import logging
  5. from openerp import api, models
  6. _logger = logging.getLogger(__name__)
  7. try:
  8. from stdnum import ean
  9. from stdnum.exceptions import InvalidChecksum
  10. except ImportError:
  11. _logger.debug('Cannot `import external dependency python stdnum package`.')
  12. class ResPartnerIdCategory(models.Model):
  13. _inherit = 'res.partner.id_category'
  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. num_obj = self.env['res.partner.id_number']
  22. return num_obj.search(domain)
  23. @api.multi
  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('partner_identification_gln.'
  33. 'partner_identification_gln_number_category').id
  34. duplicate_gln = self._search_duplicate(cat, id_number, True)
  35. if duplicate_gln:
  36. return True
  37. return False
  38. @api.multi
  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('partner_identification_gln.'
  46. 'partner_identification_gcp_number_category').id
  47. duplicate_gln = self._search_duplicate(cat, id_number)
  48. if duplicate_gln:
  49. return True
  50. return False