Merge PR #517 into 13.0

Signed-off-by JordiBForgeFlow
pull/532/head
OCA-git-bot 2020-03-16 16:38:16 +00:00
commit 996fbeb18f
22 changed files with 582 additions and 0 deletions

View File

@ -0,0 +1,63 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License: AGPL-3
===========================
Restrict follower selection
===========================
This module was written to allow you to restrict the selection of possible followers. For example, if you use the social ERP functions only internally, it makes sense to filter possible followers for being employees. Otherwise, you'll get a quite crowded list of partners to choose from.
Moreover, the module disables the option to automatically add followers that do not meet the domain.
Configuration
=============
To configure this module, you need to go to `System parameters` and adjust `mail_restrict_follower_selection.domain` as you see fit. This restricts followers globally, if you want to restrict only the followers for a certain record type (or have different restrictions for different record types), create a parameter `mail_restrict_follower_selection.domain.$your_model`.
As an example, you could use `[('customer', '=', True)]` to allow only customers to be added as follower - this also is the default.
Note: This module won't change existing followers!
Usage
=====
.. 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/11.0
For further information, please visit:
* 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_restrict_follower_selection%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Holger Brunn <hbrunn@therp.nl>
* Nguyen Tan Phuc <phuc.nt@komit-consulting.com>
* Enric Tobella <etobella@creublanca.es>
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 http://odoo-community.org.

View File

@ -0,0 +1,5 @@
# Copyright (C) 2015 Therp BV <http://therp.nl>
# Copyright (C) 2017 Komit <http://www.komit-consulting.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models

View File

@ -0,0 +1,15 @@
# Copyright (C) 2015 Therp BV <http://therp.nl>
# Copyright (C) 2017 Komit <http://www.komit-consulting.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Restrict follower selection",
"version": "13.0.1.0.0",
"author": "Therp BV,Creu Blanca,Odoo Community Association (OCA)",
"license": "AGPL-3",
"category": "Social Network",
"summary": "Define a domain from which followers can be selected",
"depends": ["mail"],
"data": ["data/ir_config_parameter.xml", "data/ir_actions.xml"],
"installable": True,
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<act_window id="action_setup" res_model="ir.config_parameter"
name="Configure the restriction on followers" view_mode="form" />
<record id="action_setup" model="ir.actions.act_window">
<field name="res_id" ref="parameter_domain" />
</record>
<record id="todo_setup" model="ir.actions.todo">
<field name="name">Configure the restriction on followers</field>
<field name="action_id" ref="action_setup" />
</record>
</odoo>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo noupdate="1">
<record id="parameter_domain" model="ir.config_parameter">
<field name="key">mail_restrict_follower_selection.domain</field>
<field name="value">[('category_id.name', '=', 'Employees')]</field>
</record>
</odoo>

View File

@ -0,0 +1,37 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_restrict_follower_selection
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2018-12-15 14:58+0000\n"
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.3\n"
#. module: mail_restrict_follower_selection
#: model:ir.actions.act_window,name:mail_restrict_follower_selection.action_setup
msgid "Configure the restriction on followers"
msgstr "Beschränkung der Abonnenten konfigurieren"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_followers
msgid "Document Followers"
msgstr "Abonnenten des Dokuments"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_wizard_invite
msgid "Invite wizard"
msgstr "Assistent zum Einladen von Abonnenten"

View File

@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_restrict_follower_selection
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: social (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-30 16:56+0000\n"
"PO-Revision-Date: 2015-09-30 16:56+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: English (http://www.transifex.com/oca/OCA-social-8-0/language/"
"en/)\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mail_restrict_follower_selection
#: model:ir.actions.act_window,name:mail_restrict_follower_selection.action_setup
msgid "Configure the restriction on followers"
msgstr "Configure the restriction on followers"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_followers
msgid "Document Followers"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_wizard_invite
msgid "Invite wizard"
msgstr "Invite wizard"

View File

@ -0,0 +1,40 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_restrict_follower_selection
#
# Translators:
# Quentin THEURET <odoo@kerpeo.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-22 09:45+0000\n"
"PO-Revision-Date: 2018-06-18 09:40+0000\n"
"Last-Translator: c2cdidier <didier.donze@camptocamp.com>\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.0.1\n"
#. module: mail_restrict_follower_selection
#: model:ir.actions.act_window,name:mail_restrict_follower_selection.action_setup
msgid "Configure the restriction on followers"
msgstr "Configurer les restrictions sur les abonnés"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_followers
msgid "Document Followers"
msgstr "Suiveurs du document"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_wizard_invite
msgid "Invite wizard"
msgstr "Assistant d'invitation"

View File

@ -0,0 +1,40 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_restrict_follower_selection
#
# Translators:
# Bole <bole@dajmi5.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-29 14:24+0000\n"
"PO-Revision-Date: 2016-11-29 14:24+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2016\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: mail_restrict_follower_selection
#: model:ir.actions.act_window,name:mail_restrict_follower_selection.action_setup
msgid "Configure the restriction on followers"
msgstr "Postavi ograničenja na pratitelje"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_followers
msgid "Document Followers"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_wizard_invite
msgid "Invite wizard"
msgstr "Čarobnjak za pozivnce"

View File

@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_restrict_follower_selection
#
# Translators:
# Marius Marolla <mariusmarolla@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-17 01:02+0000\n"
"PO-Revision-Date: 2017-05-17 01:02+0000\n"
"Last-Translator: Marius Marolla <mariusmarolla@gmail.com>, 2017\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mail_restrict_follower_selection
#: model:ir.actions.act_window,name:mail_restrict_follower_selection.action_setup
msgid "Configure the restriction on followers"
msgstr "Imposta restrizioni sui follower"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_followers
msgid "Document Followers"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_wizard_invite
msgid "Invite wizard"
msgstr "Wizard Creazione Invito"

View File

@ -0,0 +1,35 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_restrict_follower_selection
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: mail_restrict_follower_selection
#: model:ir.actions.act_window,name:mail_restrict_follower_selection.action_setup
msgid "Configure the restriction on followers"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_followers
msgid "Document Followers"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_wizard_invite
msgid "Invite wizard"
msgstr ""

View File

@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_restrict_follower_selection
#
# Translators:
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015
msgid ""
msgstr ""
"Project-Id-Version: social (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-30 16:56+0000\n"
"PO-Revision-Date: 2015-10-01 13:00+0000\n"
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>\n"
"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-social-8-0/"
"language/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. module: mail_restrict_follower_selection
#: model:ir.actions.act_window,name:mail_restrict_follower_selection.action_setup
msgid "Configure the restriction on followers"
msgstr "Nastavitev omejitev za sledilce"
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_followers
msgid "Document Followers"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mail_restrict_follower_selection
#: model:ir.model,name:mail_restrict_follower_selection.model_mail_wizard_invite
msgid "Invite wizard"
msgstr "Čarovnik za vabila"

View File

@ -0,0 +1,7 @@
# Copyright (C) 2015 Therp BV <http://therp.nl>
# Copyright (C) 2017 Komit <http://www.komit-consulting.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import mail_followers
from . import mail_wizard_invite
from . import mail_thread

View File

@ -0,0 +1,43 @@
# Copyright (C) 2018 Creu Blanca
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
from odoo.tools.safe_eval import safe_eval
class MailFollowers(models.Model):
_inherit = "mail.followers"
def _add_followers(
self,
res_model,
res_ids,
partner_ids,
partner_subtypes,
channel_ids,
channel_subtypes,
check_existing=False,
existing_policy="skip",
):
domain = self.env[
"mail.wizard.invite"
]._mail_restrict_follower_selection_get_domain()
partners = self.env["res.partner"].search(
[("id", "in", partner_ids)] + safe_eval(domain)
)
_res_ids = res_ids.copy() or [0]
new, update = super()._add_followers(
res_model,
res_ids,
partners.ids,
partner_subtypes,
channel_ids,
channel_subtypes,
check_existing=check_existing,
existing_policy=existing_policy,
)
for res_id in _res_ids:
if res_id not in new:
new.setdefault(res_id, list())
return new, update

View File

@ -0,0 +1,26 @@
from odoo import models
from odoo.tools.safe_eval import safe_eval
class MailThread(models.AbstractModel):
_inherit = "mail.thread"
def _message_add_suggested_recipient(
self, result, partner=None, email=None, reason=""
):
result = super(MailThread, self)._message_add_suggested_recipient(
result, partner=partner, email=email, reason=reason
)
domain = self.env[
"mail.wizard.invite"
]._mail_restrict_follower_selection_get_domain()
eval_domain = safe_eval(domain)
for key in result:
for partner_id, email, reason in result[key]:
if partner_id:
partner = self.env["res.partner"].search(
[("id", "=", partner_id)] + eval_domain
)
if not partner:
result[key].remove((partner_id, email, reason))
return result

View File

@ -0,0 +1,40 @@
# Copyright (C) 2015 Therp BV <http://therp.nl>
# Copyright (C) 2017 Komit <http://www.komit-consulting.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from lxml import etree
from odoo import api, models
class MailWizardInvite(models.TransientModel):
_inherit = "mail.wizard.invite"
@api.model
def _mail_restrict_follower_selection_get_domain(self):
parameter_name = "mail_restrict_follower_selection.domain"
return (
self.env["ir.config_parameter"]
.sudo()
.get_param(
"{}.{}".format(
parameter_name, self.env.context.get("default_res_model")
),
self.env["ir.config_parameter"]
.sudo()
.get_param(parameter_name, default="[]"),
)
)
@api.model
def fields_view_get(
self, view_id=None, view_type="form", toolbar=False, submenu=False
):
result = super(MailWizardInvite, self).fields_view_get(
view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu
)
arch = etree.fromstring(result["arch"])
for field in arch.xpath('//field[@name="partner_ids"]'):
field.attrib["domain"] = self._mail_restrict_follower_selection_get_domain()
result["arch"] = etree.tostring(arch)
return result

View File

@ -0,0 +1,11 @@
To configure this module, you need to go to `System parameters` and adjust
`mail_restrict_follower_selection.domain` as you see fit. This restricts
followers globally, if you want to restrict only the followers for a certain
record type (or have different restrictions for different record types),
create a parameter `mail_restrict_follower_selection.domain.$your_model`.
As an example, you could use `[('category_id.name', '=', 'Employees')]` to allow
only contacts with 'Employees' tag to be added as follower - this also is
the default.
Note: This module won't change existing followers!

View File

@ -0,0 +1,3 @@
* Holger Brunn <hbrunn@therp.nl>
* Nguyen Tan Phuc <phuc.nt@komit-consulting.com>
* Enric Tobella <etobella@creublanca.es>

View File

@ -0,0 +1,7 @@
This module was written to allow you to restrict the selection of possible
followers. For example, if you use the social ERP functions only internally,
it makes sense to filter possible followers for being employees. Otherwise,
you'll get a quite crowded list of partners to choose from.
Moreover, the module disables the option to automatically add followers that
do not meet the domain.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,5 @@
# Copyright (C) 2015 Therp BV <http://therp.nl>
# Copyright (C) 2017 Komit <http://www.komit-consulting.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import test_mail_restrict_follower_selection

View File

@ -0,0 +1,67 @@
# Copyright (C) 2015 Therp BV <http://therp.nl>
# Copyright (C) 2017 Komit <http://www.komit-consulting.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from lxml import etree
from odoo.tests.common import TransactionCase
class TestMailRestrictFollowerSelection(TransactionCase):
def setUp(self):
super().setUp()
self.category_employees = self.env["res.partner.category"].create(
{"name": "Employees"}
)
self.partner = self.env["res.partner"].create(
{
"name": "Partner",
"category_id": self.category_employees,
"email": "test@test.com",
}
)
def test_fields_view_get(self):
result = self.env["mail.wizard.invite"].fields_view_get(view_type="form")
for field in etree.fromstring(result["arch"]).xpath(
'//field[@name="partner_ids"]'
):
self.assertTrue(field.get("domain"))
def send_action(self):
compose = (
self.env["mail.compose.message"]
.with_context(
{
"mail_post_autofollow": True,
"default_composition_mode": "comment",
"default_model": "res.partner",
"default_use_active_domain": True,
}
)
.create(
{
"subject": "From Composer Test",
"body": "${object.description}",
"res_id": self.partner.id,
"partner_ids": [(4, id) for id in self.partner.ids],
}
)
)
self.assertEqual(compose.partner_ids, self.partner)
compose.action_send_mail()
def test_followers_meet(self):
self.partner.write({"category_id": self.category_employees})
self.send_action()
self.assertIn(
self.partner, self.partner.message_follower_ids.mapped("partner_id")
)
def test_followers_not_meet(self):
self.partner.write({"category_id": False})
self.send_action()
self.assertNotIn(
self.partner, self.partner.message_follower_ids.mapped("partner_id")
)