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
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)
+
+ # create a new partner if not exists
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)
-
+
+ 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
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])
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
}
},
- /*post a message and fetch the message*/
- on_message_post: function (event) {
+ 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 );
+ },
- 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;
+ 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
+ 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) {