diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 6cf490fac45..fdd04aa1174 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -455,9 +455,8 @@ class mail_thread(osv.AbstractModel): else: assert thread_id == 0, "Posting a message without model should be with a null res_id, to create a private message." model_pool = self.pool.get('mail.thread') - new_msg_informations = model_pool.message_post_user_api(cr, uid, [thread_id], context=context, content_subtype='html', **msg) - new_msg_id = new_msg_informations['message_id']; - + new_msg_id = model_pool.message_post_user_api(cr, uid, [thread_id], context=context, content_subtype='html', **msg) + if partner_ids: # postponed after message_post, because this is an external message and we don't want to create # duplicate emails due to notifications @@ -773,17 +772,14 @@ class mail_thread(osv.AbstractModel): body = tools.plaintext2html(body) new_partner_ids = set([]) - link_partner_ids = set([]) for partner in extra_email: part_ids = self.pool.get('res.partner').search(cr, uid, [('email', '=', partner)], context=context) - if not part_ids: - # create a new partner - part_ids = [self.pool.get('res.partner').name_create(cr, uid, partner, context=dict())[0]] - new_partner_ids |= set(part_ids) - else: - # partners is already create - link_partner_ids |= set(part_ids) + # create a new partner if not exists + if not part_ids: + part_ids = [self.pool.get('res.partner').name_create(cr, uid, partner, context=dict())[0]] + + new_partner_ids |= set(part_ids) self.message_subscribe(cr, uid, [thread_id], part_ids, context=context) # link mail with this from mail to the new partner id @@ -791,9 +787,8 @@ class mail_thread(osv.AbstractModel): if part_ids and message_ids: mail_message.write(cr, uid, message_ids, {'email_from': None, 'author_id': part_ids[0]}, context=context) - - partner_ids = set(kwargs.pop('partner_ids', [])) | set(new_partner_ids) | set(link_partner_ids) - + partner_ids = set(kwargs.pop('partner_ids', [])) | set(new_partner_ids) + if parent_id: parent_message = self.pool.get('mail.message').browse(cr, uid, parent_id, context=context) partner_ids |= set([(4, partner.id) for partner in parent_message.partner_ids]) @@ -826,10 +821,7 @@ class mail_thread(osv.AbstractModel): ir_attachment.write(cr, SUPERUSER_ID, attachment_ids, {'res_model': model, 'res_id': thread_id}, context=context) mail_message.write(cr, SUPERUSER_ID, [new_message_id], {'attachment_ids': [(6, 0, [pid for pid in attachment_ids])]}, context=context) - return { - 'message_id': new_message_id, - 'new_partner_ids': list(new_partner_ids), - } + return new_message_id #------------------------------------------------------ # Followers API diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 0f6323ab923..ac53457ee05 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -564,57 +564,75 @@ openerp.mail = function (session) { } }, - /*post a message and fetch the message*/ + check_recipient_partners: function (emails) { + var self = this; + var deferreds = []; + _.each(emails, function (email) { + var deferred = $.Deferred(); + var pop = new session.web.form.FormOpenPopup(this); + pop.show_element( + 'res.partner', + 0, + { + 'default_email': email, + 'force_email': true, + 'ref': "compound_context", + }, + { + title: _t("Please complete partner's informations"), + } + ); + pop.on('write_completed, closed', self, function () { + deferred.resolve(); + }); + deferreds.push(deferred); + }); + return $.when.apply( $, deferreds ); + }, + on_message_post: function (event) { var self = this; - - var comment_node = this.$('textarea'); - var body = comment_node.val(); - - if (this.do_check_attachment_upload() && (this.attachment_ids.length || body.match(/\S+/))) { - //session.web.blockUI(); - var values = [ - this.context.default_res_id, //thread_id - body, //body - false, //subject - this.context.default_parent_id, //parent_id - _.map(this.attachment_ids, function (file) {return file.id;}), //attachment_ids - _.map(_.filter(this.emails_from, function (f) {return f[1]}), function (f) {return f[0]}), //extra_email - this.parent_thread.context, // context - ]; - this.parent_thread.ds_thread.call('message_post_user_api', values).done(function (record) { - var thread = self.parent_thread; - var root = thread == self.options.root_thread; - if (self.options.display_indented_thread < self.thread_level && thread.parent_message) { - var thread = thread.parent_message.parent_thread; - } - // create object and attach to the thread object - thread.message_fetch([["id", "=", record.message_id]], false, [record.message_id], function (arg, data) { - var message = thread.create_message_object( data[0] ); - // insert the message on dom - thread.insert_message( message, root ? undefined : self.$el, root ); - }); - self.on_cancel(); - - if (record.new_partner_ids && record.new_partner_ids.length) { - _.each(record.new_partner_ids, function (id) { - var pop = new session.web.form.FormOpenPopup(self); - pop.show_element( - 'res.partner', - id, - self.parent_thread.context, - { - title: _t("Please complete partner's informations"), - } - ); - }); - } - //session.web.unblockUI(); - }); - return true; + if (this.do_check_attachment_upload() && (this.attachment_ids.length || this.$('textarea').val().match(/\S+/))) { + // create list of new partners + var extra_email = _.map(_.filter(this.emails_from, function (f) {return f[1]}), function (f) {return f[0]}); + this.check_recipient_partners(extra_email).done(function () { + self.do_send_message_post(); + }); } }, + /*do post a message and fetch the message*/ + do_send_message_post: function () { + console.log(arguments); + return; + var self = this; + //session.web.blockUI(); + var values = [ + this.context.default_res_id, //thread_id + this.$('textarea').val(), //body + false, //subject + this.context.default_parent_id, //parent_id + _.map(this.attachment_ids, function (file) {return file.id;}), //attachment_ids + _.map(_.filter(this.emails_from, function (f) {return f[1]}), function (f) {return f[0]}), //extra_email + this.parent_thread.context, // context + ]; + this.parent_thread.ds_thread.call('message_post_user_api', values).done(function (message_id) { + var thread = self.parent_thread; + var root = thread == self.options.root_thread; + if (self.options.display_indented_thread < self.thread_level && thread.parent_message) { + var thread = thread.parent_message.parent_thread; + } + // create object and attach to the thread object + thread.message_fetch([["id", "=", message_id]], false, [message_id], function (arg, data) { + var message = thread.create_message_object( data[0] ); + // insert the message on dom + thread.insert_message( message, root ? undefined : self.$el, root ); + }); + self.on_cancel(); + //session.web.unblockUI(); + }); + }, + /* convert the compact mode into the compose message */ on_compose_expandable: function (event) {