[document_page_approval] Rename classes and files to match model names, and removed workflow engine.

This commit is contained in:
Iván Todorovich 2018-04-20 10:42:49 -03:00
parent adc4b0ccd8
commit ff803f179d
7 changed files with 61 additions and 135 deletions

View File

@ -32,7 +32,6 @@
], ],
'data': [ 'data': [
'data/email_template.xml', 'data/email_template.xml',
'workflows/document_page_approval.xml',
'views/document_page_approval.xml', 'views/document_page_approval.xml',
'security/document_page_security.xml', 'security/document_page_security.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',

View File

@ -1,2 +1,2 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from . import document_page_approval, document_page_history_workflow from . import document_page, document_page_history

View File

@ -23,7 +23,7 @@ from openerp import models, fields, api
from ast import literal_eval from ast import literal_eval
class DocumentPageApproval(models.Model): class DocumentPage(models.Model):
"""Useful to know the state of a document.""" """Useful to know the state of a document."""
_inherit = 'document.page' _inherit = 'document.page'
@ -138,8 +138,8 @@ class DocumentPageApproval(models.Model):
@api.multi @api.multi
def _create_history(self, vals): def _create_history(self, vals):
res = super(DocumentPageApproval, self)._create_history(vals) res = super(DocumentPage, self)._create_history(vals)
res.signal_workflow('document_page_auto_confirm') res.action_to_approve()
@api.multi @api.multi
def action_changes_pending_approval(self): def action_changes_pending_approval(self):

View File

@ -19,13 +19,12 @@
# #
############################################################################## ##############################################################################
from datetime import datetime
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
from openerp import models, fields, api from openerp import models, fields, api
from openerp.exceptions import UserError
class DocumentPageHistoryWorkflow(models.Model): class DocumentPageHistory(models.Model):
"""Useful to manage edition's workflow on a document.""" """Useful to manage edition's workflow on a document."""
_name = 'document.page.history' _name = 'document.page.history'
@ -37,6 +36,7 @@ class DocumentPageHistoryWorkflow(models.Model):
('approved', 'Approved'), ('approved', 'Approved'),
('cancelled', 'Cancelled')], ('cancelled', 'Cancelled')],
'Status', 'Status',
default='draft',
readonly=True, readonly=True,
) )
@ -68,37 +68,67 @@ class DocumentPageHistoryWorkflow(models.Model):
) )
@api.multi @api.multi
def page_approval_draft(self): def action_draft(self):
"""Set a change request as draft""" """Set a change request as draft"""
self.write({'state': 'draft'}) for rec in self:
if not rec.state == 'cancelled':
raise UserError(
_('You need to cancel it before reopening.'))
if not (rec.am_i_owner or rec.am_i_approver):
raise UserError(
_('You are not authorized to do this.\r\n'
'Only owners or approvers can reopen Change Requests.'))
rec.write({'state': 'draft'})
@api.multi @api.multi
def page_approval_to_approve(self): def action_to_approve(self):
"""Set a change request as to approve""" """Set a change request as to approve"""
self.write({'state': 'to approve'})
template = self.env.ref( template = self.env.ref(
'document_page_approval.email_template_new_draft_need_approval') 'document_page_approval.email_template_new_draft_need_approval')
approver_gid = self.env.ref( approver_gid = self.env.ref(
'document_page_approval.group_document_approver_user') 'document_page_approval.group_document_approver_user')
for rec in self: for rec in self:
if rec.state != 'draft':
raise UserError(
_("Can't approve pages in '%s' state.") % rec.state)
if not (rec.am_i_owner or rec.am_i_approver):
raise UserError(
_('You are not authorized to do this.\r\n'
'Only owners or approvers can request approval.'))
# request approval
if rec.is_approval_required: if rec.is_approval_required:
rec.write({'state': 'to approve'})
guids = [g.id for g in rec.page_id.approver_group_ids] guids = [g.id for g in rec.page_id.approver_group_ids]
users = self.env['res.users'].search([ users = self.env['res.users'].search([
('groups_id', 'in', guids), ('groups_id', 'in', guids),
('groups_id', 'in', approver_gid.id)]) ('groups_id', 'in', approver_gid.id)])
rec.message_subscribe_users([u.id for u in users]) rec.message_subscribe_users([u.id for u in users])
rec.message_post_with_template(template.id) rec.message_post_with_template(template.id)
else:
# auto-approve if approval is not required
rec.action_approve()
@api.multi @api.multi
def page_approval_approved(self): def action_approve(self):
"""Set a change request as approved.""" """Set a change request as approved."""
self.write({
'state': 'approved',
'approved_date': datetime.now().strftime(
DEFAULT_SERVER_DATETIME_FORMAT),
'approved_uid': self.env.uid
})
for rec in self: for rec in self:
if rec.state not in ['draft', 'to approve']:
raise UserError(
_("Can't approve page in '%s' state.") % rec.state)
if not rec.am_i_approver:
raise UserError(_(
'You are not authorized to do this.\r\n'
'Only approvers with these groups can approve this: '
) % ', '.join(
[g.display_name
for g in rec.page_id.approver_group_ids])
)
# Update state
rec.write({
'state': 'approved',
'approved_date': fields.datetime.now(),
'approved_uid': self.env.uid,
})
# Trigger computed field update # Trigger computed field update
rec.page_id._compute_history_head() rec.page_id._compute_history_head()
# Notify state change # Notify state change
@ -117,7 +147,7 @@ class DocumentPageHistoryWorkflow(models.Model):
) )
@api.multi @api.multi
def page_approval_cancelled(self): def action_cancel(self):
"""Set a change request as cancelled.""" """Set a change request as cancelled."""
self.write({'state': 'cancelled'}) self.write({'state': 'cancelled'})
for rec in self: for rec in self:

View File

@ -48,7 +48,7 @@ class TestDocumentPageApproval(common.TransactionCase):
self.assertTrue(chreq.am_i_approver) self.assertTrue(chreq.am_i_approver)
# approve # approve
chreq.signal_workflow('page_approval_approve') chreq.action_approve()
self.assertEqual(chreq.state, 'approved') self.assertEqual(chreq.state, 'approved')
self.assertEqual(chreq.content, page.content) self.assertEqual(chreq.content, page.content)
@ -59,7 +59,7 @@ class TestDocumentPageApproval(common.TransactionCase):
('page_id', '=', page.id), ('page_id', '=', page.id),
('state', '!=', 'approved') ('state', '!=', 'approved')
])[0] ])[0]
chreq.signal_workflow('page_approval_approve') chreq.action_approve()
self.assertEqual(page.content, 'New content') self.assertEqual(page.content, 'New content')
def test_change_request_auto_approve(self): def test_change_request_auto_approve(self):
@ -75,7 +75,7 @@ class TestDocumentPageApproval(common.TransactionCase):
self.history_obj.search([ self.history_obj.search([
('page_id', '=', page.id), ('page_id', '=', page.id),
('state', '!=', 'approved') ('state', '!=', 'approved')
]).signal_workflow('page_approval_approve') ]).action_approve()
# new change request from scrath # new change request from scrath
chreq = self.history_obj.create({ chreq = self.history_obj.create({
@ -89,25 +89,25 @@ class TestDocumentPageApproval(common.TransactionCase):
self.assertNotEqual(page.approved_date, chreq.approved_date) self.assertNotEqual(page.approved_date, chreq.approved_date)
self.assertNotEqual(page.approved_uid, chreq.approved_uid) self.assertNotEqual(page.approved_uid, chreq.approved_uid)
chreq.signal_workflow('page_approval_to_approve') chreq.action_to_approve()
self.assertEqual(chreq.state, 'to approve') self.assertEqual(chreq.state, 'to approve')
self.assertNotEqual(page.content, chreq.content) self.assertNotEqual(page.content, chreq.content)
self.assertNotEqual(page.approved_date, chreq.approved_date) self.assertNotEqual(page.approved_date, chreq.approved_date)
self.assertNotEqual(page.approved_uid, chreq.approved_uid) self.assertNotEqual(page.approved_uid, chreq.approved_uid)
chreq.signal_workflow('page_approval_cancel') chreq.action_cancel()
self.assertEqual(chreq.state, 'cancelled') self.assertEqual(chreq.state, 'cancelled')
self.assertNotEqual(page.content, chreq.content) self.assertNotEqual(page.content, chreq.content)
self.assertNotEqual(page.approved_date, chreq.approved_date) self.assertNotEqual(page.approved_date, chreq.approved_date)
self.assertNotEqual(page.approved_uid, chreq.approved_uid) self.assertNotEqual(page.approved_uid, chreq.approved_uid)
chreq.signal_workflow('page_approval_reopen') chreq.action_draft()
self.assertEqual(chreq.state, 'draft') self.assertEqual(chreq.state, 'draft')
self.assertNotEqual(page.content, chreq.content) self.assertNotEqual(page.content, chreq.content)
self.assertNotEqual(page.approved_date, chreq.approved_date) self.assertNotEqual(page.approved_date, chreq.approved_date)
self.assertNotEqual(page.approved_uid, chreq.approved_uid) self.assertNotEqual(page.approved_uid, chreq.approved_uid)
chreq.signal_workflow('page_approval_approve') chreq.action_approve()
self.assertEqual(chreq.state, 'approved') self.assertEqual(chreq.state, 'approved')
self.assertEqual(page.content, chreq.content) self.assertEqual(page.content, chreq.content)
self.assertEqual(page.approved_date, chreq.approved_date) self.assertEqual(page.approved_date, chreq.approved_date)

View File

@ -10,19 +10,19 @@
<sheet position="before"> <sheet position="before">
<header> <header>
<!-- draft -> to approve --> <!-- draft -> to approve -->
<button name="page_approval_to_approve" string="Send to Review" class="oe_highlight" <button name="action_to_approve" type="object" string="Send to Review" class="oe_highlight"
attrs="{'invisible':['|','|',('is_approval_required','=',False),('am_i_owner','=',False),('state', 'not in', ['draft'])]}"/> attrs="{'invisible':['|','|',('is_approval_required','=',False),('am_i_owner','=',False),('state', 'not in', ['draft'])]}"/>
<!-- approve if i am approver --> <!-- approve if i am approver -->
<button name="page_approval_approve" string="Approve" class="oe_highlight" <button name="action_approve" type="object" string="Approve" class="oe_highlight"
attrs="{'invisible':['|','|',('is_approval_required','=',False),('am_i_approver','=',False),('state','not in',['draft','to approve'])]}"/> attrs="{'invisible':['|','|',('is_approval_required','=',False),('am_i_approver','=',False),('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 name="page_approval_approve" string="Approve" class="oe_highlight" <button name="action_approve" type="object" string="Approve" class="oe_highlight"
attrs="{'invisible':['|','|',('is_approval_required','=',True),('am_i_owner','=',False),('state','not in',['draft', 'to approve'])]}"/> attrs="{'invisible':['|','|',('is_approval_required','=',True),('am_i_owner','=',False),('state','not in',['draft', 'to approve'])]}"/>
<!-- cancel if i am owner or approver --> <!-- cancel if i am owner or approver -->
<button name="page_approval_cancel" string="Cancel" <button name="action_cancel" type="object" string="Cancel"
attrs="{'invisible':['|','&amp;',('am_i_owner','=',False),('am_i_approver','=',False),('state','not in',['draft','to approve'])]}"/> attrs="{'invisible':['|','&amp;',('am_i_owner','=',False),('am_i_approver','=',False),('state','not in',['draft','to approve'])]}"/>
<!-- reopen if i am owner or approver --> <!-- reopen if i am owner or approver -->
<button name="page_approval_reopen" string="Back to draft" <button name="action_draft" type="object" string="Back to draft"
attrs="{'invisible':['|','&amp;',('am_i_owner','=',False),('am_i_approver','=',False),('state','not in',['cancelled'])]}"/> attrs="{'invisible':['|','&amp;',('am_i_owner','=',False),('am_i_approver','=',False),('state','not in',['cancelled'])]}"/>
<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"/>

View File

@ -1,103 +0,0 @@
<?xml version="1.0"?>
<odoo>
<record model="workflow" id="wkf_document_page_history_aproval">
<field name="name">document.page.history.aproval.wkf</field>
<field name="osv">document.page.history</field>
<field name="on_create">True</field>
</record>
<record model="workflow.activity" id="act_draft">
<field name="wkf_id" ref="wkf_document_page_history_aproval" />
<field name="flow_start">True</field>
<field name="name">draft</field>
<field name="kind">function</field>
<field name="action">page_approval_draft()</field>
</record>
<record model="workflow.activity" id="act_to_approve">
<field name="wkf_id" ref="wkf_document_page_history_aproval" />
<field name="name">to approve</field>
<field name="kind">function</field>
<field name="action">page_approval_to_approve()</field>
</record>
<record model="workflow.activity" id="act_approved">
<field name="wkf_id" ref="wkf_document_page_history_aproval" />
<field name="name">approved</field>
<field name="kind">function</field>
<field name="action">page_approval_approved()</field>
<field name="flow_stop">True</field>
</record>
<record model="workflow.activity" id="act_cancelled">
<field name="wkf_id" ref="wkf_document_page_history_aproval" />
<field name="name">cancelled</field>
<field name="kind">function</field>
<field name="action">page_approval_cancelled()</field>
</record>
<!-- Transitions -->
<record model="workflow.transition" id="tdr">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_to_approve"/>
<field name="condition">am_i_owner</field>
<field name="signal">page_approval_to_approve</field>
</record>
<record model="workflow.transition" id="tda">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_approved"/>
<field name="condition">am_i_approver</field>
<field name="signal">page_approval_approve</field>
</record>
<record model="workflow.transition" id="tra">
<field name="act_from" ref="act_to_approve"/>
<field name="act_to" ref="act_approved"/>
<field name="condition">am_i_approver</field>
<field name="signal">page_approval_approve</field>
</record>
<record model="workflow.transition" id="tad">
<field name="act_from" ref="act_approved"/>
<field name="act_to" ref="act_draft"/>
<field name="condition">am_i_approver</field>
<field name="signal">edit</field>
</record>
<record model="workflow.transition" id="tdc">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_cancelled"/>
<field name="condition">am_i_owner</field>
<field name="signal">page_approval_cancel</field>
</record>
<record model="workflow.transition" id="trc">
<field name="act_from" ref="act_to_approve"/>
<field name="act_to" ref="act_cancelled"/>
<field name="condition">am_i_owner or am_i_approver</field>
<field name="signal">page_approval_cancel</field>
</record>
<record model="workflow.transition" id="tcd">
<field name="act_from" ref="act_cancelled"/>
<field name="act_to" ref="act_draft"/>
<field name="condition">am_i_owner or am_i_approver</field>
<field name="signal">page_approval_reopen</field>
</record>
<!-- Automatic Transitions for change requests created directly from documents -->
<record model="workflow.transition" id="tda_auto">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_approved"/>
<field name="condition">not is_approval_required</field>
<field name="signal">document_page_auto_confirm</field>
</record>
<record model="workflow.transition" id="tdr_auto">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_to_approve"/>
<field name="condition">is_approval_required</field>
<field name="signal">document_page_auto_confirm</field>
</record>
</odoo>