Skip to content

Commit

Permalink
Merge commit 'refs/pull/923/head' of https://github.com/oca/social in…
Browse files Browse the repository at this point in the history
…to 15.0-994
  • Loading branch information
docker-odoo committed Jan 2, 2023
2 parents fbab7f1 + f5d871c commit cae5724
Show file tree
Hide file tree
Showing 19 changed files with 291 additions and 0 deletions.
75 changes: 75 additions & 0 deletions mail_partner_forwarding/README.rst
@@ -0,0 +1,75 @@
=======================
Partner Mail Forwarding
=======================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
:target: https://github.com/OCA/social/tree/13.0/mail_debrand
:alt: OCA/social
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_debrand
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/205/13.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to select a related partner (called "Forwarding Partner") in each partner in order to send all the notifications
to the Forwarding Partner.


**Table of contents**

.. contents::
:local:

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 <https://github.com/OCA/social/issues/new?body=module:%20mail_debrand%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* AdHoc SA

Contributors
~~~~~~~~~~~~

* Nicolás Mac Rouillon <nmr@adhoc.com.ar>

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

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

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.

This module is part of the `OCA/social <https://github.com/OCA/social/tree/13.0/mail_backup_user>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions mail_partner_forwarding/__init__.py
@@ -0,0 +1 @@
from . import models
17 changes: 17 additions & 0 deletions mail_partner_forwarding/__manifest__.py
@@ -0,0 +1,17 @@
# Copyright 2022 AdHoc SA - Pablo Paez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

{
"name": "Partner Mail Forwarding",
"summary": "Forwarding notifications for partners",
"version": "15.0.1.0.0",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": "ADHOC SA, Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"depends": ["mail"],
"data": ["views/res_user_views.xml", "views/res_partner_views.xml"],
"development_status": "Production/Stable",
"maintainers": [],
}
3 changes: 3 additions & 0 deletions mail_partner_forwarding/models/__init__.py
@@ -0,0 +1,3 @@
from . import res_partner
from . import res_user
from . import mail_thread
43 changes: 43 additions & 0 deletions mail_partner_forwarding/models/mail_thread.py
@@ -0,0 +1,43 @@
from odoo import models


class MailThread(models.AbstractModel):
_inherit = "mail.thread"

def _notify_compute_recipients(self, message, msg_vals):
"""Inherit this method to add in the list of partners to be notify
the forwarding_partner_id of any partners in the list"""
recipient_data = super()._notify_compute_recipients(message, msg_vals)
if not recipient_data:
return recipient_data
partner_dict = {x.get("id"): x for x in recipient_data}
forwarded_partner_ids = []
# for each partner being notified we check if it has a
# forwarding_partner_id configured that is not being notified yet
for partner in (
self.env["res.partner"]
.sudo()
.with_context(prefetch_fields=False)
.browse(partner_dict.keys())
):
if (
partner.forwarding_partner_id
and partner.forwarding_partner_id.id not in partner_dict.keys()
and partner.forwarding_partner_id.id not in forwarded_partner_ids
):
forwarded_partner_ids.append(partner.forwarding_partner_id.id)
data = partner_dict[partner.id].copy()
notif = (
partner.forwarding_partner_id.user_ids
and partner.forwarding_partner_id.user_ids[0].notification_type
or "email"
)
data.update(
{
"id": partner.forwarding_partner_id.id,
"share": partner.partner_share,
"notif": notif,
}
)
recipient_data.append(data)
return recipient_data
12 changes: 12 additions & 0 deletions mail_partner_forwarding/models/res_partner.py
@@ -0,0 +1,12 @@
from odoo import fields, models


class ResPartner(models.Model):
_inherit = "res.partner"

forwarding_partner_id = fields.Many2one(
"res.partner",
string="Forwarding Partner",
help="Messages will be forwarded only for partners that are followers but no "
"partners being notify because they belong to channel that is following the thread",
)
17 changes: 17 additions & 0 deletions mail_partner_forwarding/models/res_user.py
@@ -0,0 +1,17 @@
from odoo import fields, models


class ResUsers(models.Model):
_inherit = "res.users"

forwarding_partner_id = fields.Many2one(
related="partner_id.forwarding_partner_id", readonly=False
)

@property
def SELF_WRITEABLE_FIELDS(self):
return super().SELF_WRITEABLE_FIELDS + ["forwarding_partner_id"]

@property
def SELF_READABLE_FIELDS(self):
return super().SELF_READABLE_FIELDS + ["forwarding_partner_id"]
1 change: 1 addition & 0 deletions mail_partner_forwarding/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
* Nicolás Mac Rouillon <nmr@adhoc.com.ar>
1 change: 1 addition & 0 deletions mail_partner_forwarding/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
This module allows to select a related user (called "Forwarding partner") in each partner in order to send all the notifications to the Forwarding partner.
4 changes: 4 additions & 0 deletions mail_partner_forwarding/readme/HISTORY.rst
@@ -0,0 +1,4 @@
13.0.1.0.0 (2022-01-03)
~~~~~~~~~~~~~~~~~~~~~~~

* [NEW] Module in v13.
5 changes: 5 additions & 0 deletions mail_partner_forwarding/readme/USAGE.rst
@@ -0,0 +1,5 @@
To use this module, you need to:

* Install it.
* Set a Forwarding partner in your partner.
* Your Forwarding partner also will be notify of your notifications
1 change: 1 addition & 0 deletions mail_partner_forwarding/tests/__init__.py
@@ -0,0 +1 @@
from . import test_mail_forwarding
1 change: 1 addition & 0 deletions mail_partner_forwarding/tests/models/__init__.py
@@ -0,0 +1 @@
from . import fake_order
13 changes: 13 additions & 0 deletions mail_partner_forwarding/tests/models/fake_order.py
@@ -0,0 +1,13 @@
# Copyright 2021 Camptocamp (http://www.camptocamp.com).
# @author Iván Todorovich <ivan.todorovich@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import fields, models


class FakeOrder(models.Model):
_name = "fake.order"
_inherit = "mail.thread"
_description = "Fake sale.order like model"

partner_id = fields.Many2one("res.partner", required=True)
46 changes: 46 additions & 0 deletions mail_partner_forwarding/tests/test_mail_forwarding.py
@@ -0,0 +1,46 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo_test_helper import FakeModelLoader

from odoo import _
from odoo.tests.common import SavepointCase, tagged


@tagged("post_install", "-at_install")
class TestMailForwarding(SavepointCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Setup env
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
# Load fake order model
cls.loader = FakeModelLoader(cls.env, cls.__module__)
cls.loader.backup_registry()
from .models.fake_order import FakeOrder

cls.loader.update_registry((FakeOrder,))
cls.fake_order_model = cls.env["ir.model"].search(
[("model", "=", "fake.order")]
)
# Partner To forward
cls.partner_1 = cls.env.ref("base.user_demo").partner_id
cls.partner_2 = cls.env.ref("base.user_admin").partner_id

# Configurate in the user setting the user to be forwarding
cls.partner_2.forwarding_partner_id = cls.partner_1
# Empty fake.order
cls.order = cls.env["fake.order"].create({"partner_id": cls.partner_2.id})

@classmethod
def tearDownClass(cls):
cls.loader.restore_registry()
return super().tearDownClass()

def test_message_post_forwarding(self):
"""Test forwarding when send a message for the user"""
self.order.message_post(
body=_("Test"),
message_type="comment",
subtype="mail.mt_comment",
partner_ids=[self.partner_2.id],
)
16 changes: 16 additions & 0 deletions mail_partner_forwarding/views/res_partner_views.xml
@@ -0,0 +1,16 @@
<!-- Copyright 2022 AdHoc SA
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<odoo>

<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form.forwarding</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<field name="website" position="before">
<field name="forwarding_partner_id" />
</field>
</field>
</record>

</odoo>
28 changes: 28 additions & 0 deletions mail_partner_forwarding/views/res_user_views.xml
@@ -0,0 +1,28 @@
<!-- Copyright 2022 AdHoc SA
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<odoo>

<record id="view_users_form_mail" model="ir.ui.view">
<field name="name">res.users.form.user.forwarding</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='login']//.." position="after">
<label for="forwarding_partner_id" />
<field name="forwarding_partner_id" />
</xpath>
</field>
</record>

<record id="view_users_form_mail_preferences" model="ir.ui.view">
<field name="name">res.users.form.user.forwarding.preferences</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form_simple_modif" />
<field name="arch" type="xml">
<field name="email" position="after">
<field name="forwarding_partner_id" readonly="0" />
</field>
</field>
</record>

</odoo>
6 changes: 6 additions & 0 deletions setup/mail_partner_forwarding/setup.py
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

0 comments on commit cae5724

Please sign in to comment.