From 1256586805d7d652bbef38fb58c242c133287f06 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Fri, 22 Nov 2019 12:28:56 +0100 Subject: [PATCH] adds an option to disable the notification to existing followers on a new email dropped to a record. --- mail_drop_target/__manifest__.py | 1 + mail_drop_target/models/__init__.py | 1 + mail_drop_target/models/mail_thread.py | 9 ++++- .../models/res_config_settings.py | 33 +++++++++++++++++++ mail_drop_target/readme/CONFIGURATION.rst | 3 ++ mail_drop_target/readme/DESCRIPTION.rst | 4 +++ .../tests/test_mail_drop_target.py | 25 ++++++++++++++ .../views/res_config_settings_views.xml | 26 +++++++++++++++ 8 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 mail_drop_target/models/res_config_settings.py create mode 100644 mail_drop_target/readme/CONFIGURATION.rst create mode 100644 mail_drop_target/views/res_config_settings_views.xml diff --git a/mail_drop_target/__manifest__.py b/mail_drop_target/__manifest__.py index c6140e361..cbadf6326 100644 --- a/mail_drop_target/__manifest__.py +++ b/mail_drop_target/__manifest__.py @@ -18,5 +18,6 @@ }, "data": [ 'views/templates.xml', + 'views/res_config_settings_views.xml', ], } diff --git a/mail_drop_target/models/__init__.py b/mail_drop_target/models/__init__.py index 23c7dbf08..f11e7bf03 100644 --- a/mail_drop_target/models/__init__.py +++ b/mail_drop_target/models/__init__.py @@ -1,3 +1,4 @@ # Copyright 2018 Therp BV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import mail_thread +from . import res_config_settings diff --git a/mail_drop_target/models/mail_thread.py b/mail_drop_target/models/mail_thread.py index ce2061612..a3a8789dc 100644 --- a/mail_drop_target/models/mail_thread.py +++ b/mail_drop_target/models/mail_thread.py @@ -15,7 +15,14 @@ class MailThread(models.AbstractModel): def message_drop(self, model, message, custom_values=None, save_original=False, strip_attachments=False, thread_id=None): - result = self.message_process( + disable_notify_mail_drop_target = \ + self.env["ir.config_parameter"].get_param( + "mail_drop_target.disable_notify", default=False) + self_message_process = self + if disable_notify_mail_drop_target: + self_message_process = self_message_process.with_context( + message_create_from_mail_mail=True) + result = self_message_process.message_process( model, message, custom_values=custom_values, save_original=save_original, strip_attachments=strip_attachments, thread_id=thread_id diff --git a/mail_drop_target/models/res_config_settings.py b/mail_drop_target/models/res_config_settings.py new file mode 100644 index 000000000..2c6e9b941 --- /dev/null +++ b/mail_drop_target/models/res_config_settings.py @@ -0,0 +1,33 @@ +# Copyright 2019 Eficent Business and IT Consulting Services, S.L. +# +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + disable_notify_mail_drop_target = fields.Boolean( + 'Disable Notification followers on mail dropped to a Thread', + help="When this setting is set, when a user drops an " + "email into an existing thread the followers of the thread will " + "not be notified. This sets an ir.config.parameter " + "mail_drop_target.disable_notify") + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + + disable_notify_mail_drop_target = \ + self.env["ir.config_parameter"].get_param( + "mail_drop_target.disable_notify", default=False) + res.update( + disable_notify_mail_drop_target=disable_notify_mail_drop_target, + ) + return res + + def set_values(self): + super(ResConfigSettings, self).set_values() + self.env['ir.config_parameter'].set_param( + "mail_drop_target.disable_notify", + self.disable_notify_mail_drop_target or '') diff --git a/mail_drop_target/readme/CONFIGURATION.rst b/mail_drop_target/readme/CONFIGURATION.rst new file mode 100644 index 000000000..79e2eb7b3 --- /dev/null +++ b/mail_drop_target/readme/CONFIGURATION.rst @@ -0,0 +1,3 @@ +To disable the automatic notification to existing followers when you drop an +email to a record, go to *Settings*, activate the developer mode, and then go to +*Settings / General Settings* and set the flag 'Disable Mail Drag&Drop Notification'. diff --git a/mail_drop_target/readme/DESCRIPTION.rst b/mail_drop_target/readme/DESCRIPTION.rst index dfd16753e..c017ccdff 100644 --- a/mail_drop_target/readme/DESCRIPTION.rst +++ b/mail_drop_target/readme/DESCRIPTION.rst @@ -1,3 +1,7 @@ This module was written to allow users to drag&drop emails from their desktop to Odoo. It supports as well RFC822 .eml files as Outlook .msg (those only if `an extra library `_ is installed) files. + +When the mail is dropped to an odoo record, it will automatically send a notification +of that new message that has been added to all the existing followers. It is possible +to disable this notification. diff --git a/mail_drop_target/tests/test_mail_drop_target.py b/mail_drop_target/tests/test_mail_drop_target.py index 979d7d159..d49330ef8 100644 --- a/mail_drop_target/tests/test_mail_drop_target.py +++ b/mail_drop_target/tests/test_mail_drop_target.py @@ -10,6 +10,7 @@ class TestMailDropTarget(TransactionCase): self.partner = self.env['res.partner'].create({ 'name': 'TEST PARTNER' }) + self.partner.message_subscribe(partner_ids=self.partner.ids) def test_eml(self): message = tools.file_open( @@ -36,6 +37,9 @@ class TestMailDropTarget(TransactionCase): self.partner._name, message, thread_id=self.partner.id) self.partner.refresh() self.assertEqual(comments+1, len(self.partner.message_ids)) + msg = self.partner.message_ids.filtered( + lambda m: m.subject == 'Test') + self.assertIsNotNone(msg.needaction_partner_ids) with self.assertRaises(exceptions.Warning): self.partner.message_process_msg( self.partner._name, message, thread_id=self.partner.id) @@ -46,3 +50,24 @@ class TestMailDropTarget(TransactionCase): new=False, ): self.test_msg() + + def test_msg_no_notification(self): + message = base64.b64encode(tools.file_open( + 'sample.msg', + mode='rb', + subdir="addons/mail_drop_target/tests" + ).read()) + settings = self.env['res.config.settings'].create({}) + settings.disable_notify_mail_drop_target = True + settings.execute() + comments = len(self.partner.message_ids) + self.partner.message_process_msg( + self.partner._name, message, thread_id=self.partner.id) + self.partner.refresh() + self.assertEqual(comments+1, len(self.partner.message_ids)) + msg = self.partner.message_ids.filtered( + lambda m: m.subject == 'Test') + self.assertEqual(len(msg.needaction_partner_ids), 0) + with self.assertRaises(exceptions.Warning): + self.partner.message_process_msg( + self.partner._name, message, thread_id=self.partner.id) diff --git a/mail_drop_target/views/res_config_settings_views.xml b/mail_drop_target/views/res_config_settings_views.xml new file mode 100644 index 000000000..e4a04dbe2 --- /dev/null +++ b/mail_drop_target/views/res_config_settings_views.xml @@ -0,0 +1,26 @@ + + + + + res.config.settings.view.form.inherit.mail + res.config.settings + + +
+
+
+ +
+
+
+
+
+
+
+
+