Document Page Approval

document_page_approval
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/19.0/document_page_approval
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Bhavesh Heliconia
WEBSITE
WEBSITEhttps://github.com/OCA/knowledge
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - document_knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds a workflow to approve page modifications and show the
approved version by default.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history list Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' recursive=True string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')]
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' recursive=True args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
  • can_user_approve_this_page(self, user)
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    Set a change request as approved.
  • action_cancel(self)
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    Set a change request as draft, cancelling it first
  • action_draft(self)
    Set a change request as draft
  • action_to_approve(self)
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/18.0/document_page_approval
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSEnric Tobella, Víctor Martínez, Weblate, OCA-git-bot, Andrea Stirpe, oca-ci, Bhavesh Heliconia
WEBSITE
WEBSITEhttps://github.com/OCA/knowledge
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - document_knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - web_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds a workflow to approve page modifications and show the
approved version by default.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history list Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' recursive=True string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')]
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' recursive=True args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
  • can_user_approve_this_page(self, user)
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    Set a change request as approved.
  • action_cancel(self)
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    Set a change request as draft, cancelling it first
  • action_draft(self)
    Set a change request as draft
  • action_to_approve(self)
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/17.0/document_page_approval
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/knowledge
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - document_knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds a workflow to approve page modifications and show the
approved version by default.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' recursive=True string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')]
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' recursive=True args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
  • can_user_approve_this_page(self, user)
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    Set a change request as approved.
  • action_cancel(self)
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    Set a change request as draft, cancelling it first
  • action_draft(self)
    Set a change request as draft
  • action_to_approve(self)
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/16.0/document_page_approval
VERSION
VERSION 2.0.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSEnric Tobella, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, fkantelberg, FernandoRomera
WEBSITE
WEBSITEhttps://github.com/OCA/knowledge
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:51
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - document_knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - web_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' recursive=True string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')]
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' recursive=True args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
  • can_user_approve_this_page(self, user)
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    Set a change request as approved.
  • action_cancel(self)
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    Set a change request as draft, cancelling it first
  • action_draft(self)
    Set a change request as draft
  • action_to_approve(self)
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/15.0/document_page_approval
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, fkantelberg
WEBSITE
WEBSITEhttps://github.com/OCA/knowledge
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:37
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' recursive=True string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')]
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' recursive=True args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
  • can_user_approve_this_page(self, user)
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    Set a change request as approved.
  • action_cancel(self)
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    Set a change request as draft, cancelling it first
  • action_draft(self)
    Set a change request as draft
  • action_to_approve(self)
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/14.0/document_page_approval
VERSION
VERSION 1.0.3
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSPedro M. Baeza, oca-travis, Weblate, OCA-git-bot, oca-ci, fkantelberg, SergiCForgeFlow, Kevin Luna, Núria Sancho, Laurence Lars Labusch
WEBSITE
WEBSITEhttps://github.com/OCA/knowledge
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')]
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
  • can_user_approve_this_page(self, user)
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
    args: 'Approved Date'
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    Set a change request as approved.
  • action_cancel(self)
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    Set a change request as draft, cancelling it first
  • action_draft(self)
    Set a change request as draft
  • action_to_approve(self)
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/13.0/document_page_approval
VERSION
VERSION 1.3.1
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSDenis Roussel, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, flachica
WEBSITE
WEBSITEhttps://github.com/OCA/knowledge
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')] order='approved_date DESC'
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
  • can_user_approve_this_page(self, user)
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
    args: 'Approved Date'
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    Set a change request as approved.
  • action_cancel(self)
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    Set a change request as draft, cancelling it first
  • action_draft(self)
    Set a change request as draft
  • action_to_approve(self)
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/12.0/document_page_approval
VERSION
VERSION 1.0.5
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Victor M.M. Torres, Marcel Savegnago
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')] order='approved_date DESC'
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
    @api.multi
  • can_user_approve_this_page(self, user)
    @api.multi
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
    args: 'Approved Date'
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    @api.multi
    Set a change request as approved.
  • action_cancel(self)
    @api.multi
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    @api.multi
    Set a change request as draft, cancelling it first
  • action_draft(self)
    @api.multi
    Set a change request as draft
  • action_to_approve(self)
    @api.multi
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/11.0/document_page_approval
VERSION
VERSION 2.1.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSmreficent, OCA Transbot, Nicolás Mac Rouillon, oca-travis, OCA-git-bot, Iván Todorovich, Gabriela Mogollon
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')] order='approved_date DESC'
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
    @api.multi
  • can_user_approve_this_page(self, user)
    @api.multi
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
    args: 'Approved Date'
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    @api.multi
    Set a change request as approved.
  • action_cancel(self)
    @api.multi
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    @api.multi
    Set a change request as draft, cancelling it first
  • action_draft(self)
    @api.multi
    Set a change request as draft
  • action_to_approve(self)
    @api.multi
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/10.0/document_page_approval
VERSION
VERSION 2.2.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSMaxime Chambreuil, Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, OCA-git-bot, Iván Todorovich
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')] order='approved_date DESC'
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
    @api.multi
  • can_user_approve_this_page(self, user)
    @api.multi
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
    args: 'Approved Date'
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    @api.multi
    Set a change request as approved.
  • action_cancel(self)
    @api.multi
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    @api.multi
    Set a change request as draft, cancelling it first
  • action_draft(self)
    @api.multi
    Set a change request as draft
  • action_to_approve(self)
    @api.multi
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/9.0/document_page_approval
VERSION
VERSION 2.1.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSMaxime Chambreuil, Pedro M. Baeza, Stéphane Bidoul (ACSONE), OCA Transbot, Maxime Chambreuil - http://www.savoirfairelinux.com, oca-travis, Weblate, OCA-git-bot, Gervais Naoussi
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
    - knowledge
odoo/odoo:
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - bus
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_filter document.page.history.search document.page.history field Inherits document_page.view_wiki_history_filter
view_wiki_history_tree_inherit document.page.history.tree document.page.history tree Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page sheet Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history sheet Inherits document_page.wiki_history_form
wiki_history_form_inherit_manager document.page.history.form document.page.history field Inherits wiki_history_form_inherit
Models touched (2)

New fields (10)
  • am_i_approver Boolean
    compute='_compute_am_i_approver'
  • approval_required Boolean
    help='Require approval for changes on this page or its child pages.' args: 'Require approval'
  • approved_date Datetime
    index=True readonly=True related='history_head.approved_date' store=True args: 'Approved Date'
  • approved_uid Many2one → res.users
    index=True readonly=True related='history_head.approved_uid' store=True args: 'res.users', 'Approved by'
  • approver_gid Many2one → res.groups
    help='Users must also belong to the Approvers group' args: 'res.groups', 'Approver group'
  • approver_group_ids Many2many → res.groups
    compute='_compute_approver_group_ids' help='Groups that can approve changes to this document' string='Approver groups' args: 'res.groups'
  • has_changes_pending_approval Boolean
    compute='_compute_has_changes_pending_approval' string='Has changes pending approval'
  • history_ids One2many
    domain=[('state', '=', 'approved')] order='approved_date DESC'
  • is_approval_required Boolean
    compute='_compute_is_approval_required' help='If true, changes of this page require approval' args: 'Approval required'
  • user_has_drafts Boolean
    compute='_compute_user_has_drafts' string='User has drafts?'
Public methods (2)
  • action_changes_pending_approval(self)
    @api.multi
  • can_user_approve_this_page(self, user)
    @api.multi
    Check if a user can approve this page.

New fields (7)
  • am_i_approver Boolean
    related='page_id.am_i_approver' related_sudo=False
  • am_i_owner Boolean
    compute='_compute_am_i_owner'
  • approved_date Datetime
    args: 'Approved Date'
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved by'
  • is_approval_required Boolean
    related='page_id.is_approval_required' string='Approval required'
  • page_url Text
    compute='_compute_page_url' string='URL'
  • state Selection
    default='draft' readonly=True args: [('draft', 'Draft'), ('to approve', 'Pending Approval'), ('approved', 'Approved'), ('cancelled', 'Cancelled')], 'Status'
Public methods (5)
  • action_approve(self)
    @api.multi
    Set a change request as approved.
  • action_cancel(self)
    @api.multi
    Set a change request as cancelled.
  • action_cancel_and_draft(self)
    @api.multi
    Set a change request as draft, cancelling it first
  • action_draft(self)
    @api.multi
    Set a change request as draft
  • action_to_approve(self)
    @api.multi
    Set a change request as to approve
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/8.0/document_page_approval
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSStéphane Bidoul, Alexandre Fayolle, Sandy Carter, Stéphane Bidoul (ACSONE), OCA Transbot, Loïc Faure-Lacroix, Maxime Chambreuil - http://www.savoirfairelinux.com, OCA-git-bot, Matjaz Mozetic, Matjaž Mozetič, Glen Sojo
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/knowledge:
    - document_page
odoo/odoo:
    - knowledge
    - base
    - base_setup
    - web_kanban
    - web
    - mail
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
view_category_form_inherit document.page.category.form document.page field Inherits document_page.view_category_form
view_wiki_history_tree_inherit document.page.history.tree document.page.history field Inherits document_page.view_wiki_history_tree
view_wiki_menu_form_inherit document.page.form document.page field Inherits document_page.view_wiki_menu_form
wiki_form_inherit document.page.form document.page field Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history xpath Inherits document_page.wiki_history_form
Models touched (2)

New fields (6)
  • approval_required Boolean
    args: 'Require approval'
  • approved_date Datetime
    compute=_get_approved_date string='Approved Date'
  • approved_uid Many2one → res.users
    compute=_get_approved_uid string='Approved By' args: 'res.users'
  • approver_gid Many2one → res.groups
    args: 'res.groups', 'Approver group'
  • display_content Text
    compute=_get_display_content string='Displayed Content'
  • is_parent_approval_required Boolean
    compute=_is_parent_approval_required string='parent approval'
Public methods (1)
  • is_approval_required(self, page)

New fields (7)
  • approved_date Datetime
    args: 'Approved Date'
  • approved_uid Many2one → res.users
    args: 'res.users', 'Approved By'
  • can_user_approve_page Boolean
    compute=_can_user_approve_page store=False string='can user approve this page'
  • get_approvers_email Text
    compute=_get_approvers_email store=False string='get all approvers email'
  • get_page_url Text
    compute=_get_page_url store=False string='URL'
  • is_parent_approval_required Boolean
    related='page_id.is_parent_approval_required' store=False string='parent approval'
  • state Selection
    readonly=True args: [('draft', 'Draft'), ('approved', 'Approved')], 'Status'
Public methods (5)
  • can_user_approve_this_page(self, page, user)
  • get_approvers_guids(self)
  • get_approvers_guids_for_page(self, page)
  • page_approval_approved(self, cr, uid, ids, context=None)
  • page_approval_draft(self, cr, uid, ids, context=None)
REPOSITORY
REPOSITORYOCA/knowledge
GIT
GIThttps://github.com/OCA/knowledge.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/knowledge/tree/7.0/document_page_approval
VERSION
VERSION 1.0
CATEGORY
CATEGORYKnowledge Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Savoir-faire Linux
COMMITTERS
COMMITTERSAlexandre Fayolle, Sandy Carter, Holger Brunn, Maxime Chambreuil, Jonatan Cloutier, Pedro M. Baeza, Stéphane Bidoul (ACSONE), OCA Transbot, moylop260
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - document_page
    - knowledge
    - base
    - base_setup
    - web_kanban
    - web
    - email_template
    - mail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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.
    

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_wiki_history_tree_inherit document.page.history.tree document.page.history field Inherits document_page.view_wiki_history_tree
wiki_form_inherit document.page.form document.page field Inherits document_page.view_wiki_form
wiki_history_form_inherit document.page.history.form document.page.history xpath Inherits document_page.wiki_history_form
Models touched (2)

New fields (0)

No new fields.

Public methods (1)
  • is_approval_required(self, page)

New fields (0)

No new fields.

Public methods (8)
  • can_user_approve_page(self, cr, uid, ids, name, args, context=None)
  • can_user_approve_this_page(self, page, user)
  • get_approvers_email(self, cr, uid, ids, name, args, context)
  • get_approvers_guids(self, cr, uid, ids, name, args, context=None)
  • get_approvers_guids_for_page(self, page)
  • get_page_url(self, cr, uid, ids, name, args, context)
  • page_approval_approved(self, cr, uid, ids, context=None)
  • page_approval_draft(self, cr, uid, ids, context=None)