From 2f6212ae27f1f691ab0668cc5c75a2c209c9c96d Mon Sep 17 00:00:00 2001 From: ArtyomLosev Date: Mon, 10 Jul 2017 19:10:47 +0500 Subject: [PATCH] [PORT] mail_private to 10.0 (#104) * [PORT] mail_private port to 10.0 * [FIX] mail_private --- mail_private/README.rst | 6 +- mail_private/__openerp__.py | 5 +- mail_private/doc/changelog.rst | 6 +- mail_private/models.py | 8 +- mail_private/static/src/js/mail_private.js | 257 ++++++------------- mail_private/static/src/xml/mail_private.xml | 8 +- mail_private/view.xml | 27 -- 7 files changed, 94 insertions(+), 223 deletions(-) delete mode 100644 mail_private/view.xml diff --git a/mail_private/README.rst b/mail_private/README.rst index 6a9fc15..ac2133a 100644 --- a/mail_private/README.rst +++ b/mail_private/README.rst @@ -18,12 +18,12 @@ Sponsors Further information =================== -Demo: http://runbot.it-projects.info/demo/mail-addons/8.0 +Demo: http://runbot.it-projects.info/demo/mail-addons/10.0 -HTML Description: https://apps.odoo.com/apps/modules/8.0/mail_private/ +HTML Description: https://apps.odoo.com/apps/modules/10.0/mail_private/ Usage instructions: ``__ Changelog: ``__ -Tested on Odoo 8.0 0af32f3f84bae07b11abb8538d02e35c7369a348 +Tested on Odoo 10.0 ffba5c688ff74a0630f9f70be1d7760a43a7deba diff --git a/mail_private/__openerp__.py b/mail_private/__openerp__.py index 2fa1011..5b91b62 100644 --- a/mail_private/__openerp__.py +++ b/mail_private/__openerp__.py @@ -4,7 +4,7 @@ "summary": """Send private messages to specified recipients, regardless of who are in followers list.""", "category": "Discuss", "images": ['images/mail_private_image.png'], - "version": "1.0.0", + "version": "1.0.1", "application": False, "author": "IT-Projects LLC, Pavel Romanchenko", @@ -20,7 +20,6 @@ "external_dependencies": {"python": [], "bin": []}, "data": [ 'template.xml', - 'view.xml', ], "qweb": [ 'static/src/xml/mail_private.xml', @@ -32,5 +31,5 @@ "post_init_hook": None, "auto_install": False, - "installable": False, + "installable": True, } diff --git a/mail_private/doc/changelog.rst b/mail_private/doc/changelog.rst index 5f35720..f3b7c08 100644 --- a/mail_private/doc/changelog.rst +++ b/mail_private/doc/changelog.rst @@ -1,5 +1,7 @@ -Updates -======= +`1.0.1` +------- + +- **PORT:** Odoo 10 support. `1.0.0` ------- diff --git a/mail_private/models.py b/mail_private/models.py index 2d4b7ef..30eea7c 100644 --- a/mail_private/models.py +++ b/mail_private/models.py @@ -1,11 +1,9 @@ # -*- coding: utf-8 -*- -from openerp.osv import osv, fields +from odoo import models, fields -class MailComposeMessage(osv.TransientModel): +class MailComposeMessage(models.TransientModel): _inherit = 'mail.compose.message' - _columns = { - 'private': fields.boolean('Send Internal Message'), - } + private = fields.Boolean(string='Send Internal Message') diff --git a/mail_private/static/src/js/mail_private.js b/mail_private/static/src/js/mail_private.js index bc0d781..2916592 100644 --- a/mail_private/static/src/js/mail_private.js +++ b/mail_private/static/src/js/mail_private.js @@ -1,201 +1,100 @@ -openerp.mail_private = function(instance){ +odoo.define('mail_private', function (require) { +'use strict'; - var mail = instance.mail; +var core = require('web.core'); +var Chatter = require('mail.Chatter'); +var chat_manager = require('mail.chat_manager'); +var session = require('web.session'); +var Model = require('web.Model'); - instance.mail.ThreadComposeMessage.include({ - init: function (parent, datasets, options) { + + Chatter.include({ + init: function () { this._super.apply(this, arguments); this.private = false; + this.events['click .oe_compose_post_private'] = 'on_open_composer_private_message'; }, - bind_events: function(){ - var self = this; - this.$('.oe_compose_post_private').on('click', self.on_toggle_quick_composer_private); - this._super.apply(this, arguments); - }, - on_compose_fullmail: function (default_composition_mode) { - var self = this; - if(!this.do_check_attachment_upload()) { - return false; - } - var recipient_done = $.Deferred(); - if (this.is_log) { - recipient_done.resolve([]); - } - else { - recipient_done = this.check_recipient_partners(); - } - $.when(recipient_done).done(function (partner_ids) { - var context = { - 'default_parent_id': self.id, - 'default_body': mail.ChatterUtils.get_text2html(self.$el ? (self.$el.find('textarea:not(.oe_compact)').val() || '') : ''), - 'default_attachment_ids': _.map(self.attachment_ids, function (file) {return file.id;}), - 'default_partner_ids': partner_ids, - 'default_is_log': self.is_log, - 'default_private': self.private, - 'mail_post_autofollow': true, - 'mail_post_autofollow_partner_ids': partner_ids, - 'is_private': self.is_private - }; - if (default_composition_mode != 'reply' && self.context.default_model && self.context.default_res_id) { - context.default_model = self.context.default_model; - context.default_res_id = self.context.default_res_id; - } - - 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, - }; - self.do_action(action, { - 'on_close': function(){ !self.parent_thread.options.view_inbox && self.parent_thread.message_fetch(); } - }); - self.on_cancel(); + on_post_message: function (message) { + var self = this; + if (this.private) { + message.subtype = false; + } + var options = {model: this.model, res_id: this.res_id}; + chat_manager.post_message(message, options).then( + function () { + self.close_composer(); + if (message.partner_ids.length) { + self.refresh_followers(); + } + }).fail(function () { + // todo: display notification }); + }, - }, - do_send_message_post: function (partner_ids, log) { + on_open_composer_private_message: function (event) { var self = this; - var values = { - 'body': this.$('textarea').val(), - 'subject': false, - 'parent_id': this.context.default_parent_id, - 'attachment_ids': _.map(this.attachment_ids, function (file) {return file.id;}), - 'partner_ids': partner_ids, - 'context': _.extend(this.parent_thread.context, { - 'mail_post_autofollow': true, - 'mail_post_autofollow_partner_ids': partner_ids, - 'default_private': self.private - }), - 'type': 'comment', - 'content_subtype': 'plaintext', - }; - if (log || self.private) { - values.subtype = false; - } - else { - values.subtype = 'mail.mt_comment'; - } - this.parent_thread.ds_thread._model.call('message_post', [this.context.default_res_id], 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.slice(-1)[0] ); - // insert the message on dom - thread.insert_message( message, root ? undefined : self.$el, root ); - }); - self.on_cancel(); - self.flag_post = false; + this.private = true; + this.get_recipients_for_internal_message().then(function (data) { + var private_message = 'private_message'; + self.recipients_for_internal_message = data; + self.open_composer(private_message); }); }, - on_toggle_quick_composer: function (event) { - if (event.target.className == 'oe_compose_post') { - this.recipients = []; - this.private = false; - } + + on_open_composer_new_message: function () { this._super.apply(this, arguments); + this.private = false; }, - on_toggle_quick_composer_private: function (event) { - this.recipients = []; - var self = this; - var $input = $(event.target); - this.compute_emails_from(); - var email_addresses = _.pluck(this.recipients, 'email_address'); - var suggested_partners = $.Deferred(); - // if clicked: call for suggested recipients - if (event.type == 'click') { - this.private = $input.hasClass('oe_compose_post_private'); - this.is_log = false; - suggested_partners = this.parent_thread.get_recipients_for_internal_message([this.context.default_res_id], this.context) - .done(function (additional_recipients) { - var thread_recipients = additional_recipients[self.context.default_res_id]; - _.each(thread_recipients, function (recipient) { - var parsed_email = mail.ChatterUtils.parse_email(recipient[1]); - if (_.indexOf(email_addresses, parsed_email[1]) == -1) { - self.recipients.push({ - 'checked': false, - 'partner_id': recipient[0], - 'full_name': recipient[1], - 'name': parsed_email[0], - 'email_address': parsed_email[1], - 'reason': recipient[2], - }); - } - }); + open_composer: function (options) { + var self = this; + this._super.apply(this, arguments); + if (options === 'private_message') { + //Clear existing suggested partners + for (var i=0; i', reason] - ); - } - } - return self.result; - }); - } - return self.result; + return new Model(this.context.default_model).query( + ['message_follower_ids', 'partner_id']).filter( + [['id', '=', self.context.default_res_id]]).all(). + then(function (thread) { + var follower_ids = thread[0].message_follower_ids; + self.result[self.context.default_res_id] = []; + self.customer = thread[0].partner_id; + // Fetch partner ids + return new Model('mail.followers').call( + 'read', [follower_ids, ['partner_id']]).then(function (res_partners) { + var res_partners_filtered = []; + // Filter result and push to array + _.each(res_partners, function (partner) { + if (partner.partner_id[0] && partner.partner_id[0] !== session.partner_id ) { + res_partners_filtered.push(partner.partner_id[0]); + } + }); + return new Model('res.partner').call( + 'read', [res_partners_filtered, ['name', 'email', 'user_ids']] + ).then(function (recipients) { + return recipients; + }); + }); }); } }); -}; + +}); diff --git a/mail_private/static/src/xml/mail_private.xml b/mail_private/static/src/xml/mail_private.xml index d603d82..7e01b63 100644 --- a/mail_private/static/src/xml/mail_private.xml +++ b/mail_private/static/src/xml/mail_private.xml @@ -1,11 +1,11 @@