mirror of
https://github.com/OCA/knowledge.git
synced 2025-07-26 18:38:41 -06:00
[MIG] document_page_approval: Migration to 17.0
This commit is contained in:
parent
cb0ad1b1a8
commit
81725ef698
@ -66,11 +66,5 @@ class DocumentPageHistory(models.Model):
|
|||||||
context=True,
|
context=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: Replace for _compute_display_name
|
|
||||||
def name_get(self):
|
def name_get(self):
|
||||||
return [(rec.id, "%s #%i" % (rec.page_id.name, rec.id)) for rec in self]
|
return [(rec.id, "%s #%i" % (rec.page_id.name, rec.id)) for rec in self]
|
||||||
|
|
||||||
@api.depends("page_id")
|
|
||||||
def _compute_display_name(self):
|
|
||||||
for rec in self:
|
|
||||||
rec.display_name = rec.id, "%s #%i" % (rec.page_id.name, rec.id)
|
|
||||||
|
@ -17,19 +17,19 @@ Document Page Approval
|
|||||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
:alt: License: AGPL-3
|
:alt: License: AGPL-3
|
||||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github
|
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github
|
||||||
:target: https://github.com/OCA/knowledge/tree/16.0/document_page_approval
|
:target: https://github.com/OCA/knowledge/tree/17.0/document_page_approval
|
||||||
:alt: OCA/knowledge
|
:alt: OCA/knowledge
|
||||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||||
:target: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_approval
|
:target: https://translation.odoo-community.org/projects/knowledge-17-0/knowledge-17-0-document_page_approval
|
||||||
:alt: Translate me on Weblate
|
:alt: Translate me on Weblate
|
||||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/knowledge&target_branch=16.0
|
:target: https://runboat.odoo-community.org/builds?repo=OCA/knowledge&target_branch=17.0
|
||||||
:alt: Try me on Runboat
|
:alt: Try me on Runboat
|
||||||
|
|
||||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||||
|
|
||||||
This module adds a workflow to approve page modifications
|
This module adds a workflow to approve page modifications and show the
|
||||||
and show the approved version by default.
|
approved version by default.
|
||||||
|
|
||||||
**Table of contents**
|
**Table of contents**
|
||||||
|
|
||||||
@ -41,22 +41,22 @@ Configuration
|
|||||||
|
|
||||||
To configure this module, you need to:
|
To configure this module, you need to:
|
||||||
|
|
||||||
#. Set a valid email address on the company settings.
|
1. Set a valid email address on the company settings.
|
||||||
#. Go to Knowledge > Categories.
|
2. Go to Knowledge > Categories.
|
||||||
#. Create a new page category and set an approver group.
|
3. Create a new page category and set an approver group. Make sure users
|
||||||
Make sure users belonging to that group have valid email addresses.
|
belonging to that group have valid email addresses.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
|
|
||||||
To use this module, you need to:
|
To use this module, you need to:
|
||||||
|
|
||||||
#. Go to Knowledge > Pages
|
1. Go to Knowledge > Pages
|
||||||
#. Create a new page and choose the previously created category.
|
2. Create a new page and choose the previously created category.
|
||||||
#. A notification is sent to the approvers group with a link to the
|
3. A notification is sent to the approvers group with a link to the page
|
||||||
page history to review.
|
history to review.
|
||||||
#. Depending on the review, the page history is approved or not.
|
4. Depending on the review, the page history is approved or not.
|
||||||
#. Users reading the page see the last approved version.
|
5. Users reading the page see the last approved version.
|
||||||
|
|
||||||
Bug Tracker
|
Bug Tracker
|
||||||
===========
|
===========
|
||||||
@ -64,7 +64,7 @@ Bug Tracker
|
|||||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/knowledge/issues>`_.
|
Bugs are tracked on `GitHub Issues <https://github.com/OCA/knowledge/issues>`_.
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
In case of trouble, please check there if your issue has already been reported.
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||||
`feedback <https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
`feedback <https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2017.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.
|
Do not contact contributors directly about support or help with technical issues.
|
||||||
|
|
||||||
@ -72,30 +72,34 @@ Credits
|
|||||||
=======
|
=======
|
||||||
|
|
||||||
Authors
|
Authors
|
||||||
~~~~~~~
|
-------
|
||||||
|
|
||||||
* Savoir-faire Linux
|
* Savoir-faire Linux
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
~~~~~~~~~~~~
|
------------
|
||||||
|
|
||||||
* Odoo SA <info@odoo.com>
|
- Odoo SA <info@odoo.com>
|
||||||
* Savoir-faire Linux <support@savoirfairelinux.com>
|
|
||||||
* Gervais Naoussi <gervaisnaoussi@gmail.com>
|
|
||||||
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
|
|
||||||
* Iván Todorovich <ivan.todorovich@gmail.com>
|
|
||||||
|
|
||||||
* `Tecnativa <https://www.tecnativa.com>`_:
|
- Savoir-faire Linux <support@savoirfairelinux.com>
|
||||||
|
|
||||||
* Victor M.M. Torres
|
- Gervais Naoussi <gervaisnaoussi@gmail.com>
|
||||||
* Víctor Martínez
|
|
||||||
|
|
||||||
* `Guadaltech <https://www.guadaltech.es>`_:
|
- Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
|
||||||
|
|
||||||
* Fernando La Chica <fernando.lachica@guadaltech.es>
|
- Iván Todorovich <ivan.todorovich@gmail.com>
|
||||||
|
|
||||||
|
- `Tecnativa <https://www.tecnativa.com>`__:
|
||||||
|
|
||||||
|
- Victor M.M. Torres
|
||||||
|
- Víctor Martínez
|
||||||
|
|
||||||
|
- `Guadaltech <https://www.guadaltech.es>`__:
|
||||||
|
|
||||||
|
- Fernando La Chica <fernando.lachica@guadaltech.es>
|
||||||
|
|
||||||
Maintainers
|
Maintainers
|
||||||
~~~~~~~~~~~
|
-----------
|
||||||
|
|
||||||
This module is maintained by the OCA.
|
This module is maintained by the OCA.
|
||||||
|
|
||||||
@ -107,6 +111,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
|
|||||||
mission is to support the collaborative development of Odoo features and
|
mission is to support the collaborative development of Odoo features and
|
||||||
promote its widespread use.
|
promote its widespread use.
|
||||||
|
|
||||||
This module is part of the `OCA/knowledge <https://github.com/OCA/knowledge/tree/16.0/document_page_approval>`_ project on GitHub.
|
This module is part of the `OCA/knowledge <https://github.com/OCA/knowledge/tree/17.0/document_page_approval>`_ project on GitHub.
|
||||||
|
|
||||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "Document Page Approval",
|
"name": "Document Page Approval",
|
||||||
"version": "16.0.1.1.1",
|
"version": "17.0.1.0.0",
|
||||||
"author": "Savoir-faire Linux, Odoo Community Association (OCA)",
|
"author": "Savoir-faire Linux, Odoo Community Association (OCA)",
|
||||||
"website": "https://github.com/OCA/knowledge",
|
"website": "https://github.com/OCA/knowledge",
|
||||||
"license": "AGPL-3",
|
"license": "AGPL-3",
|
||||||
|
@ -5,10 +5,10 @@ import logging
|
|||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def post_init_hook(cr, registry): # pragma: no cover
|
def post_init_hook(env): # pragma: no cover
|
||||||
# Set all pre-existing pages history to approved
|
# Set all pre-existing pages history to approved
|
||||||
_logger.info("Setting history to approved.")
|
_logger.info("Setting history to approved.")
|
||||||
cr.execute(
|
env.cr.execute(
|
||||||
"""
|
"""
|
||||||
UPDATE document_page_history
|
UPDATE document_page_history
|
||||||
SET state='approved',
|
SET state='approved',
|
||||||
@ -19,7 +19,7 @@ def post_init_hook(cr, registry): # pragma: no cover
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def uninstall_hook(cr, registry): # pragma: no cover
|
def uninstall_hook(env): # pragma: no cover
|
||||||
# Remove unapproved pages
|
# Remove unapproved pages
|
||||||
_logger.info("Deleting unapproved Change Requests.")
|
_logger.info("Deleting unapproved Change Requests.")
|
||||||
cr.execute("DELETE FROM document_page_history WHERE state != 'approved'")
|
env.cr.execute("DELETE FROM document_page_history WHERE state != 'approved'")
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 59 KiB |
Binary file not shown.
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 117 KiB |
Binary file not shown.
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 126 KiB |
@ -19,7 +19,6 @@ class DocumentPage(models.Model):
|
|||||||
related="history_head.approved_date",
|
related="history_head.approved_date",
|
||||||
store=True,
|
store=True,
|
||||||
index=True,
|
index=True,
|
||||||
readonly=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
approved_uid = fields.Many2one(
|
approved_uid = fields.Many2one(
|
||||||
@ -28,7 +27,6 @@ class DocumentPage(models.Model):
|
|||||||
related="history_head.approved_uid",
|
related="history_head.approved_uid",
|
||||||
store=True,
|
store=True,
|
||||||
index=True,
|
index=True,
|
||||||
readonly=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
approval_required = fields.Boolean(
|
approval_required = fields.Boolean(
|
||||||
@ -137,8 +135,9 @@ class DocumentPage(models.Model):
|
|||||||
|
|
||||||
def action_changes_pending_approval(self):
|
def action_changes_pending_approval(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
action = self.env.ref("document_page_approval.action_change_requests")
|
action = self.env["ir.actions.act_window"]._for_xml_id(
|
||||||
action = action.sudo().read()[0]
|
"document_page_approval.action_change_requests"
|
||||||
|
)
|
||||||
context = literal_eval(action["context"])
|
context = literal_eval(action["context"])
|
||||||
context["search_default_page_id"] = self.id
|
context["search_default_page_id"] = self.id
|
||||||
context["default_page_id"] = self.id
|
context["default_page_id"] = self.id
|
||||||
|
@ -22,7 +22,6 @@ class DocumentPageHistory(models.Model):
|
|||||||
],
|
],
|
||||||
"Status",
|
"Status",
|
||||||
default="draft",
|
default="draft",
|
||||||
readonly=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
approved_date = fields.Datetime()
|
approved_date = fields.Datetime()
|
||||||
@ -79,7 +78,7 @@ class DocumentPageHistory(models.Model):
|
|||||||
[("groups_id", "in", guids), ("groups_id", "in", approver_gid.id)]
|
[("groups_id", "in", guids), ("groups_id", "in", approver_gid.id)]
|
||||||
)
|
)
|
||||||
rec.message_subscribe(partner_ids=users.mapped("partner_id").ids)
|
rec.message_subscribe(partner_ids=users.mapped("partner_id").ids)
|
||||||
rec.message_post_with_template(template.id)
|
rec.message_post_with_source(template)
|
||||||
else:
|
else:
|
||||||
# auto-approve if approval is not required
|
# auto-approve if approval is not required
|
||||||
rec.action_approve()
|
rec.action_approve()
|
||||||
|
3
document_page_approval/pyproject.toml
Normal file
3
document_page_approval/pyproject.toml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["whool"]
|
||||||
|
build-backend = "whool.buildapi"
|
6
document_page_approval/readme/CONFIGURE.md
Normal file
6
document_page_approval/readme/CONFIGURE.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
To configure this module, you need to:
|
||||||
|
|
||||||
|
1. Set a valid email address on the company settings.
|
||||||
|
2. Go to Knowledge \> Categories.
|
||||||
|
3. Create a new page category and set an approver group. Make sure
|
||||||
|
users belonging to that group have valid email addresses.
|
@ -1,6 +0,0 @@
|
|||||||
To configure this module, you need to:
|
|
||||||
|
|
||||||
#. Set a valid email address on the company settings.
|
|
||||||
#. Go to Knowledge > Categories.
|
|
||||||
#. Create a new page category and set an approver group.
|
|
||||||
Make sure users belonging to that group have valid email addresses.
|
|
18
document_page_approval/readme/CONTRIBUTORS.md
Normal file
18
document_page_approval/readme/CONTRIBUTORS.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
- Odoo SA \<<info@odoo.com>\>
|
||||||
|
|
||||||
|
- Savoir-faire Linux \<<support@savoirfairelinux.com>\>
|
||||||
|
|
||||||
|
- Gervais Naoussi \<<gervaisnaoussi@gmail.com>\>
|
||||||
|
|
||||||
|
- Maxime Chambreuil \<<mchambreuil@opensourceintegrators.com>\>
|
||||||
|
|
||||||
|
- Iván Todorovich \<<ivan.todorovich@gmail.com>\>
|
||||||
|
|
||||||
|
- [Tecnativa](https://www.tecnativa.com):
|
||||||
|
|
||||||
|
> - Victor M.M. Torres
|
||||||
|
> - Víctor Martínez
|
||||||
|
|
||||||
|
- [Guadaltech](https://www.guadaltech.es):
|
||||||
|
|
||||||
|
- Fernando La Chica \<<fernando.lachica@guadaltech.es>\>
|
@ -1,14 +0,0 @@
|
|||||||
* Odoo SA <info@odoo.com>
|
|
||||||
* Savoir-faire Linux <support@savoirfairelinux.com>
|
|
||||||
* Gervais Naoussi <gervaisnaoussi@gmail.com>
|
|
||||||
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
|
|
||||||
* Iván Todorovich <ivan.todorovich@gmail.com>
|
|
||||||
|
|
||||||
* `Tecnativa <https://www.tecnativa.com>`_:
|
|
||||||
|
|
||||||
* Victor M.M. Torres
|
|
||||||
* Víctor Martínez
|
|
||||||
|
|
||||||
* `Guadaltech <https://www.guadaltech.es>`_:
|
|
||||||
|
|
||||||
* Fernando La Chica <fernando.lachica@guadaltech.es>
|
|
2
document_page_approval/readme/DESCRIPTION.md
Normal file
2
document_page_approval/readme/DESCRIPTION.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
This module adds a workflow to approve page modifications and show the
|
||||||
|
approved version by default.
|
@ -1,2 +0,0 @@
|
|||||||
This module adds a workflow to approve page modifications
|
|
||||||
and show the approved version by default.
|
|
8
document_page_approval/readme/USAGE.md
Normal file
8
document_page_approval/readme/USAGE.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
To use this module, you need to:
|
||||||
|
|
||||||
|
1. Go to Knowledge \> Pages
|
||||||
|
2. Create a new page and choose the previously created category.
|
||||||
|
3. A notification is sent to the approvers group with a link to the
|
||||||
|
page history to review.
|
||||||
|
4. Depending on the review, the page history is approved or not.
|
||||||
|
5. Users reading the page see the last approved version.
|
@ -1,8 +0,0 @@
|
|||||||
To use this module, you need to:
|
|
||||||
|
|
||||||
#. Go to Knowledge > Pages
|
|
||||||
#. Create a new page and choose the previously created category.
|
|
||||||
#. A notification is sent to the approvers group with a link to the
|
|
||||||
page history to review.
|
|
||||||
#. Depending on the review, the page history is approved or not.
|
|
||||||
#. Users reading the page see the last approved version.
|
|
@ -8,10 +8,11 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
:Author: David Goodger (goodger@python.org)
|
:Author: David Goodger (goodger@python.org)
|
||||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
:Copyright: This stylesheet has been placed in the public domain.
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
Default cascading style sheet for the HTML output of Docutils.
|
||||||
|
Despite the name, some widely supported CSS2 features are used.
|
||||||
|
|
||||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||||
customize this style sheet.
|
customize this style sheet.
|
||||||
@ -274,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
|||||||
margin-left: 2em ;
|
margin-left: 2em ;
|
||||||
margin-right: 2em }
|
margin-right: 2em }
|
||||||
|
|
||||||
pre.code .ln { color: grey; } /* line numbers */
|
pre.code .ln { color: gray; } /* line numbers */
|
||||||
pre.code, code { background-color: #eeeeee }
|
pre.code, code { background-color: #eeeeee }
|
||||||
pre.code .comment, code .comment { color: #5C6576 }
|
pre.code .comment, code .comment { color: #5C6576 }
|
||||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||||
@ -300,7 +301,7 @@ span.option {
|
|||||||
span.pre {
|
span.pre {
|
||||||
white-space: pre }
|
white-space: pre }
|
||||||
|
|
||||||
span.problematic {
|
span.problematic, pre.problematic {
|
||||||
color: red }
|
color: red }
|
||||||
|
|
||||||
span.section-subtitle {
|
span.section-subtitle {
|
||||||
@ -368,9 +369,9 @@ ul.auto-toc {
|
|||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
!! source digest: sha256:eaa85b29d79372636ce9dda9fbf87f567e6702f38a57385384a168b28a517ff5
|
!! source digest: sha256:eaa85b29d79372636ce9dda9fbf87f567e6702f38a57385384a168b28a517ff5
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||||
<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/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/knowledge/tree/16.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-16-0/knowledge-16-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&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
<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/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/knowledge/tree/17.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-17-0/knowledge-17-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&target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||||
<p>This module adds a workflow to approve page modifications
|
<p>This module adds a workflow to approve page modifications and show the
|
||||||
and show the approved version by default.</p>
|
approved version by default.</p>
|
||||||
<p><strong>Table of contents</strong></p>
|
<p><strong>Table of contents</strong></p>
|
||||||
<div class="contents local topic" id="contents">
|
<div class="contents local topic" id="contents">
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
@ -391,8 +392,8 @@ and show the approved version by default.</p>
|
|||||||
<ol class="arabic simple">
|
<ol class="arabic simple">
|
||||||
<li>Set a valid email address on the company settings.</li>
|
<li>Set a valid email address on the company settings.</li>
|
||||||
<li>Go to Knowledge > Categories.</li>
|
<li>Go to Knowledge > Categories.</li>
|
||||||
<li>Create a new page category and set an approver group.
|
<li>Create a new page category and set an approver group. Make sure users
|
||||||
Make sure users belonging to that group have valid email addresses.</li>
|
belonging to that group have valid email addresses.</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="usage">
|
<div class="section" id="usage">
|
||||||
@ -401,8 +402,8 @@ Make sure users belonging to that group have valid email addresses.</li>
|
|||||||
<ol class="arabic simple">
|
<ol class="arabic simple">
|
||||||
<li>Go to Knowledge > Pages</li>
|
<li>Go to Knowledge > Pages</li>
|
||||||
<li>Create a new page and choose the previously created category.</li>
|
<li>Create a new page and choose the previously created category.</li>
|
||||||
<li>A notification is sent to the approvers group with a link to the
|
<li>A notification is sent to the approvers group with a link to the page
|
||||||
page history to review.</li>
|
history to review.</li>
|
||||||
<li>Depending on the review, the page history is approved or not.</li>
|
<li>Depending on the review, the page history is approved or not.</li>
|
||||||
<li>Users reading the page see the last approved version.</li>
|
<li>Users reading the page see the last approved version.</li>
|
||||||
</ol>
|
</ol>
|
||||||
@ -412,7 +413,7 @@ page history to review.</li>
|
|||||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/knowledge/issues">GitHub Issues</a>.
|
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/knowledge/issues">GitHub Issues</a>.
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
In case of trouble, please check there if your issue has already been reported.
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||||
<a class="reference external" href="https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
<a class="reference external" href="https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="credits">
|
<div class="section" id="credits">
|
||||||
@ -454,11 +455,13 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|||||||
<div class="section" id="maintainers">
|
<div class="section" id="maintainers">
|
||||||
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
|
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
|
||||||
<p>This module is maintained by the OCA.</p>
|
<p>This module is maintained by the OCA.</p>
|
||||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||||
|
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||||
|
</a>
|
||||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||||
mission is to support the collaborative development of Odoo features and
|
mission is to support the collaborative development of Odoo features and
|
||||||
promote its widespread use.</p>
|
promote its widespread use.</p>
|
||||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/knowledge/tree/16.0/document_page_approval">OCA/knowledge</a> project on GitHub.</p>
|
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/knowledge/tree/17.0/document_page_approval">OCA/knowledge</a> project on GitHub.</p>
|
||||||
<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>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
type="object"
|
type="object"
|
||||||
string="Send to Review"
|
string="Send to Review"
|
||||||
class="oe_highlight"
|
class="oe_highlight"
|
||||||
attrs="{'invisible':['|','|',('is_approval_required','=',False),('am_i_owner','=',False),('state', 'not in', ['draft'])]}"
|
invisible="not is_approval_required or not am_i_owner or state != 'draft'"
|
||||||
/>
|
/>
|
||||||
<!-- approve if i am approver -->
|
<!-- approve if i am approver -->
|
||||||
<button
|
<button
|
||||||
@ -22,7 +22,7 @@
|
|||||||
type="object"
|
type="object"
|
||||||
string="Approve"
|
string="Approve"
|
||||||
class="oe_highlight"
|
class="oe_highlight"
|
||||||
attrs="{'invisible':['|','|',('is_approval_required','=',False),('am_i_approver','=',False),('state','not in',['draft','to approve'])]}"
|
invisible="not is_approval_required or not am_i_approver or state not in ('draft', 'to approve')"
|
||||||
/>
|
/>
|
||||||
<!-- approve if it's not required and i am owner -->
|
<!-- approve if it's not required and i am owner -->
|
||||||
<button
|
<button
|
||||||
@ -30,34 +30,35 @@
|
|||||||
type="object"
|
type="object"
|
||||||
string="Approve"
|
string="Approve"
|
||||||
class="oe_highlight"
|
class="oe_highlight"
|
||||||
attrs="{'invisible':['|','|',('is_approval_required','=',True),('am_i_owner','=',False),('state','not in',['draft', 'to approve'])]}"
|
invisible="is_approval_required or not am_i_owner or state not in ('draft', 'to approve')"
|
||||||
/>
|
/>
|
||||||
<!-- cancel if i am owner or approver -->
|
<!-- cancel if i am owner or approver -->
|
||||||
<button
|
<button
|
||||||
name="action_cancel"
|
name="action_cancel"
|
||||||
type="object"
|
type="object"
|
||||||
string="Cancel"
|
string="Cancel"
|
||||||
attrs="{'invisible':['|','&',('am_i_owner','=',False),('am_i_approver','=',False),('state','not in',['draft','to approve'])]}"
|
invisible="(not am_i_owner or not am_i_approver) and (state not in ('draft', 'to approve'))"
|
||||||
/>
|
/>
|
||||||
<!-- reopen if i am owner or approver -->
|
<!-- reopen if i am owner or approver -->
|
||||||
<button
|
<button
|
||||||
name="action_draft"
|
name="action_draft"
|
||||||
type="object"
|
type="object"
|
||||||
string="Back to draft"
|
string="Back to draft"
|
||||||
attrs="{'invisible':['|','&',('am_i_owner','=',False),('am_i_approver','=',False),('state','not in',['cancelled'])]}"
|
invisible="(not am_i_owner or not am_i_approver) and (state != 'cancelled')"
|
||||||
/>
|
/>
|
||||||
<!-- cancel & reopen, if i am owner or approver -->
|
<!-- cancel & reopen, if i am owner or approver -->
|
||||||
<button
|
<button
|
||||||
name="action_draft"
|
name="action_draft"
|
||||||
type="object"
|
type="object"
|
||||||
string="Back to draft"
|
string="Back to draft"
|
||||||
attrs="{'invisible':['|','&',('am_i_owner','=',False),('am_i_approver','=',False),('state','not in',['to approve'])]}"
|
invisible="(not am_i_owner or not am_i_approver) and (state != 'to approve')"
|
||||||
/>
|
/>
|
||||||
<field name="am_i_owner" invisible="1" />
|
<field name="am_i_owner" invisible="1" />
|
||||||
<field name="am_i_approver" invisible="1" />
|
<field name="am_i_approver" invisible="1" />
|
||||||
<field name="is_approval_required" invisible="1" />
|
<field name="is_approval_required" invisible="1" />
|
||||||
<field
|
<field
|
||||||
name="state"
|
name="state"
|
||||||
|
readonly="1"
|
||||||
widget="statusbar"
|
widget="statusbar"
|
||||||
statusbar_visible="draft,approved"
|
statusbar_visible="draft,approved"
|
||||||
/>
|
/>
|
||||||
@ -68,35 +69,31 @@
|
|||||||
<field
|
<field
|
||||||
name="approved_uid"
|
name="approved_uid"
|
||||||
readonly="1"
|
readonly="1"
|
||||||
attrs="{'invisible':[('state','not in',['approved'])]}"
|
invisible="state != 'approved'"
|
||||||
/>
|
/>
|
||||||
<field
|
<field
|
||||||
name="approved_date"
|
name="approved_date"
|
||||||
readonly="1"
|
readonly="1"
|
||||||
attrs="{'invisible':[('state','not in',['approved'])]}"
|
invisible="state != 'approved'"
|
||||||
/>
|
/>
|
||||||
</group>
|
</group>
|
||||||
</xpath>
|
</xpath>
|
||||||
<!-- Readonly fields -->
|
<!-- Readonly fields -->
|
||||||
<field name="content" position="attributes">
|
<field name="content" position="attributes">
|
||||||
<attribute
|
<attribute name="readonly">state != 'draft'
|
||||||
name="attrs"
|
</attribute>
|
||||||
>{'readonly': [('state', 'not in', ['draft'])]}</attribute>
|
|
||||||
</field>
|
</field>
|
||||||
<field name="page_id" position="attributes">
|
<field name="page_id" position="attributes">
|
||||||
<attribute
|
<attribute name="readonly">state != 'draft'
|
||||||
name="attrs"
|
</attribute>
|
||||||
>{'readonly': [('state', 'not in', ['draft'])]}</attribute>
|
|
||||||
</field>
|
</field>
|
||||||
<field name="name" position="attributes">
|
<field name="name" position="attributes">
|
||||||
<attribute
|
<attribute name="readonly">state != 'draft'
|
||||||
name="attrs"
|
</attribute>
|
||||||
>{'readonly': [('state', 'not in', ['draft'])]}</attribute>
|
|
||||||
</field>
|
</field>
|
||||||
<field name="summary" position="attributes">
|
<field name="summary" position="attributes">
|
||||||
<attribute
|
<attribute name="readonly">state != 'draft'
|
||||||
name="attrs"
|
</attribute>
|
||||||
>{'readonly': [('state', 'not in', ['draft'])]}</attribute>
|
|
||||||
</field>
|
</field>
|
||||||
<!-- Chatter -->
|
<!-- Chatter -->
|
||||||
<sheet position="after">
|
<sheet position="after">
|
||||||
@ -119,14 +116,14 @@
|
|||||||
position="attributes"
|
position="attributes"
|
||||||
groups="document_page.group_document_manager"
|
groups="document_page.group_document_manager"
|
||||||
>
|
>
|
||||||
<attribute name="attrs">{'readonly': False}</attribute>
|
<attribute name="readonly">False</attribute>
|
||||||
</field>
|
</field>
|
||||||
<field
|
<field
|
||||||
name="summary"
|
name="summary"
|
||||||
position="attributes"
|
position="attributes"
|
||||||
groups="document_page.group_document_manager"
|
groups="document_page.group_document_manager"
|
||||||
>
|
>
|
||||||
<attribute name="attrs">{'readonly': False}</attribute>
|
<attribute name="readonly">False</attribute>
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
@ -141,7 +138,7 @@
|
|||||||
class="alert alert-info"
|
class="alert alert-info"
|
||||||
role="alert"
|
role="alert"
|
||||||
style="margin-bottom:0px;"
|
style="margin-bottom:0px;"
|
||||||
attrs="{'invisible': [('has_changes_pending_approval','=',False)]}"
|
invisible="not has_changes_pending_approval"
|
||||||
>
|
>
|
||||||
This document has <b
|
This document has <b
|
||||||
>Changes Pending Approval</b>. You are viewing the last approved content.
|
>Changes Pending Approval</b>. You are viewing the last approved content.
|
||||||
@ -150,7 +147,7 @@
|
|||||||
class="alert alert-warning oe_edit_only"
|
class="alert alert-warning oe_edit_only"
|
||||||
role="alert"
|
role="alert"
|
||||||
style="margin-bottom:0px;"
|
style="margin-bottom:0px;"
|
||||||
attrs="{'invisible': [('is_approval_required','=',False)]}"
|
invisible="not is_approval_required"
|
||||||
>
|
>
|
||||||
This document requires approval. If edited, you will create a new <b
|
This document requires approval. If edited, you will create a new <b
|
||||||
>Change Request</b>.
|
>Change Request</b>.
|
||||||
@ -159,7 +156,7 @@
|
|||||||
class="alert alert-warning oe_edit_only"
|
class="alert alert-warning oe_edit_only"
|
||||||
role="alert"
|
role="alert"
|
||||||
style="margin-bottom:0px;"
|
style="margin-bottom:0px;"
|
||||||
attrs="{'invisible': [('user_has_drafts','=',False)]}"
|
invisible="not user_has_drafts"
|
||||||
>
|
>
|
||||||
<b>You already have a Draft Change Request for this page.</b>
|
<b>You already have a Draft Change Request for this page.</b>
|
||||||
It is highly recommended that you edit that one instead of creating a new one.
|
It is highly recommended that you edit that one instead of creating a new one.
|
||||||
@ -174,26 +171,26 @@
|
|||||||
name="action_changes_pending_approval"
|
name="action_changes_pending_approval"
|
||||||
string="Change Requests"
|
string="Change Requests"
|
||||||
type="object"
|
type="object"
|
||||||
attrs="{'invisible':[('has_changes_pending_approval','=',False),('user_has_drafts','=',False)]}"
|
invisible="not has_changes_pending_approval and not user_has_drafts"
|
||||||
icon="fa-edit"
|
icon="fa-edit"
|
||||||
/>
|
/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<field name="content_uid" position="after">
|
<field name="content_uid" position="after">
|
||||||
<field name="approved_uid" />
|
<field name="approved_uid" readonly="1" />
|
||||||
</field>
|
</field>
|
||||||
<field name="content_date" position="attributes">
|
<field name="content_date" position="attributes">
|
||||||
<attribute name="invisible">1</attribute>
|
<attribute name="invisible">1</attribute>
|
||||||
</field>
|
</field>
|
||||||
<field name="content_date" position="after">
|
<field name="content_date" position="after">
|
||||||
<field name="approved_date" />
|
<field name="approved_date" readonly="1" />
|
||||||
</field>
|
</field>
|
||||||
<field name="history_ids" position="inside">
|
<field name="history_ids" position="inside">
|
||||||
<tree>
|
<tree>
|
||||||
<field name="id" />
|
<field name="id" />
|
||||||
<field name="approved_date" />
|
<field name="approved_date" readonly="1" />
|
||||||
<field name="summary" />
|
<field name="summary" />
|
||||||
<field name="create_uid" />
|
<field name="create_uid" />
|
||||||
<field name="approved_uid" />
|
<field name="approved_uid" readonly="1" />
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
@ -205,12 +202,9 @@
|
|||||||
<field name="inherit_id" ref="document_page.view_wiki_menu_form" />
|
<field name="inherit_id" ref="document_page.view_wiki_menu_form" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="content" position="before">
|
<field name="content" position="before">
|
||||||
<group
|
<group class="oe_read_only" invisible="type != 'content'">
|
||||||
class="oe_read_only"
|
<field name="approved_date" readonly="1" />
|
||||||
attrs="{'invisible':[('type','!=','content')]}"
|
<field name="approved_uid" readonly="1" />
|
||||||
>
|
|
||||||
<field name="approved_date" />
|
|
||||||
<field name="approved_uid" />
|
|
||||||
</group>
|
</group>
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
@ -225,7 +219,8 @@
|
|||||||
<field name="approval_required" />
|
<field name="approval_required" />
|
||||||
<field
|
<field
|
||||||
name="approver_gid"
|
name="approver_gid"
|
||||||
attrs="{'invisible':[('approval_required','!=', True)], 'required':[('approval_required','=', True)]}"
|
invisible="not approval_required"
|
||||||
|
required="approval_required"
|
||||||
/>
|
/>
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
@ -242,9 +237,9 @@
|
|||||||
<attribute name="decoration-muted">state=='cancelled'</attribute>
|
<attribute name="decoration-muted">state=='cancelled'</attribute>
|
||||||
</tree>
|
</tree>
|
||||||
<tree position="inside">
|
<tree position="inside">
|
||||||
<field name="state" />
|
<field name="state" readonly="1" />
|
||||||
<field name="approved_uid" />
|
<field name="approved_uid" readonly="1" />
|
||||||
<field name="approved_date" />
|
<field name="approved_date" readonly="1" />
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
@ -255,7 +250,7 @@
|
|||||||
<field name="inherit_id" ref="document_page.view_wiki_history_filter" />
|
<field name="inherit_id" ref="document_page.view_wiki_history_filter" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="page_id" position="before">
|
<field name="page_id" position="before">
|
||||||
<field name="state" />
|
<field name="state" readonly="1" />
|
||||||
</field>
|
</field>
|
||||||
<field name="create_uid" position="after">
|
<field name="create_uid" position="after">
|
||||||
<filter name="draft" string="Draft" domain="[('state','=','draft')]" />
|
<filter name="draft" string="Draft" domain="[('state','=','draft')]" />
|
||||||
@ -296,9 +291,8 @@
|
|||||||
<field name="name">Change Requests</field>
|
<field name="name">Change Requests</field>
|
||||||
<field name="res_model">document.page.history</field>
|
<field name="res_model">document.page.history</field>
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
<field
|
<field name="context">{'search_default_draft': 1, 'search_default_pending': 1}
|
||||||
name="context"
|
</field>
|
||||||
>{'search_default_draft': 1, 'search_default_pending': 1}</field>
|
|
||||||
</record>
|
</record>
|
||||||
<menuitem
|
<menuitem
|
||||||
id="menu_page_change_requests"
|
id="menu_page_change_requests"
|
||||||
|
Loading…
Reference in New Issue
Block a user