[IMP] mail: add email_from like partner before opening wizard composer
authorChristophe Matthieu <chm@openerp.com>
Mon, 31 Dec 2012 14:22:50 +0000 (15:22 +0100)
committerChristophe Matthieu <chm@openerp.com>
Mon, 31 Dec 2012 14:22:50 +0000 (15:22 +0100)
bzr revid: chm@openerp.com-20121231142250-ykdxaqoqfvush1ah

addons/mail/static/src/js/mail.js

index f8643e9..953cc90 100644 (file)
@@ -370,6 +370,7 @@ openerp.mail = function (session) {
             this.show_compact_message = false;
             this.show_delete_attachment = true;
             this.emails_from = [];
+            this.partners_from = [];
         },
 
         start: function () {
@@ -494,43 +495,41 @@ openerp.mail = function (session) {
             this.$(".oe_msg_attachment_list").on('click', '.oe_delete', this.on_attachment_delete);
 
             this.$(".oe_emails_from").on('change', 'input', this.on_checked_email_from);
+            this.$(".oe_partners_from").on('change', 'input', this.on_checked_partner_from);
         },
 
         on_compose_fullmail: function (default_composition_mode) {
-
+            var self = this;
             if(!this.do_check_attachment_upload()) {
                 return false;
             }
 
-            if (default_composition_mode == 'reply') {
+            // 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 () {
                 var context = {
+                    'default_model': default_composition_mode == 'reply' ? undefined : self.context.default_model,
+                    'default_res_id': default_composition_mode == 'reply' ? undefined : self.context.default_res_id,
                     'default_composition_mode': default_composition_mode,
-                    'default_parent_id': this.id,
-                    'default_body': mail.ChatterUtils.get_text2html(this.$el ? (this.$el.find('textarea:not(.oe_compact)').val() || '') : ''),
-                    'default_attachment_ids': this.attachment_ids,
+                    '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]}),
                 };
-            } else {
-                var context = {
-                    'default_model': this.context.default_model,
-                    'default_res_id': this.context.default_res_id,
-                    'default_composition_mode': default_composition_mode,
-                    'default_parent_id': this.id,
-                    'default_body': mail.ChatterUtils.get_text2html(this.$el ? (this.$el.find('textarea:not(.oe_compact)').val() || '') : ''),
-                    'default_attachment_ids': this.attachment_ids,
+                var action = {
+                    type: 'ir.actions.act_window',
+                    res_model: 'mail.compose.message',
+                    view_mode: 'form',
+                    view_type: 'form',
+                    views: [[false, 'form']],
+                    target: 'new',
+                    context: context,
                 };
-            }
-            var action = {
-                type: 'ir.actions.act_window',
-                res_model: 'mail.compose.message',
-                view_mode: 'form',
-                view_type: 'form',
-                views: [[false, 'form']],
-                target: 'new',
-                context: context,
-            };
 
-            this.do_action(action);
-            this.on_cancel();
+                self.do_action(action);
+                self.on_cancel();
+            });
+
         },
 
         reinit: function() {
@@ -564,14 +563,13 @@ openerp.mail = function (session) {
 
         check_recipient_partners: function (emails) {
             var self = this;
+            self.partners_from = [];
             var deferreds = [];
-            for (var i = 0; i < emails.length; i++) {
-                deferreds.push($.Deferred());
-            }
             var ds_partner = new session.web.DataSetSearch(this, 'res.partner');
             _.each(emails, function (email) {
-                ds_partner.call('search', [[['email', 'ilike', email]]]).then(function (partner_ids) {
-                    var deferred = deferreds[_.indexOf(emails, email)];
+                var deferred = $.Deferred();
+                deferreds.push(deferred);   
+                ds_partner.call('search', [[['email', 'like', email]]]).then(function (partner_ids) {
                     if (!partner_ids.length) {
                         var pop = new session.web.form.FormOpenPopup(this);
                         pop.show_element(
@@ -586,17 +584,22 @@ openerp.mail = function (session) {
                                 title: _t("Please complete partner's informations"),
                             }
                         );
-                        pop.on('write_completed, closed', self, function () {
+                        pop.on('closed', self, function () {
+                            deferred.resolve();
+                        });
+                        pop.on('saved', self, function (id) {
+                            self.partners_from.push([id, true]);
                             deferred.resolve();
                         });
                     }
                     else {
+                        self.partners_from.push([partner_ids[0], true]);
                         deferred.resolve();
                     }
                     return deferred;
                 });
             });
-            return $.when.apply( $, deferreds ).done();
+            return $.when.apply( $, deferreds );
         },
 
         on_message_post: function (event) {
@@ -639,7 +642,7 @@ openerp.mail = function (session) {
         /* convert the compact mode into the compose message
         */
         on_compose_expandable: function (event) {
-            this.get_emails_from();
+            this.get_from();
             if ((!this.stay_open || (event && event.type == 'click')) && (!this.show_composer || !this.$('textarea:not(.oe_compact)').val().match(/\S+/) && !this.attachment_ids.length)) {
                 this.show_composer = !this.show_composer || this.stay_open;
                 this.reinit();
@@ -664,7 +667,7 @@ openerp.mail = function (session) {
             }
         },
 
-        get_emails_from: function () {
+        get_from: function () {
             var self = this;
             var messages = [];
 
@@ -678,13 +681,12 @@ openerp.mail = function (session) {
                 _.each(this.options.root_thread.messages, function (msg) {messages.push(msg); messages.concat(msg.get_childs());});
             }
             
-            var emails_from = _.map(_.filter(messages,
-                    function (thread) {return thread.author_id && !thread.author_id[0];}),
-                function (thread) {return thread.author_id[1];});
+            _.each(messages, function (thread) {
+                if (thread.author_id && !thread.author_id[0] &&
+                    !_.find(self.emails_from, function (from) {return from[0] == thread.author_id[1];})) {
+
+                    self.emails_from.push([thread.author_id[1], true]);
 
-            return _.each(emails_from, function (email_from) {
-                if (!_.find(self.emails_from, function (from) {return from[0] == email_from;})) {
-                    self.emails_from.push([email_from, true]);
                 }
             });
         },
@@ -697,7 +699,7 @@ openerp.mail = function (session) {
                     email_from[1] = $input.is(":checked");
                 }
             });
-        }
+        },
     });
 
     /**