-
-
Notifications
You must be signed in to change notification settings - Fork 394
[9.0] document_page_approval #77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c518b37
878f2d6
432d141
07dd789
33c70a5
9182b4e
d3e7a11
4ef00a8
14a88d9
8626a02
84d8194
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg | ||
| :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html | ||
| :alt: License: AGPL-3 | ||
|
|
||
| ====================== | ||
| Document Page Approval | ||
| ====================== | ||
|
|
||
| This module adds a workflow to approve page modification and show the approved | ||
| version by default. | ||
|
|
||
| Installation | ||
| ============ | ||
|
|
||
| Makes the document page approval available from where some users can approved the modifications | ||
| made by others users in documents that required approvement. | ||
|
|
||
| Configuration | ||
| ============= | ||
|
|
||
| No configuration required | ||
|
|
||
| Usage | ||
| ===== | ||
|
|
||
| To use 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. | ||
| * go to knowledge > Pages | ||
| * Create a new page and choose the previously created category. | ||
| * A notification is sent to the 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. | ||
|
|
||
| .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas | ||
| :alt: Try me on Runbot | ||
| :target: https://runbot.odoo-community.org/runbot/118/9.0 | ||
|
|
||
| Known issues / Roadmap | ||
| ====================== | ||
|
|
||
|
|
||
| Bug Tracker | ||
| =========== | ||
|
|
||
| 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. | ||
| If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here <https://github.com/OCA/knowledge/issues/new?body=module:%20document_page_approval%0Aversion:%209.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. | ||
|
|
||
|
|
||
| Credits | ||
| ======= | ||
|
|
||
| Contributors | ||
| ------------ | ||
|
|
||
| * Odoo SA <info@odoo.com> | ||
| * Savoir-faire Linux <support@savoirfairelinux.com> | ||
| * Gervais Naoussi <gervaisnaoussi@gmail.com> | ||
|
|
||
| Maintainer | ||
| ---------- | ||
|
|
||
| .. image:: https://odoo-community.org/logo.png | ||
| :alt: Odoo Community Association | ||
| :target: https://odoo-community.org | ||
|
|
||
| This module is maintained by the OCA. | ||
|
|
||
| OCA, or the Odoo Community Association, is a nonprofit organization whose | ||
| mission is to support the collaborative development of Odoo features and | ||
| promote its widespread use. | ||
|
|
||
| To contribute to this module, please visit http://odoo-community.org. | ||
|
|
||
| Changelog | ||
| --------- | ||
|
|
||
| v9.0.1.0.0 | ||
|
|
||
| Here are the modification that have been done: | ||
|
|
||
| * The module does no depends anymore on email_template but on mail module |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| # -*- coding: utf-8 -*- | ||
| from . import document_page_approval, document_page_history_workflow |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,130 @@ | ||
| # -*- coding: utf-8 -*- | ||
| ############################################################################## | ||
| # | ||
| # OpenERP, Open Source Management Solution | ||
| # Copyright (C) 2013 Savoir-faire Linux (<http://www.savoirfairelinux.com>). | ||
| # | ||
| # This program is free software: you can redistribute it and/or modify | ||
| # it under the terms of the GNU Affero General Public License as | ||
| # published by the Free Software Foundation, either version 3 of the | ||
| # License, or (at your option) any later version. | ||
| # | ||
| # This program is distributed in the hope that it will be useful, | ||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| # GNU Affero General Public License for more details. | ||
| # | ||
| # You should have received a copy of the GNU Affero General Public License | ||
| # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| # | ||
| ############################################################################## | ||
|
|
||
| from openerp import models, fields, api | ||
|
|
||
|
|
||
| class DocumentPageApproval(models.Model): | ||
| """Useful to know the state of a document.""" | ||
|
|
||
| _inherit = 'document.page' | ||
|
|
||
| @api.multi | ||
| def _get_display_content(self): | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why don't you decorate methods iterating on self
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I added the decorator @api.multi. But i don't know why it is necessary. |
||
| """Display the content of document.""" | ||
| for page in self: | ||
| content = "" | ||
| if page.type == "category": | ||
| content = self._get_page_index(page, link=False) | ||
| else: | ||
| history = self.env['document.page.history'] | ||
| if self.is_approval_required(page): | ||
| history_ids = history.search( | ||
| [ | ||
| ('page_id', '=', page.id), | ||
| ('state', '=', 'approved') | ||
| ], | ||
| limit=1, | ||
| order='create_date DESC' | ||
| ) | ||
| content = history_ids.content | ||
| else: | ||
| content = page.content | ||
| page.display_content = content | ||
|
|
||
| @api.multi | ||
| def _get_approved_date(self): | ||
| """Return the approved date of a document.""" | ||
| for page in self: | ||
| approved_date = False | ||
| if self.is_approval_required(page): | ||
| history = self.env['document.page.history'] | ||
| history_ids = history.search( | ||
| [ | ||
| ('page_id', '=', page.id), | ||
| ('state', '=', 'approved') | ||
| ], | ||
| limit=1, | ||
| order='create_date DESC' | ||
| ) | ||
| approved_date = history_ids.approved_date | ||
| page.approved_date = approved_date | ||
|
|
||
| @api.multi | ||
| def _get_approved_uid(self): | ||
| """Return the user's id of the approved user.""" | ||
| for page in self: | ||
| approved_uid = False | ||
| if self.is_approval_required(page): | ||
| history = self.env['document.page.history'] | ||
| history_ids = history.search( | ||
| [ | ||
| ('page_id', '=', page.id), | ||
| ('state', '=', 'approved') | ||
| ], | ||
| limit=1, | ||
| order='create_date DESC' | ||
| ) | ||
| approved_uid = history_ids.approved_uid.id | ||
| page.approved_uid = approved_uid | ||
|
|
||
| @api.multi | ||
| def _is_parent_approval_required(self): | ||
| """Check if the document required approval base on his parrent.""" | ||
| for page in self: | ||
| page.is_parent_approval_required = self.is_approval_required(page) | ||
|
|
||
| def is_approval_required(self, page): | ||
| """Check if a document required approval.""" | ||
| if page: | ||
| res = page.approval_required | ||
| res = res or self.is_approval_required(page.parent_id) | ||
| else: | ||
| res = False | ||
| return res | ||
|
|
||
| display_content = fields.Text( | ||
| compute=_get_display_content, | ||
| string='Displayed Content' | ||
| ) | ||
|
|
||
| approved_date = fields.Datetime( | ||
| compute=_get_approved_date, | ||
| string="Approved Date" | ||
| ) | ||
|
|
||
| approved_uid = fields.Many2one( | ||
| 'res.users', | ||
| compute=_get_approved_uid, | ||
| string="Approved By", | ||
| ) | ||
|
|
||
| approval_required = fields.Boolean("Require approval") | ||
|
|
||
| is_parent_approval_required = fields.Boolean( | ||
| compute=_is_parent_approval_required, | ||
| string="parent approval" | ||
| ) | ||
|
|
||
| approver_gid = fields.Many2one( | ||
| "res.groups", | ||
| "Approver group" | ||
| ) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't use module docstrings