[IMP] mail: create new partner with email from
bzr revid: chm@openerp.com-20130108124310-le3hx95yn3jhfhaq
This commit is contained in:
parent
459da1fb46
commit
fee9f63912
|
@ -28,6 +28,7 @@ import pytz
|
|||
import time
|
||||
import xmlrpclib
|
||||
from email.message import Message
|
||||
import re
|
||||
|
||||
from openerp import tools
|
||||
from openerp import SUPERUSER_ID
|
||||
|
@ -906,8 +907,41 @@ class mail_thread(osv.AbstractModel):
|
|||
|
||||
return mail_message.create(cr, uid, values, context=context)
|
||||
|
||||
def new_email_partner(self, cr, uid, emails, context=None):
|
||||
""" Convert a list of emails into a list partner_ids and a list new_partner_ids
|
||||
"""
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
mail_message_obj = self.pool.get('mail.message')
|
||||
|
||||
partner_ids = []
|
||||
new_partner_ids = []
|
||||
for email in emails:
|
||||
m = re.search(r"((.+?)\s*<)?([^<>]+@[^<>]+)>?", email, re.IGNORECASE | re.DOTALL)
|
||||
name = m.group(2) or m.group(0)
|
||||
email = m.group(3)
|
||||
ids = partner_obj.search(cr, SUPERUSER_ID, [('email', '=', email)], context=context)
|
||||
if ids:
|
||||
partner_ids += ids
|
||||
else:
|
||||
|
||||
partner_id = partner_obj.create(cr, uid, {
|
||||
'name': name or email,
|
||||
'email': email,
|
||||
}, context=context)
|
||||
new_partner_ids.append(partner_id)
|
||||
|
||||
# link mail with this from mail to the new partner id
|
||||
message_ids = mail_message_obj.search(cr, SUPERUSER_ID, ['|', ('email_from', '=', email), ('email_from', 'ilike', '<%s>' % email), ('author_id', '=', False)], context=context)
|
||||
if message_ids:
|
||||
mail_message_obj.write(cr, SUPERUSER_ID, message_ids, {'email_from': None, 'author_id': partner_id}, context=context)
|
||||
return {
|
||||
'partner_ids': partner_ids,
|
||||
'new_partner_ids': new_partner_ids,
|
||||
}
|
||||
|
||||
|
||||
def message_post_user_api(self, cr, uid, thread_id, body='', parent_id=False,
|
||||
attachment_ids=None, extra_emails=None, content_subtype='plaintext',
|
||||
attachment_ids=None, content_subtype='plaintext',
|
||||
context=None, **kwargs):
|
||||
""" Wrapper on message_post, used for user input :
|
||||
- mail gateway
|
||||
|
@ -922,22 +956,8 @@ class mail_thread(osv.AbstractModel):
|
|||
to the related document. Should only be set by Chatter.
|
||||
- extra_email: [ 'Fabien <fpi@openerp.com>', 'al@openerp.com' ]
|
||||
"""
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
mail_message_obj = self.pool.get('mail.message')
|
||||
ir_attachment = self.pool.get('ir.attachment')
|
||||
extra_emails = extra_emails or []
|
||||
|
||||
# 1.A.1: pre-process partners and incoming extra_emails
|
||||
partner_ids = set([])
|
||||
for email in extra_emails:
|
||||
partner_id = partner_obj.find_or_create(cr, uid, email, context=context)
|
||||
# link mail with this from mail to the new partner id
|
||||
partner_msg_ids = mail_message_obj.search(cr, SUPERUSER_ID, ['|', ('email_from', '=', email), ('email_from', 'ilike', '<%s>' % email), ('author_id', '=', False)], context=context)
|
||||
if partner_id and partner_msg_ids:
|
||||
mail_message_obj.write(cr, SUPERUSER_ID, partner_msg_ids, {'email_from': None, 'author_id': partner_id}, context=context)
|
||||
partner_ids.add((4, partner_id))
|
||||
if partner_ids:
|
||||
self.message_subscribe(cr, uid, [thread_id], [item[1] for item in partner_ids], context=context)
|
||||
|
||||
# 1.A.2: add recipients of parent message
|
||||
if parent_id:
|
||||
|
@ -948,7 +968,9 @@ class mail_thread(osv.AbstractModel):
|
|||
partner_ids.add((4, parent_message.author_id.id))
|
||||
|
||||
# 1.A.3: add specified recipients
|
||||
partner_ids |= set(kwargs.pop('partner_ids', []))
|
||||
partner_ids = set(kwargs.pop('partner_ids', []))
|
||||
if partner_ids:
|
||||
self.message_subscribe(cr, uid, [thread_id], [id for id in partner_ids], context=context)
|
||||
|
||||
# 1.B: handle body, message_type and message_subtype
|
||||
if content_subtype == 'plaintext':
|
||||
|
|
|
@ -512,13 +512,13 @@ openerp.mail = function (session) {
|
|||
}
|
||||
|
||||
// create list of new partners
|
||||
this.check_recipient_partners().done(function () {
|
||||
this.check_recipient_partners().done(function (partner_ids) {
|
||||
var context = {
|
||||
'default_composition_mode': default_composition_mode,
|
||||
'default_parent_id': self.id,
|
||||
'default_body': mail.ChatterUtils.get_text2html(self.$el ? (self.$el.find('textarea:not(.oe_compact)').val() || '') : ''),
|
||||
'default_attachment_ids': self.attachment_ids,
|
||||
'default_partner_ids': _.map(_.filter(self.partners_from, function (f) {return f[1]}), function (f) {return f[0]}),
|
||||
'default_partner_ids': partner_ids,
|
||||
};
|
||||
if (default_composition_mode != 'reply' && self.context.default_model && self.context.default_res_id) {
|
||||
context.default_model = self.context.default_model;
|
||||
|
@ -572,29 +572,25 @@ openerp.mail = function (session) {
|
|||
|
||||
check_recipient_partners: function () {
|
||||
var self = this;
|
||||
var partners_from = [];
|
||||
var emails = [];
|
||||
var deferreds = [];
|
||||
_.each(this.emails_from, function (email_from) {
|
||||
if (email_from[1]) {
|
||||
if (!_.find(emails, function (email) {return email[4] == email_from[0][4];})) {
|
||||
emails.push(email_from[0]);
|
||||
deferreds.push($.Deferred());
|
||||
}
|
||||
if (email_from[1] && !_.find(emails, function (email) {return email == email_from[0][4];})) {
|
||||
emails.push(email_from[0][1]);
|
||||
}
|
||||
});
|
||||
this.partners_from = [];
|
||||
var ds_partner = new session.web.DataSetSearch(this, 'res.partner');
|
||||
_.each(emails, function (email, key) {
|
||||
var deferred = deferreds[key];
|
||||
ds_partner.call('search', [[['email', 'like', email[4]]]]).then(function (partner_ids) {
|
||||
if (!partner_ids.length) {
|
||||
var deferred_check = $.Deferred();
|
||||
self.parent_thread.ds_thread._model.call('new_email_partner', [emails]).then(function (partners) {
|
||||
partners_from = _.clone(partners.partner_ids);
|
||||
var deferreds = [];
|
||||
_.each(partners.new_partner_ids, function (id) {
|
||||
var deferred = $.Deferred()
|
||||
deferreds.push(deferred);
|
||||
var pop = new session.web.form.FormOpenPopup(this);
|
||||
pop.show_element(
|
||||
'res.partner',
|
||||
0,
|
||||
id,
|
||||
{
|
||||
'default_email': email[4],
|
||||
'default_name': email[3],
|
||||
'force_email': true,
|
||||
'ref': "compound_context",
|
||||
},
|
||||
|
@ -605,39 +601,35 @@ openerp.mail = function (session) {
|
|||
pop.on('closed', self, function () {
|
||||
deferred.resolve();
|
||||
});
|
||||
pop.on('saved', self, function (id) {
|
||||
self.partners_from.push([id, true]);
|
||||
deferred.resolve();
|
||||
partners_from.push(id);
|
||||
});
|
||||
}
|
||||
else {
|
||||
self.partners_from.push([partner_ids[0], true]);
|
||||
deferred.resolve();
|
||||
}
|
||||
$.when.apply( $, deferreds ).then(function () {
|
||||
deferred_check.resolve(partners_from);
|
||||
});
|
||||
});
|
||||
return $.when.apply( $, deferreds );
|
||||
return deferred_check;
|
||||
},
|
||||
|
||||
on_message_post: function (event) {
|
||||
var self = this;
|
||||
if (this.do_check_attachment_upload() && (this.attachment_ids.length || this.$('textarea').val().match(/\S+/))) {
|
||||
// create list of new partners
|
||||
this.check_recipient_partners().done(function () {
|
||||
self.do_send_message_post();
|
||||
this.check_recipient_partners().done(function (partner_ids) {
|
||||
self.do_send_message_post(partner_ids);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/*do post a message and fetch the message*/
|
||||
do_send_message_post: function () {
|
||||
do_send_message_post: function (partner_ids) {
|
||||
var self = this;
|
||||
console.log(partner_ids);
|
||||
this.parent_thread.ds_thread._model.call('message_post_user_api', [this.context.default_res_id], {
|
||||
'body': this.$('textarea').val(),
|
||||
'subject': false,
|
||||
'parent_id': this.context.default_parent_id,
|
||||
'attachment_ids': _.map(this.attachment_ids, function (file) {return file.id;}),
|
||||
'extra_emails': _.map(_.filter(this.emails_from, function (f) {return f[1]}), function (f) {return f[0][4]}),
|
||||
'partner_ids': partner_ids,
|
||||
'context': this.parent_thread.context,
|
||||
}).done(function (message_id) {
|
||||
var thread = self.parent_thread;
|
||||
|
@ -1707,7 +1699,6 @@ openerp.mail = function (session) {
|
|||
this.defaults[key.replace(/^search_default_/, '')] = this.context[key];
|
||||
}
|
||||
}
|
||||
|
||||
this.action.params = _.extend({
|
||||
'display_indented_thread': 1,
|
||||
'show_reply_button': true,
|
||||
|
@ -1751,11 +1742,13 @@ openerp.mail = function (session) {
|
|||
* @param {Object} defaults ??
|
||||
*/
|
||||
load_searchview: function (defaults) {
|
||||
|
||||
var self = this;
|
||||
var ds_msg = new session.web.DataSetSearch(this, 'mail.message');
|
||||
this.searchview = new session.web.SearchView(this, ds_msg, false, defaults || {}, false);
|
||||
this.searchview.appendTo(this.$('.oe_view_manager_view_search'))
|
||||
.then(function () { self.searchview.on('search_data', self, self.do_searchview_search); });
|
||||
console.log(this.searchview);
|
||||
if (this.searchview.has_defaults) {
|
||||
this.searchview.ready.then(this.searchview.do_search);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue