mirror of
https://github.com/OCA/knowledge.git
synced 2025-07-13 15:34:49 -06:00
[MIG] document_page_approval: Migration to 17.0
This commit is contained in:
parent
49f3835e45
commit
a4972a014d
@ -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()
|
||||||
|
@ -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