Skip to content

Commit 930b3d0

Browse files
[MIG] document_page_approval: Migration to 19.0
1 parent 6c40c37 commit 930b3d0

7 files changed

Lines changed: 66 additions & 46 deletions

File tree

document_page_approval/README.rst

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ Document Page Approval
2121
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
2222
:alt: License: AGPL-3
2323
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github
24-
:target: https://github.com/OCA/knowledge/tree/18.0/document_page_approval
24+
:target: https://github.com/OCA/knowledge/tree/19.0/document_page_approval
2525
:alt: OCA/knowledge
2626
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
27-
:target: https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_approval
27+
:target: https://translation.odoo-community.org/projects/knowledge-19-0/knowledge-19-0-document_page_approval
2828
:alt: Translate me on Weblate
2929
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
30-
:target: https://runboat.odoo-community.org/builds?repo=OCA/knowledge&target_branch=18.0
30+
:target: https://runboat.odoo-community.org/builds?repo=OCA/knowledge&target_branch=19.0
3131
:alt: Try me on Runboat
3232

3333
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -68,7 +68,7 @@ Bug Tracker
6868
Bugs are tracked on `GitHub Issues <https://github.com/OCA/knowledge/issues>`_.
6969
In case of trouble, please check there if your issue has already been reported.
7070
If you spotted it first, help us to smash it by providing a detailed and welcomed
71-
`feedback <https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
71+
`feedback <https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
7272

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

@@ -119,6 +119,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
119119
mission is to support the collaborative development of Odoo features and
120120
promote its widespread use.
121121

122-
This module is part of the `OCA/knowledge <https://github.com/OCA/knowledge/tree/18.0/document_page_approval>`_ project on GitHub.
122+
This module is part of the `OCA/knowledge <https://github.com/OCA/knowledge/tree/19.0/document_page_approval>`_ project on GitHub.
123123

124124
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

document_page_approval/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
{
55
"name": "Document Page Approval",
6-
"version": "18.0.1.1.0",
6+
"version": "19.0.1.0.0",
77
"author": "Savoir-faire Linux, Odoo Community Association (OCA)",
88
"website": "https://github.com/OCA/knowledge",
99
"license": "AGPL-3",

document_page_approval/models/document_page.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def can_user_approve_this_page(self, user):
109109
if not self.approver_group_ids:
110110
return True
111111
# to approve, user must belong to any of the approver groups
112-
return len(user.groups_id & self.approver_group_ids) > 0
112+
return len(user.group_ids & self.approver_group_ids) > 0
113113

114114
def _compute_has_changes_pending_approval(self):
115115
history = self.env["document.page.history"]

document_page_approval/models/document_page_history.py

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ def action_to_approve(self):
6464
for rec in self:
6565
if rec.state != "draft":
6666
raise UserError(
67-
self.env._("Can't approve pages in '%(state)s' state.")
68-
% {"state": rec.state}
67+
self.env._(
68+
"Can't approve pages in '%(state)s' state.", state=rec.state
69+
)
6970
)
7071
if not (rec.am_i_owner or rec.am_i_approver):
7172
raise UserError(
@@ -79,7 +80,7 @@ def action_to_approve(self):
7980
rec.write({"state": "to approve"})
8081
guids = [g.id for g in rec.page_id.approver_group_ids]
8182
users = self.env["res.users"].search(
82-
[("groups_id", "in", guids), ("groups_id", "in", approver_gid.id)]
83+
[("group_ids", "in", guids), ("group_ids", "in", approver_gid.id)]
8384
)
8485
rec.message_subscribe(partner_ids=users.mapped("partner_id").ids)
8586
rec.message_post_with_source(template)
@@ -91,28 +92,23 @@ def action_approve(self):
9192
"""Set a change request as approved."""
9293
for rec in self:
9394
if rec.state not in ["draft", "to approve"]:
94-
raise UserError(
95-
self.env._("Can't approve page in '%(state)s' state.")
96-
% {"state": rec.state}
97-
)
95+
self.env._("Can't approve page in '%(state)s' state.", state=rec.state)
9896
if not rec.am_i_approver:
97+
groups_str = ", ".join(
98+
g.display_name for g in rec.page_id.approver_group_ids
99+
)
99100
raise UserError(
100101
self.env._(
101-
"You are not authorized to do this.\n"
102-
"Only approvers with these groups can approve this: %(groups)s"
102+
"Only approvers with these groups can approve this: %(groups)s",
103+
groups=groups_str,
103104
)
104-
% {
105-
"groups": ", ".join(
106-
g.display_name for g in rec.page_id.approver_group_ids
107-
)
108-
}
109105
)
110106

111107
# Update state
112108
rec.write(
113109
{
114110
"state": "approved",
115-
"approved_date": fields.datetime.now(),
111+
"approved_date": fields.Datetime.now(),
116112
"approved_uid": self.env.uid,
117113
}
118114
)
@@ -121,14 +117,17 @@ def action_approve(self):
121117
# Notify state change
122118
rec.message_post(
123119
subtype_xmlid="mail.mt_comment",
124-
body=self.env._("Change request has been approved by %(user)s.")
125-
% {"user": self.env.user.name},
120+
body=self.env._(
121+
"Change request has been approved by %(user)s.",
122+
user=self.env.user.name,
123+
),
126124
)
127125
# Notify followers a new version is available
128126
rec.page_id.message_post(
129127
subtype_xmlid="mail.mt_comment",
130-
body=self.env._("New version of the document {} approved.").format(
131-
rec.page_id.name
128+
body=self.env._(
129+
"New version of the document %(name)s approved.",
130+
name=rec.page_id.name,
132131
),
133132
)
134133

@@ -139,12 +138,10 @@ def action_cancel(self):
139138
rec.message_post(
140139
subtype_xmlid="mail.mt_comment",
141140
body=self.env._(
142-
"Change request <b>%(name)s</b> has been cancelled by %(user)s."
143-
)
144-
% {
145-
"name": rec.display_name,
146-
"user": self.env.user.name,
147-
},
141+
"Change request <b>%(name)s</b> has been cancelled by %(user)s.",
142+
name=rec.display_name,
143+
user=self.env.user.name,
144+
),
148145
)
149146

150147
def action_cancel_and_draft(self):

document_page_approval/security/document_page_security.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
<odoo>
33
<record id="group_document_approver_user" model="res.groups">
44
<field name="name">Approver</field>
5-
<field name="category_id" ref="document_knowledge.module_category_knowledge" />
65
<field
76
name="implied_ids"
87
eval="[(4, ref('document_page.group_document_editor'))]"

document_page_approval/static/description/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ <h1>Document Page Approval</h1>
374374
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375375
!! source digest: sha256:ad1f0f3942df59076ffe4ebdf9ba440842d2792c5a1932cfd434ce9f20448e87
376376
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
377-
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/knowledge/tree/18.0/document_page_approval"><img alt="OCA/knowledge" src="https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_approval"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/knowledge&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
377+
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/knowledge/tree/19.0/document_page_approval"><img alt="OCA/knowledge" src="https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/knowledge-19-0/knowledge-19-0-document_page_approval"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/knowledge&amp;target_branch=19.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
378378
<p>This module adds a workflow to approve page modifications and show the
379379
approved version by default.</p>
380380
<p><strong>Table of contents</strong></p>
@@ -418,7 +418,7 @@ <h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
418418
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/knowledge/issues">GitHub Issues</a>.
419419
In case of trouble, please check there if your issue has already been reported.
420420
If you spotted it first, help us to smash it by providing a detailed and welcomed
421-
<a class="reference external" href="https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
421+
<a class="reference external" href="https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
422422
<p>Do not contact contributors directly about support or help with technical issues.</p>
423423
</div>
424424
<div class="section" id="credits">
@@ -471,7 +471,7 @@ <h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
471471
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
472472
mission is to support the collaborative development of Odoo features and
473473
promote its widespread use.</p>
474-
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/knowledge/tree/18.0/document_page_approval">OCA/knowledge</a> project on GitHub.</p>
474+
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/knowledge/tree/19.0/document_page_approval">OCA/knowledge</a> project on GitHub.</p>
475475
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
476476
</div>
477477
</div>

document_page_approval/tests/test_document_page_approval.py

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from odoo import Command
21
from odoo.exceptions import UserError
32
from odoo.tests import new_test_user
43

@@ -11,23 +10,44 @@ def setUpClass(cls):
1110
super().setUpClass()
1211
cls.page_obj = cls.env["document.page"]
1312
cls.history_obj = cls.env["document.page.history"]
13+
cls.category_model = cls.env["document.page"]
1414

15-
# Demo Data
16-
cls.category1 = cls.env.ref("document_page.demo_category1")
17-
cls.page1 = cls.env.ref("document_page.demo_page1")
18-
19-
# Create test user without groups first
15+
# Create test users
16+
cls.manager_user = new_test_user(
17+
cls.env,
18+
login="test_manager",
19+
groups="document_page.group_document_manager",
20+
name="Test Manager",
21+
email="manager@example.com",
22+
)
2023
cls.user2 = new_test_user(
2124
cls.env,
2225
login="test-user2",
23-
groups="document_page_approval.group_document_approver_user",
26+
groups="document_page_approval.group_document_approver_user,document_knowledge.group_document_user",
27+
name="Test Approver",
28+
email="approver@example.com",
29+
)
30+
31+
# Create category and page
32+
cls.category1 = cls.category_model.create(
33+
{
34+
"name": "Demo Category 1",
35+
"type": "category",
36+
}
37+
)
38+
cls.page1 = cls.page_obj.create(
39+
{
40+
"name": "Demo Page 1",
41+
"parent_id": cls.category1.id,
42+
"content": "<p>Content</p>",
43+
"type": "content",
44+
}
2445
)
2546

2647
# Ensure user2 has the approver group
2748
cls.approver_gid = cls.env.ref(
2849
"document_page_approval.group_document_approver_user"
2950
)
30-
cls.user2.write({"groups_id": [Command.link(cls.approver_gid.id)]})
3151

3252
# Create category and page that require approval
3353
cls.category2 = cls.page_obj.create(
@@ -159,7 +179,7 @@ def test_can_user_approve_this_page(self):
159179
)
160180

161181
# Remove approval group from user2
162-
self.user2.write({"groups_id": [(3, self.approver_gid.id)]})
182+
self.user2.write({"group_ids": [(3, self.approver_gid.id)]})
163183
self.assertFalse(
164184
self.page2.with_user(self.user2).can_user_approve_this_page(self.user2)
165185
)
@@ -228,8 +248,12 @@ def test_approval_permission_check(self):
228248
}
229249
)
230250

251+
# Use a random user instead of base.user_demo
252+
random_user = new_test_user(
253+
self.env, login="random_user", groups="base.group_user"
254+
)
231255
with self.assertRaises(UserError):
232-
chreq.with_user(self.env.ref("base.user_demo")).action_approve()
256+
chreq.with_user(random_user).action_approve()
233257

234258
# Grant approval rights
235259
chreq.with_user(self.user2).action_approve()

0 commit comments

Comments
 (0)