[IMP] mail: finding partner based on email: improved code for suggested partners, added somme comments and tests.
bzr revid: tde@openerp.com-20130411101720-mumz152dsxvv1xbj
This commit is contained in:
@@ -415,7 +415,9 @@ class mail_thread(osv.AbstractModel):
|
||||
return ret_dict
|
||||
|
||||
def _message_find_partners(self, cr, uid, message, header_fields=['From'], context=None):
|
||||
""" Find partners related to some header fields of the message. """
|
||||
""" Find partners related to some header fields of the message.
|
||||
|
||||
TDE TODO: merge me with other partner finding methods in 8.0 """
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
partner_ids = []
|
||||
s = ', '.join([decode(message.get(h)) for h in header_fields if message.get(h)])
|
||||
@@ -427,6 +429,7 @@ class mail_thread(osv.AbstractModel):
|
||||
return partner_ids
|
||||
|
||||
def _message_find_user_id(self, cr, uid, message, context=None):
|
||||
""" TDE TODO: check and maybe merge me with other user finding methods in 8.0 """
|
||||
from_local_part = tools.email_split(decode(message.get('From')))[0]
|
||||
# FP Note: canonification required, the minimu: .lower()
|
||||
user_ids = self.pool.get('res.users').search(cr, uid, ['|',
|
||||
@@ -878,7 +881,9 @@ class mail_thread(osv.AbstractModel):
|
||||
return result
|
||||
|
||||
def message_get_partner_info_from_emails(self, cr, uid, emails, link_mail=False, context=None, res_id=None):
|
||||
""" Wrapper with weird order parameter because of 7.0 fix. """
|
||||
""" Wrapper with weird order parameter because of 7.0 fix.
|
||||
|
||||
TDE TODO: remove me in 8.0 """
|
||||
return self.message_find_partner_from_emails(cr, uid, res_id, emails, link_mail=link_mail, context=context)
|
||||
|
||||
def message_find_partner_from_emails(self, cr, uid, id, emails, link_mail=False, context=None):
|
||||
@@ -887,11 +892,12 @@ class mail_thread(osv.AbstractModel):
|
||||
it is meant to be used by the mail widget.
|
||||
|
||||
:return dict: partner_ids and new_partner_ids
|
||||
"""
|
||||
|
||||
TDE TODO: merge me with other partner finding methods in 8.0 """
|
||||
mail_message_obj = self.pool.get('mail.message')
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
result = list()
|
||||
if id:
|
||||
if id and self._name != 'mail.thrad':
|
||||
obj = self.browse(cr, SUPERUSER_ID, id, context=context)
|
||||
else:
|
||||
obj = None
|
||||
@@ -908,13 +914,15 @@ class mail_thread(osv.AbstractModel):
|
||||
partner_info['partner_id'] = follower.id
|
||||
# second try: check in partners
|
||||
if not partner_info.get('partner_id'):
|
||||
ids = partner_obj.search(cr, SUPERUSER_ID, [('email', '=', email_address)], context=context)
|
||||
ids = partner_obj.search(cr, SUPERUSER_ID, [('email', 'ilike', email_address), ('user_ids', '!=', False)], limit=1, context=context)
|
||||
if not ids:
|
||||
ids = partner_obj.search(cr, SUPERUSER_ID, [('email', 'ilike', email_address)], limit=1, context=context)
|
||||
if ids:
|
||||
partner_info['partner_id'] = ids[0]
|
||||
result.append(partner_info)
|
||||
|
||||
# link mail with this from mail to the new partner id
|
||||
if link_mail and ids:
|
||||
if link_mail and partner_info['partner_id']:
|
||||
message_ids = mail_message_obj.search(cr, SUPERUSER_ID, [
|
||||
'|',
|
||||
('email_from', '=', email),
|
||||
@@ -922,7 +930,7 @@ class mail_thread(osv.AbstractModel):
|
||||
('author_id', '=', False)
|
||||
], context=context)
|
||||
if message_ids:
|
||||
mail_message_obj.write(cr, SUPERUSER_ID, message_ids, {'author_id': ids[0]}, context=context)
|
||||
mail_message_obj.write(cr, SUPERUSER_ID, message_ids, {'author_id': partner_info['partner_id']}, context=context)
|
||||
return result
|
||||
|
||||
def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification',
|
||||
|
||||
@@ -620,7 +620,6 @@ openerp.mail = function (session) {
|
||||
// have unknown names -> call message_get_partner_info_from_emails to try to find partner_id
|
||||
var find_done = $.Deferred();
|
||||
if (names_to_find.length > 0) {
|
||||
// find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [names_to_find]);
|
||||
var values = {
|
||||
'res_id': this.context.default_res_id,
|
||||
}
|
||||
@@ -672,7 +671,7 @@ openerp.mail = function (session) {
|
||||
if (new_names_to_find.length > 0) {
|
||||
var values = {
|
||||
'link_mail': true,
|
||||
'res_id': this.context.default_res_id,
|
||||
'res_id': self.context.default_res_id,
|
||||
}
|
||||
find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [new_names_to_find], values);
|
||||
}
|
||||
|
||||
@@ -83,7 +83,47 @@ Sylvie
|
||||
|
||||
class TestMailgateway(TestMailBase):
|
||||
|
||||
def test_00_message_process(self):
|
||||
def test_00_partner_find_from_email(self):
|
||||
""" Tests designed for partner fetch based on emails. """
|
||||
cr, uid, user_raoul, group_pigs = self.cr, self.uid, self.user_raoul, self.group_pigs
|
||||
|
||||
# --------------------------------------------------
|
||||
# Data creation
|
||||
# --------------------------------------------------
|
||||
# 1 - Partner ARaoul
|
||||
p_a_id = self.res_partner.create(cr, uid, {'name': 'ARaoul', 'email': 'test@test.fr'})
|
||||
|
||||
# --------------------------------------------------
|
||||
# CASE1: without object
|
||||
# --------------------------------------------------
|
||||
|
||||
# Do: find partner with email -> first partner should be found
|
||||
partner_info = self.mail_thread.message_find_partner_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0]
|
||||
self.assertEqual(partner_info['full_name'], 'Maybe Raoul <test@test.fr>',
|
||||
'mail_thread: message_find_partner_from_emails did not handle email')
|
||||
self.assertEqual(partner_info['partner_id'], p_a_id,
|
||||
'mail_thread: message_find_partner_from_emails wrong partner found')
|
||||
|
||||
# Data: add some data about partners
|
||||
# 2 - User BRaoul
|
||||
p_b_id = self.res_partner.create(cr, uid, {'name': 'BRaoul', 'email': 'test@test.fr', 'user_ids': [(4, user_raoul.id)]})
|
||||
|
||||
# Do: find partner with email -> first user should be found
|
||||
partner_info = self.mail_thread.message_find_partner_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0]
|
||||
self.assertEqual(partner_info['partner_id'], p_b_id,
|
||||
'mail_thread: message_find_partner_from_emails wrong partner found')
|
||||
|
||||
# --------------------------------------------------
|
||||
# CASE1: with object
|
||||
# --------------------------------------------------
|
||||
|
||||
# Do: find partner in group where there is a follower with the email -> should be taken
|
||||
self.mail_group.message_subscribe(cr, uid, [group_pigs.id], [p_b_id])
|
||||
partner_info = self.mail_group.message_find_partner_from_emails(cr, uid, group_pigs.id, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0]
|
||||
self.assertEqual(partner_info['partner_id'], p_b_id,
|
||||
'mail_thread: message_find_partner_from_emails wrong partner found')
|
||||
|
||||
def test_10_message_process(self):
|
||||
""" Testing incoming emails processing. """
|
||||
cr, uid, user_raoul = self.cr, self.uid, self.user_raoul
|
||||
|
||||
@@ -325,7 +365,7 @@ class TestMailgateway(TestMailBase):
|
||||
self.assertEqual(msg.body, '<pre>\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n</pre>',
|
||||
'message_process: plaintext incoming email incorrectly parsed')
|
||||
|
||||
def test_10_thread_parent_resolution(self):
|
||||
def test_20_thread_parent_resolution(self):
|
||||
""" Testing parent/child relationships are correctly established when processing incoming mails """
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
@@ -370,7 +410,7 @@ class TestMailgateway(TestMailBase):
|
||||
self.assertEqual(6, len(group_pigs.message_ids), 'message_process: group should contain 6 messages')
|
||||
self.assertEqual(3, len(msg1.child_ids), 'message_process: msg1 should have 3 children now')
|
||||
|
||||
def test_20_private_discussion(self):
|
||||
def test_30_private_discussion(self):
|
||||
""" Testing private discussion between partners. """
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
|
||||
Reference in New Issue
Block a user