Skip to content

Commit

Permalink
[MIG] mail_activity_done: Migration to 18.0
Browse files Browse the repository at this point in the history
* Remove overrides that in Odoo 18 do filter on active records by default.
* Refactor tests to use setUpClass.
* Improve tests.
* Adapt view override selectors to upstream changes.

Co-authored-by: Stefan Rijnhart <[email protected]>
Co-authored-by: Jesus Ventosinos <[email protected]>
  • Loading branch information
3 people committed Feb 12, 2025
1 parent 495f95e commit 9e8cb5c
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 96 deletions.
1 change: 1 addition & 0 deletions mail_activity_done/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ Contributors
- Manuel Regidor <[email protected]> (https://www.sygel.es)
- Bernat Puig <[email protected]>
(`www.forgeflow.com <http://www.forgeflow.com>`__)
- Stefan Rijnhart <[email protected]>

Maintainers
-----------
Expand Down
2 changes: 1 addition & 1 deletion mail_activity_done/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
{
"name": "Mail Activity Done",
"version": "17.0.1.0.0",
"version": "18.0.1.0.0",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"license": "LGPL-3",
"category": "Discuss",
Expand Down
1 change: 0 additions & 1 deletion mail_activity_done/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
from . import mail_activity
from . import res_users
9 changes: 0 additions & 9 deletions mail_activity_done/models/mail_activity.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Copyright 2018-22 ForgeFlow <http://www.forgeflow.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo import api, fields, models
from odoo.osv import expression

delete_sentinel = object()

Expand Down Expand Up @@ -82,11 +81,3 @@ class MailActivityMixin(models.AbstractModel):
activity_ids = fields.One2many(
domain=lambda self: [("res_model", "=", self._name), ("active", "=", True)]
)

def _read_progress_bar(self, domain, group_by, progress_bar):
"""
Exclude completed activities from progress bar result.
Pass an extra domain to super to filter out records with only done activities.
"""
domain = expression.AND([domain, [("activity_ids.done", "=", False)]])
return super()._read_progress_bar(domain, group_by, progress_bar)
59 changes: 0 additions & 59 deletions mail_activity_done/models/res_users.py

This file was deleted.

1 change: 1 addition & 0 deletions mail_activity_done/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
- Radovan Skolnik \<<[email protected]>\> (<https://www.kema.sk>)
- Manuel Regidor \<<[email protected]>\> (<https://www.sygel.es>)
- Bernat Puig \<<[email protected]>\> (www.forgeflow.com)
- Stefan Rijnhart \<<[email protected]>\>
1 change: 1 addition & 0 deletions mail_activity_done/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,7 @@ <h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<li>Manuel Regidor &lt;<a class="reference external" href="mailto:manuel.regidor&#64;sygel.es">manuel.regidor&#64;sygel.es</a>&gt; (<a class="reference external" href="https://www.sygel.es">https://www.sygel.es</a>)</li>
<li>Bernat Puig &lt;<a class="reference external" href="mailto:bernat.puig&#64;forgeflow.com">bernat.puig&#64;forgeflow.com</a>&gt;
(<a class="reference external" href="http://www.forgeflow.com">www.forgeflow.com</a>)</li>
<li>Stefan Rijnhart &lt;<a class="reference external" href="mailto:stefan&#64;opener.amsterdam">stefan&#64;opener.amsterdam</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
Expand Down
75 changes: 55 additions & 20 deletions mail_activity_done/tests/test_mail_activity_done.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,28 @@


class TestMailActivityDoneMethods(TransactionCase):
def setUp(self):
super().setUp()
@classmethod
def setUpClass(cls):
super().setUpClass()

self.employee = self.env["res.users"].create(
cls.employee = cls.env["res.users"].create(
{
"company_id": self.env.ref("base.main_company").id,
"company_id": cls.env.ref("base.main_company").id,
"name": "Test User",
"login": "testuser",
"groups_id": [(6, 0, [self.env.ref("base.group_user").id])],
"groups_id": [(6, 0, [cls.env.ref("base.group_user").id])],
}
)
activity_type = self.env["mail.activity.type"].search(
activity_type = cls.env["mail.activity.type"].search(
[("name", "=", "Meeting")], limit=1
)
self.act1 = self.env["mail.activity"].create(
cls.act1 = cls.env["mail.activity"].create(
{
"activity_type_id": activity_type.id,
"res_id": self.env.ref("base.res_partner_1").id,
"res_id": cls.env.ref("base.res_partner_1").id,
"res_model": "res.partner",
"res_model_id": self.env["ir.model"]._get("res.partner").id,
"user_id": self.employee.id,
"res_model_id": cls.env["ir.model"]._get("res.partner").id,
"user_id": cls.employee.id,
"date_deadline": date.today(),
}
)
Expand All @@ -36,23 +37,57 @@ def test_mail_activity_done(self):
self.assertTrue(self.act1.exists())
self.assertEqual(self.act1.state, "done")

def test_systray_get_activities(self):
act_count = self.employee.with_user(self.employee).systray_get_activities()
def test_get_activity_groups(self):
act_count = self.employee.with_user(self.employee)._get_activity_groups()
self.assertEqual(
len(act_count), 1, "Number of activities should be equal to one"
)
self.assertEqual(act_count[0]["total_count"], 1)
self.act1._action_done()
self.act1.flush_recordset()
act_count = self.employee.with_user(self.employee)._get_activity_groups()
self.assertFalse(act_count)

def test_read_progress_bar(self):
res_partner = self.env["res.partner"].browse(self.act1.res_model_id)
partner = self.env["res.partner"].browse(self.act1.res_id)
params = {
"domain": [],
"domain": [("id", "=", partner.id)],
"group_by": "id",
"progress_bar": {"field": "activity_state"},
"progress_bar": {
"field": "activity_state",
"colors": {
"overdue": "danger",
"today": "warning",
"planned": "success",
},
},
}
result = res_partner._read_progress_bar(**params)
self.assertEqual(result[0]["__count"], 1)
# The activity is present in the progress bar
self.assertEqual(
partner.read_progress_bar(**params),
{str(partner.id): {"overdue": 0, "today": 1, "planned": 0}},
)
# After marking the activity as done, it is removed from the progress bar
self.act1._action_done()
self.act1.flush_recordset()
self.assertEqual(
partner.read_progress_bar(**params),
{str(partner.id): {"overdue": 0, "today": 0, "planned": 0}},
)

def test_activity_state_search(self):
today_activities = self.env["res.partner"].search(
[("activity_state", "=", "today")]
)
self.assertEqual(len(today_activities), 1)
overdue_activities = self.env["res.partner"].search(
[("activity_state", "=", "overdue")]
)
self.assertFalse(overdue_activities)

# After the activity is marked as done, the activity state is unmarked
self.act1._action_done()
self.assertEqual(self.act1.state, "done")
result = res_partner._read_progress_bar(**params)
self.assertEqual(len(result), 0)
today_activities = self.env["res.partner"].search(
[("activity_state", "=", "today")]
)
self.assertFalse(today_activities)
12 changes: 6 additions & 6 deletions mail_activity_done/views/mail_activity_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,17 @@
domain="[('active', '=', False), ('state', '=', 'done')]"
/>
</field>
<filter name="activities_overdue" position="attributes">
<filter name="filter_date_deadline_past" position="attributes">
<attribute
name="domain"
>[('date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]</attribute>
</filter>
<filter name="activities_today" position="attributes">
<filter name="filter_date_deadline_today" position="attributes">
<attribute
name="domain"
>[('date_deadline', '=', context_today().strftime('%Y-%m-%d'))]</attribute>
</filter>
<filter name="activities_upcoming_all" position="attributes">
<filter name="filter_date_deadline_future" position="attributes">
<attribute
name="domain"
>[('date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))]</attribute>
Expand Down Expand Up @@ -88,23 +88,23 @@
</record>

<record id="mail_activity_view_tree" model="ir.ui.view">
<field name="name">mail.activity.view.tree</field>
<field name="name">mail.activity.view.list</field>
<field name="model">mail.activity</field>
<field name="inherit_id" ref="mail.mail_activity_view_tree" />
<field name="arch" type="xml">
<field name="date_deadline" position="after">
<field name="state" />
<field name="date_done" readonly="1" />
</field>
<tree position="attributes">
<list position="attributes">
<attribute name="decoration-muted">state == 'done'</attribute>
<attribute
name="decoration-danger"
>date_deadline &lt; current_date and state != 'done'</attribute>
<attribute
name="decoration-success"
>date_deadline == current_date and state != 'done'</attribute>
</tree>
</list>
</field>
</record>

Expand Down

0 comments on commit 9e8cb5c

Please sign in to comment.