Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions document_page_approval/README.rst
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
4 changes: 2 additions & 2 deletions document_page_approval/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# -*- encoding: utf-8 -*-
# -*- coding: utf-8 -*-

Copy link
Copy Markdown
Member

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

##############################################################################
#
# OpenERP, Open Source Management Solution
Expand All @@ -18,4 +18,4 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import document_page_approval
from . import models
28 changes: 6 additions & 22 deletions document_page_approval/__openerp__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# -*- encoding: utf-8 -*-
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
Expand All @@ -21,40 +21,24 @@

{
'name': 'Document Page Approval',
'version': '8.0.1.0.0',
'version': '9.0.1.0.0',
"author": "Savoir-faire Linux,Odoo Community Association (OCA)",
"website": "http://www.savoirfairelinux.com",
"license": "AGPL-3",
'category': 'Knowledge Management',
'description': """
This module adds a workflow to approve page modification and show the approved
version by default.

Scenario
========

* Set a valid email address on the company settings.
* Create a new page category and set an approver group. Make sure users
belonging to that group have valid email addresses.
* 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.
""",
'depends': [
'knowledge',
'document_page',
'email_template',
'mail',
],
'data': [
'data/email_template.xml',
'document_page_wkfl.xml',
'document_page_view.xml',
'workflows/document_page_approval.xml',
'views/document_page_approval.xml',
'security/document_page_security.xml',
'security/ir.model.access.csv',
],
'installable': False,
'installable': True,
'auto_install': False,
'images': [
'images/category.png',
Expand Down
6 changes: 3 additions & 3 deletions document_page_approval/data/email_template.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<?xml version="1.0"?>
<openerp>
<odoo>

<!-- Allow user to make upgrade-proof customizations to email template -->

<data noupdate="1">

<record id="email_template_new_draft_need_approval"
model="email.template">
model="mail.template">
<field name="name">Automated new draft need approval Notification Mail</field>
<field name="email_from">${object.create_uid.company_id.email or 'noreply@localhost.com'}</field>
<field name="subject">New version of "${object.page_id.name}" to approve</field>
Expand All @@ -28,4 +28,4 @@ Odoo</p>]]>
</record>

</data>
</openerp>
</odoo>
2 changes: 2 additions & 0 deletions document_page_approval/models/__init__.py
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
130 changes: 130 additions & 0 deletions document_page_approval/models/document_page_approval.py
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):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why don't you decorate methods iterating on self for page in self with @api.multi?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The 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"
)
Loading