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.

54 lines
2.2 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.addons.mail.mail_message import to_email
  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. mailaddresses+=to_email(mail_message[field])
  34. return mailaddresses
  35. def _get_mailaddress_search_domain(
  36. self, conf, mail_message, operator='=', values=None):
  37. mailaddresses = values or self._get_mailaddresses(
  38. conf, mail_message)
  39. if not mailaddresses:
  40. return [(0,'=',1)]
  41. return ((['|'] * (len(mailaddresses) - 1)) + [
  42. (conf.model_field, operator, addr) for addr in mailaddresses] +
  43. safe_eval(conf.domain or '[]'))
  44. def search_matches(self, cr, uid, conf, mail_message, mail_message_org):
  45. return conf.pool.get(conf.model_id.model).search(
  46. cr, uid,
  47. self._get_mailaddress_search_domain(conf, mail_message),
  48. order=conf.model_order)