Skip to content

Commit

Permalink
Add mail_optional_follower_notification module (OCA#60)
Browse files Browse the repository at this point in the history
* [ADD] Add mail_optional_follower_notifications module

* [CHG][mail_optional_follower_notifications] Readme.

* [IMP][mail_optional_follower_notifications] Code review.

* [CHG] Rename mail_optional_follower_notifications to mail_optional_follower_notification

* [IMP][mail_optional_follower_notification] Review
  • Loading branch information
adrienpeiffer authored and Denver Risser committed Jan 28, 2021
1 parent cd942b8 commit 87e5b71
Show file tree
Hide file tree
Showing 14 changed files with 233 additions and 0 deletions.
60 changes: 60 additions & 0 deletions mail_optional_follower_notification/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

====================================
Mail optional follower notifications
====================================

This module adds the possibility to choose if you want to automatically
notify followers on mail.compose.message. By default, Odoo notify
automatically all followers.

Usage
=====

To use this module, you need to use the checkbox near "Followers of the document and" on mail.compose.message:

This field it's initialized to true to keep the standard behavior.

.. figure:: static/description/optional_follower_001.png
:alt: Default checkbox

.. figure:: static/description/optional_follower_002.png
:alt: Checkbox to avoid to notify automatically followers

.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/205/8.0

* https://www.odoo.com/forum/help-1


Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/social/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback
`here <https://github.com/OCA/social/issues/new?body=module:%20mail_optional_follower_notification%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Credits
=======

Contributors
------------

* Adrien Peiffer <adrien.peiffer@acsone.eu>

Maintainer
----------

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

This module is maintained by the OCA.

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

To contribute to this module, please visit https://odoo-community.org.
6 changes: 6 additions & 0 deletions mail_optional_follower_notification/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import models
from . import wizard
22 changes: 22 additions & 0 deletions mail_optional_follower_notification/__openerp__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': "Mail optional follower notification",

'summary': """
Choose if you want to automatically notify followers
on mail.compose.message""",
'author': 'ACSONE SA/NV,'
'Odoo Community Association (OCA)',
'website': "http://acsone.eu",
'category': 'Social Network',
'version': '8.0.1.0.0',
'license': 'AGPL-3',
'depends': [
'mail',
],
'data': [
'wizard/mail_compose_message_view.xml',
],
}
6 changes: 6 additions & 0 deletions mail_optional_follower_notification/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import mail_message
from . import mail_notification
19 changes: 19 additions & 0 deletions mail_optional_follower_notification/models/mail_message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, api


class MailMessage(models.Model):
_inherit = 'mail.message'

@api.model
def create(self, values):
ctx = self.env.context.copy()
if not ctx.get('notify_followers') and values.get('partner_ids'):
partner_list = self.resolve_2many_commands(
'partner_ids', values.get('partner_ids'), fields=['id'])
force_partners_to_notify = [d['id'] for d in partner_list]
ctx['force_partners_to_notify'] = force_partners_to_notify
return super(MailMessage, self.with_context(ctx)).create(values)
19 changes: 19 additions & 0 deletions mail_optional_follower_notification/models/mail_notification.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, api


class MailNotification(models.Model):
_inherit = 'mail.notification'

@api.model
def _notify(self, message_id, partners_to_notify=None,
force_send=False, user_signature=True):
if self.env.context.get('force_partners_to_notify'):
partners_to_notify =\
self.env.context.get('force_partners_to_notify')
super(MailNotification, self)._notify(
message_id, partners_to_notify=partners_to_notify,
force_send=force_send, user_signature=user_signature)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions mail_optional_follower_notification/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import test_mail_optional_follower_notifications
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp.tests import common


class TestMailOptionalFollowernotifications(common.TransactionCase):

def setUp(self):
super(TestMailOptionalFollowernotifications, self).setUp()
self.partner_obj = self.env['res.partner']
self.partner_01 = self.env.ref('base.res_partner_2')
self.partner_02 = self.env.ref('base.res_partner_13')
self.partner_03 = self.env.ref('base.res_partner_5')

def test_send_email_optional_follower_notifications(self):
ctx = self.env.context.copy()
ctx.update({
'default_model': 'res.partner',
'default_res_id': self.partner_01.id,
'default_composition_mode': 'comment',
})
mail_compose = self.env['mail.compose.message']
values = mail_compose.with_context(ctx)\
.onchange_template_id(False, 'comment', 'res.partner',
self.partner_01.id)['value']
values['partner_ids'] = [(4, self.partner_02.id),
(4, self.partner_03.id)]
compose_id = mail_compose.with_context(ctx).create(values)
compose_id.with_context(ctx).send_mail()
res = self.env["mail.message"].search(
[('model', '=', 'res.partner'),
('res_id', '=', self.partner_01.id)])
self.assertEqual(len(res.ids), 1)
message = self.env['mail.message']
for record in res:
if record.notified_partner_ids.ids == [self.partner_03.id] and\
record.partner_ids.ids == [self.partner_03.id]:
message += record
self.assertEqual(len(message.ids), 0)
values['partner_ids'] = [(6, 0, [self.partner_03.id])]
compose_id = mail_compose.with_context(ctx).create(values)
compose_id.notify_followers = False
compose_id.with_context(ctx).send_mail()
res = self.env["mail.message"].search(
[('model', '=', 'res.partner'),
('res_id', '=', self.partner_01.id)])
message = self.env['mail.message']
for record in res:
if record.notified_partner_ids.ids == [self.partner_03.id] and\
record.partner_ids.ids == [self.partner_03.id]:
message += record
self.assertEqual(len(message.ids), 1)
5 changes: 5 additions & 0 deletions mail_optional_follower_notification/wizard/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import mail_compose_message
19 changes: 19 additions & 0 deletions mail_optional_follower_notification/wizard/mail_compose_message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, fields, api


class MailComposeMessage(models.TransientModel):
_inherit = 'mail.compose.message'

notify_followers = fields.Boolean(default=True)

@api.multi
def send_mail(self):
for wizard in self:
wizard = wizard.with_context(
notify_followers=wizard.notify_followers)
super(MailComposeMessage, wizard).send_mail()
return {'type': 'ir.actions.act_window_close'}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="0">
<record model="ir.ui.view" id="email_compose_message_wizard_inherit_form">
<field name="name">mail.compose.message.form (mail_optional_autofollow)</field>
<field name="model">mail.compose.message</field>
<field name="inherit_id" ref="mail.email_compose_message_wizard_form"/>
<field name="arch" type="xml">
<xpath expr="//div[field[@name='partner_ids']]/span[2]" position="before">
<field name="notify_followers" />
</xpath>
<xpath expr="//div[field[@name='partner_ids']]/span[2]" position="inside">
<span attrs="{'invisible': [('notify_followers', '=', True)]}" style="color: red;"> - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to)</span>
</xpath>
</field>
</record>
</data>
</openerp>

0 comments on commit 87e5b71

Please sign in to comment.