From f1515d3987a3fd5a684f843c0d6ba38009c747b9 Mon Sep 17 00:00:00 2001
From: "Laurent Mignon (ACSONE)" <laurent.mignon@acsone.eu>
Date: Tue, 3 Dec 2019 14:29:08 +0100
Subject: [PATCH 1/2] [IMP] mail_activity_board: Direct access to related model
 instance Add a direct access from activity calendar and form views to the
 linked model instance.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Bedore this change, it was not possible to access to the model instance linked to an activity from the calendar view nor from the view opened by clicling on the activity into the calendar

[IMP] mail_activiy_board: Restrict related_model_instance selection to models supporting mail acitvities

Co-Authored-By: Miquel Raïch <miquel.raich@eficent.com>
---
 mail_activity_board/__manifest__.py           |  2 +-
 mail_activity_board/models/mail_activity.py   | 18 ++++++++
 mail_activity_board/readme/CONTRIBUTORS.rst   |  4 ++
 .../tests/test_mail_activity_board.py         |  8 ++++
 .../views/mail_activity_view.xml              | 46 ++++++++++++++++++-
 5 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/mail_activity_board/__manifest__.py b/mail_activity_board/__manifest__.py
index 87e124131..5e6d92b54 100644
--- a/mail_activity_board/__manifest__.py
+++ b/mail_activity_board/__manifest__.py
@@ -8,7 +8,7 @@
     "development_status": "Beta",
     "category": "Social Network",
     "website": "https://github.com/OCA/social",
-    "author": "SDi, David Juaneda, Sodexis, Odoo Community Association (OCA)",
+    "author": "SDi, David Juaneda, Sodexis, ACSONE SA/NV, Odoo Community Association (OCA)",
     "license": "AGPL-3",
     "installable": True,
     "depends": ["calendar", "board"],
diff --git a/mail_activity_board/models/mail_activity.py b/mail_activity_board/models/mail_activity.py
index 8cfd77a70..1862f67d3 100644
--- a/mail_activity_board/models/mail_activity.py
+++ b/mail_activity_board/models/mail_activity.py
@@ -17,6 +17,24 @@ class MailActivity(models.Model):
     calendar_event_id_partner_ids = fields.Many2many(
         related="calendar_event_id.partner_ids", readonly=True
     )
+    related_model_instance = fields.Reference(
+        selection="_selection_related_model_instance",
+        compute="_compute_related_model_instance",
+        string="Document",
+    )
+
+    @api.depends("res_id", "res_model")
+    def _compute_related_model_instance(self):
+        for record in self:
+            ref = False
+            if record.res_id:
+                ref = "{},{}".format(record.res_model, record.res_id)
+            record.related_model_instance = ref
+
+    @api.model
+    def _selection_related_model_instance(self):
+        models = self.env["ir.model"].search([("is_mail_activity", "=", True)])
+        return [(model.model, model.name) for model in models]
 
     def open_origin(self):
         self.ensure_one()
diff --git a/mail_activity_board/readme/CONTRIBUTORS.rst b/mail_activity_board/readme/CONTRIBUTORS.rst
index 5530d759e..adad24ffc 100644
--- a/mail_activity_board/readme/CONTRIBUTORS.rst
+++ b/mail_activity_board/readme/CONTRIBUTORS.rst
@@ -9,3 +9,7 @@
 * `Pesol <https://www.pesol.es>`_:
 
   * Pedro Gonzalez (pedro.gonzalez@pesol.es)
+
+* `ACSONE SA/NV <https://www.acsone.eu>`_
+
+  * Laurent Mignon <laurent.mignon@acsone.eu>
diff --git a/mail_activity_board/tests/test_mail_activity_board.py b/mail_activity_board/tests/test_mail_activity_board.py
index 6aede0dfe..f83d971a3 100644
--- a/mail_activity_board/tests/test_mail_activity_board.py
+++ b/mail_activity_board/tests/test_mail_activity_board.py
@@ -202,3 +202,11 @@ class TestMailActivityBoardMethods(TransactionCase):
 
         for act in acts:
             self.assertIn(act, self.partner_client.activity_ids.ids)
+
+    def test_related_model_instance(self):
+        """This test case checks the direct access from the activity to the
+        linked model instance
+        """
+        self.assertEqual(self.act3.related_model_instance, self.partner_client)
+        self.act3.write({"res_id": False, "res_model": False})
+        self.assertFalse(self.act3.related_model_instance)
diff --git a/mail_activity_board/views/mail_activity_view.xml b/mail_activity_board/views/mail_activity_view.xml
index 29495329d..238ee336c 100644
--- a/mail_activity_board/views/mail_activity_view.xml
+++ b/mail_activity_board/views/mail_activity_view.xml
@@ -4,6 +4,45 @@
     VIEWS
 -->
 
+    <!-- FORM POP
+
+        Add a link to the related model instance to ease navigation
+    -->
+    <record id="mail_activity_view_form_popup" model="ir.ui.view">
+        <field
+            name="name"
+        >mail.activity.view.form.popup (in mail_activity_board)</field>
+        <field name="model">mail.activity</field>
+        <field name="inherit_id" ref="mail.mail_activity_view_form_popup" />
+        <field name="arch" type="xml">
+            <field name="activity_type_id" position="before">
+                <field
+                    name="related_model_instance"
+                    attrs="{'invisible': [('related_model_instance','=', False)]}"
+                />
+            </field>
+        </field>
+    </record>
+
+    <!-- CALENDAR VIEW
+        Add a link to the related model instance to ease navigation
+    -->
+    <record id="mail_activity_view_calendar" model="ir.ui.view">
+        <field
+            name="name"
+        >mail.activity.view.form.calendar (in mail_activity_board)</field>
+        <field name="model">mail.activity</field>
+        <field name="inherit_id" ref="mail.mail_activity_view_calendar" />
+        <field name="arch" type="xml">
+            <field name="res_name" position="before">
+                <field name="related_model_instance" />
+            </field>
+            <field name="res_name" position="attributes">
+                <attribute name="invisible">1</attribute>
+            </field>
+        </field>
+    </record>
+
     <!-- FORM VIEW -->
     <record id="mail_activity_view_form_board" model="ir.ui.view">
         <field name="name">mail.activity.boards.view.form</field>
@@ -88,7 +127,12 @@
                     name="decoration-success"
                 >(date_deadline &gt; current_date)</attribute>
             </xpath>
-
+            <field name="res_name" position="before">
+                <field name="related_model_instance" />
+            </field>
+            <field name="res_name" position="attributes">
+                <attribute name="invisible">1</attribute>
+            </field>
         </field>
     </record>
 

From 055bd44d5c17a5424d0badcf283c06c04cf357bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miquel=20Ra=C3=AFch?= <miquel.raich@forgeflow.com>
Date: Tue, 19 Apr 2022 12:39:24 +0200
Subject: [PATCH 2/2] [IMP] mail_activity_board: direct access from activity
 board form view

---
 mail_activity_board/views/mail_activity_view.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mail_activity_board/views/mail_activity_view.xml b/mail_activity_board/views/mail_activity_view.xml
index 238ee336c..9c3f365e6 100644
--- a/mail_activity_board/views/mail_activity_view.xml
+++ b/mail_activity_board/views/mail_activity_view.xml
@@ -57,7 +57,8 @@
                         class="centre oe_link"
                         nolabel="1"
                     >
-                        <h1><field name="res_name" /></h1>
+                        <field name="res_name" invisible="1" />
+                        <h1><field name="related_model_instance" /></h1>
                     </button>
                     <field name="activity_category" invisible="1" />
                     <field name="res_model" invisible="1" />