Skip to content

Commit eedfe64

Browse files
achuliiStefanRijnhartjesusVMayor
committed
[MIG] mail_activity_done: Migration to 18.0
* 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]>
1 parent 495f95e commit eedfe64

File tree

9 files changed

+65
-96
lines changed

9 files changed

+65
-96
lines changed

mail_activity_done/README.rst

+1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ Contributors
7979
- Manuel Regidor <[email protected]> (https://www.sygel.es)
8080
- Bernat Puig <[email protected]>
8181
(`www.forgeflow.com <http://www.forgeflow.com>`__)
82+
- Stefan Rijnhart <[email protected]>
8283

8384
Maintainers
8485
-----------

mail_activity_done/__manifest__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
33
{
44
"name": "Mail Activity Done",
5-
"version": "17.0.1.0.0",
5+
"version": "18.0.1.0.0",
66
"author": "ForgeFlow, Odoo Community Association (OCA)",
77
"license": "LGPL-3",
88
"category": "Discuss",

mail_activity_done/models/__init__.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
from . import mail_activity
2-
from . import res_users

mail_activity_done/models/mail_activity.py

-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Copyright 2018-22 ForgeFlow <http://www.forgeflow.com>
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
33
from odoo import api, fields, models
4-
from odoo.osv import expression
54

65
delete_sentinel = object()
76

@@ -82,11 +81,3 @@ class MailActivityMixin(models.AbstractModel):
8281
activity_ids = fields.One2many(
8382
domain=lambda self: [("res_model", "=", self._name), ("active", "=", True)]
8483
)
85-
86-
def _read_progress_bar(self, domain, group_by, progress_bar):
87-
"""
88-
Exclude completed activities from progress bar result.
89-
Pass an extra domain to super to filter out records with only done activities.
90-
"""
91-
domain = expression.AND([domain, [("activity_ids.done", "=", False)]])
92-
return super()._read_progress_bar(domain, group_by, progress_bar)

mail_activity_done/models/res_users.py

-59
This file was deleted.

mail_activity_done/readme/CONTRIBUTORS.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
- Radovan Skolnik \<<[email protected]>\> (<https://www.kema.sk>)
66
- Manuel Regidor \<<[email protected]>\> (<https://www.sygel.es>)
77
- Bernat Puig \<<[email protected]>\> (www.forgeflow.com)
8+
- Stefan Rijnhart \<<[email protected]>\>

mail_activity_done/static/description/index.html

+1
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ <h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
426426
<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>
427427
<li>Bernat Puig &lt;<a class="reference external" href="mailto:bernat.puig&#64;forgeflow.com">bernat.puig&#64;forgeflow.com</a>&gt;
428428
(<a class="reference external" href="http://www.forgeflow.com">www.forgeflow.com</a>)</li>
429+
<li>Stefan Rijnhart &lt;<a class="reference external" href="mailto:stefan&#64;opener.amsterdam">stefan&#64;opener.amsterdam</a>&gt;</li>
429430
</ul>
430431
</div>
431432
<div class="section" id="maintainers">

mail_activity_done/tests/test_mail_activity_done.py

+55-20
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,28 @@
66

77

88
class TestMailActivityDoneMethods(TransactionCase):
9-
def setUp(self):
10-
super().setUp()
9+
@classmethod
10+
def setUpClass(cls):
11+
super().setUpClass()
1112

12-
self.employee = self.env["res.users"].create(
13+
cls.user = cls.env["res.users"].create(
1314
{
14-
"company_id": self.env.ref("base.main_company").id,
15+
"company_id": cls.env.ref("base.main_company").id,
1516
"name": "Test User",
1617
"login": "testuser",
17-
"groups_id": [(6, 0, [self.env.ref("base.group_user").id])],
18+
"groups_id": [(6, 0, [cls.env.ref("base.group_user").id])],
1819
}
1920
)
20-
activity_type = self.env["mail.activity.type"].search(
21+
activity_type = cls.env["mail.activity.type"].search(
2122
[("name", "=", "Meeting")], limit=1
2223
)
23-
self.act1 = self.env["mail.activity"].create(
24+
cls.act1 = cls.env["mail.activity"].create(
2425
{
2526
"activity_type_id": activity_type.id,
26-
"res_id": self.env.ref("base.res_partner_1").id,
27+
"res_id": cls.env.ref("base.res_partner_1").id,
2728
"res_model": "res.partner",
28-
"res_model_id": self.env["ir.model"]._get("res.partner").id,
29-
"user_id": self.employee.id,
29+
"res_model_id": cls.env["ir.model"]._get("res.partner").id,
30+
"user_id": cls.user.id,
3031
"date_deadline": date.today(),
3132
}
3233
)
@@ -36,23 +37,57 @@ def test_mail_activity_done(self):
3637
self.assertTrue(self.act1.exists())
3738
self.assertEqual(self.act1.state, "done")
3839

39-
def test_systray_get_activities(self):
40-
act_count = self.employee.with_user(self.employee).systray_get_activities()
40+
def test_get_activity_groups(self):
41+
act_count = self.user.with_user(self.user)._get_activity_groups()
4142
self.assertEqual(
4243
len(act_count), 1, "Number of activities should be equal to one"
4344
)
45+
self.assertEqual(act_count[0]["total_count"], 1)
46+
self.act1._action_done()
47+
self.act1.flush_recordset()
48+
act_count = self.user.with_user(self.user)._get_activity_groups()
49+
self.assertFalse(act_count)
4450

4551
def test_read_progress_bar(self):
46-
res_partner = self.env["res.partner"].browse(self.act1.res_model_id)
52+
partner = self.env["res.partner"].browse(self.act1.res_id)
4753
params = {
48-
"domain": [],
54+
"domain": [("id", "=", partner.id)],
4955
"group_by": "id",
50-
"progress_bar": {"field": "activity_state"},
56+
"progress_bar": {
57+
"field": "activity_state",
58+
"colors": {
59+
"overdue": "danger",
60+
"today": "warning",
61+
"planned": "success",
62+
},
63+
},
5164
}
52-
result = res_partner._read_progress_bar(**params)
53-
self.assertEqual(result[0]["__count"], 1)
65+
# The activity is present in the progress bar
66+
self.assertEqual(
67+
partner.read_progress_bar(**params),
68+
{str(partner.id): {"overdue": 0, "today": 1, "planned": 0}},
69+
)
70+
# After marking the activity as done, it is removed from the progress bar
71+
self.act1._action_done()
72+
self.act1.flush_recordset()
73+
self.assertEqual(
74+
partner.read_progress_bar(**params),
75+
{str(partner.id): {"overdue": 0, "today": 0, "planned": 0}},
76+
)
5477

78+
def test_activity_state_search(self):
79+
today_activities = self.env["res.partner"].search(
80+
[("activity_state", "=", "today")]
81+
)
82+
self.assertEqual(len(today_activities), 1)
83+
overdue_activities = self.env["res.partner"].search(
84+
[("activity_state", "=", "overdue")]
85+
)
86+
self.assertFalse(overdue_activities)
87+
88+
# After the activity is marked as done, the activity state is unmarked
5589
self.act1._action_done()
56-
self.assertEqual(self.act1.state, "done")
57-
result = res_partner._read_progress_bar(**params)
58-
self.assertEqual(len(result), 0)
90+
today_activities = self.env["res.partner"].search(
91+
[("activity_state", "=", "today")]
92+
)
93+
self.assertFalse(today_activities)

mail_activity_done/views/mail_activity_views.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@
3434
domain="[('active', '=', False), ('state', '=', 'done')]"
3535
/>
3636
</field>
37-
<filter name="activities_overdue" position="attributes">
37+
<filter name="filter_date_deadline_past" position="attributes">
3838
<attribute
3939
name="domain"
4040
>[('date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]</attribute>
4141
</filter>
42-
<filter name="activities_today" position="attributes">
42+
<filter name="filter_date_deadline_today" position="attributes">
4343
<attribute
4444
name="domain"
4545
>[('date_deadline', '=', context_today().strftime('%Y-%m-%d'))]</attribute>
4646
</filter>
47-
<filter name="activities_upcoming_all" position="attributes">
47+
<filter name="filter_date_deadline_future" position="attributes">
4848
<attribute
4949
name="domain"
5050
>[('date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))]</attribute>
@@ -88,23 +88,23 @@
8888
</record>
8989

9090
<record id="mail_activity_view_tree" model="ir.ui.view">
91-
<field name="name">mail.activity.view.tree</field>
91+
<field name="name">mail.activity.view.list</field>
9292
<field name="model">mail.activity</field>
9393
<field name="inherit_id" ref="mail.mail_activity_view_tree" />
9494
<field name="arch" type="xml">
9595
<field name="date_deadline" position="after">
9696
<field name="state" />
9797
<field name="date_done" readonly="1" />
9898
</field>
99-
<tree position="attributes">
99+
<list position="attributes">
100100
<attribute name="decoration-muted">state == 'done'</attribute>
101101
<attribute
102102
name="decoration-danger"
103103
>date_deadline &lt; current_date and state != 'done'</attribute>
104104
<attribute
105105
name="decoration-success"
106106
>date_deadline == current_date and state != 'done'</attribute>
107-
</tree>
107+
</list>
108108
</field>
109109
</record>
110110

0 commit comments

Comments
 (0)