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.

57 lines
2.3 KiB

  1. # -*- encoding: utf-8 -*-
  2. ##############################################################################
  3. #
  4. # OpenERP, Open Source Management Solution
  5. # This module copyright (C) 2013 Therp BV (<http://therp.nl>)
  6. # All Rights Reserved
  7. #
  8. # This program is free software: you can redistribute it and/or modify
  9. # it under the terms of the GNU Affero General Public License as
  10. # published by the Free Software Foundation, either version 3 of the
  11. # License, or (at your option) any later version.
  12. #
  13. # This program is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. # GNU Affero General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU Affero General Public License
  19. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. #
  21. ##############################################################################
  22. from .base import base
  23. from openerp.tools.safe_eval import safe_eval
  24. from openerp.tools.mail import email_split
  25. class email_exact(base):
  26. '''Search for exactly the mailadress as noted in the email'''
  27. name = 'Exact mailadress'
  28. required_fields = ['model_field', 'mail_field']
  29. def _get_mailaddresses(self, conf, mail_message):
  30. mailaddresses = []
  31. fields = conf.mail_field.split(',')
  32. for field in fields:
  33. if field in mail_message:
  34. mailaddresses += email_split(mail_message[field])
  35. return [addr.lower() for addr in mailaddresses]
  36. def _get_mailaddress_search_domain(
  37. self, conf, mail_message, operator='=', values=None):
  38. mailaddresses = values or self._get_mailaddresses(
  39. conf, mail_message)
  40. if not mailaddresses:
  41. return [(0, '=', 1)]
  42. search_domain = ((['|'] * (len(mailaddresses) - 1)) + [
  43. (conf.model_field, operator, addr) for addr in mailaddresses] +
  44. safe_eval(conf.domain or '[]'))
  45. return search_domain
  46. def search_matches(self, cr, uid, conf, mail_message, mail_message_org):
  47. conf_model = conf.pool.get(conf.model_id.model)
  48. search_domain = self._get_mailaddress_search_domain(conf, mail_message)
  49. return conf_model.search(
  50. cr, uid, search_domain, order=conf.model_order)