I have created my own model for Monthly Appraisal with simple workflow.
Any employee can create Monthly evaluation save it and submit (draft --> confirm --> validate1) it.
Submitted evaluation will acknowledge by supervisor (validate 1 --> validate)
I create that part successfully and once I giving access rights to normal user it stops the workflow at submit (confirm -->validate1) button. Once I connect the normal profile to a admin profile it again working smoothly.
Please help me to solve this since I can't imagine what I did wrong.
Workflow functions
def evaluation_confirm(self, cr, uid, ids, context=None):
#self.hr_mnthly_evaluation(cr, uid, ids, context=context)
eval_id=self.browse(cr, uid, ids[0],context=context).evaluation_id
eval_state=self.browse(cr, uid, ids[0],context=context).state
values = {}
values.update({'state':'confirm'})
ime_super_obj = self.browse(cr, uid, ids ,context)
emp_id = ime_super_obj[0].employee_id.id
emp_obj=self.pool.get('hr.employee')
return self.write(cr, uid, ids, {'state': 'confirm'})
def evaluation_first_validate(self, cr, uid, ids, context=None):
values = {}
values.update({'state':'validate1'})
return self.write(cr, uid, ids, values)
def evaluation_validate(self, cr, uid, ids, context=None):
obj_emp = self.pool.get('hr.employee')
state = self.browse(cr, uid, ids[0],context=context).state
sup_id=self.browse(cr, uid, ids[0],context=context).parent_id.id
idss = obj_emp.search(cr, uid, [('user_id', '=', uid)])
log_user_uid=self.browse(cr, uid, ids[0],context=context).employee_id.id
if (idss[0]==log_user_uid)and(state!='confirm'):
raise osv.except_osv(_('Warning!'),_('You are not allow to acknowledge your own appraisals'))
if idss[0]!=sup_id:
raise osv.except_osv(_('Warning!'),_('Only Immediate Supervisor , can acknowledge the appraisals !'))
obj_emp = self.pool.get('hr.employee')
idss = obj_emp.search(cr, uid, [('user_id', '=', uid)])
values = {}
values.update({'state':'validate'})
return self.write(cr, uid, ids, values)
def evaluation_refuse(self, cr, uid, ids, context=None):
print "workflow validate"
values = {}
values.update({'state':'refuse'})
return self.write(cr, uid, ids, values)
Given Access Rights
Given Record Rules
Once I click on "Submit"(Confirm) button the log looks like
Workflow
<?xml version="1.0" ?>
<openerp>
<data>
<record model="workflow" id="wkf_mnthly_evaluation">
<field name="name">hr.wkf.mnthly.evaluation</field>
<field name="osv">hr.mnthly.evaluation</field>
<field name="on_create">True</field>
</record>
<record model="workflow.activity" id="act_draft"> <!-- draft -->
<field name="wkf_id" ref="wkf_mnthly_evaluation" />
<field name="flow_start">True</field>
<field name="name">draft</field>
</record>
<record model="workflow.activity" id="act_confirm"> <!-- confirm -->
<field name="wkf_id" ref="wkf_mnthly_evaluation" />
<field name="name">confirm</field>
<field name="kind">function</field>
<field name="action">evaluation_confirm()</field>
<field name="split_mode">OR</field>
</record>
<record model="workflow.activity" id="act_validate1"> <!-- first_validate -->
<field name="wkf_id" ref="wkf_mnthly_evaluation" />
<field name="name">validate1</field>
<field name="kind">function</field>
<field name="action">evaluation_first_validate()</field>
<field name="split_mode">OR</field>
</record>
<record model="workflow.activity" id="act_validate"> <!-- validate -->
<field name="wkf_id" ref="wkf_mnthly_evaluation" />
<field name="name">validate</field>
<field name="kind">function</field>
<field name="action">evaluation_validate()</field>
</record>
<record model="workflow.activity" id="act_refuse"> <!-- refused -->
<field name="wkf_id" ref="wkf_mnthly_evaluation" />
<field name="name">refuse</field>
<field name="flow_stop">True</field>
<field name="kind">function</field>
<field name="action">evaluation_refuse()</field>
</record>
<!--
workflow transition
-->
<record model="workflow.transition" id="evaluation_draft2confirm"> <!-- 1. draft->confirm (Save BTN - no action) -->
<field name="act_from" ref="act_draft" />
<field name="act_to" ref="act_confirm" />
</record>
<record model="workflow.transition" id="evaluation_confirm2validate1"> <!-- 2. confirm->validate1 (Request Confirm BTN)-->
<field name="act_from" ref="act_confirm" />
<field name="act_to" ref="act_validate1" />
<field name="signal">validate1</field>
<field name="group_id" ref="base.group_hr_user"/>
</record>
<record model="workflow.transition" id="evaluation_validate12validate2"> <!-- 2. validate1 -> validate2 (Manager Approval BTN)-->
<field name="act_from" ref="act_validate1" />
<field name="act_to" ref="act_validate" />
<field name="signal">validate2</field>
<field name="condition">True</field>
<field name="group_id" ref="base.group_hr_user"/>
</record>
<!-- //////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<record model="workflow.transition" id="evaluation_confirm2refuse"> <!-- 2. submitted->refused (refuse signal) -->
<field name="act_from" ref="act_confirm" />
<field name="act_to" ref="act_refuse" />
<field name="signal">refuse</field>
<field name="condition">True</field>
<field name="group_id" ref="base.group_hr_user"/>
</record>
<record model="workflow.transition" id="evaluation_validate12refuse"> <!-- 2. submitted->refused (refuse signal) -->
<field name="act_from" ref="act_validate1" />
<field name="act_to" ref="act_refuse" />
<field name="signal">refuse</field>
<field name="condition">True</field>
<field name="group_id" ref="base.group_hr_user"/>
</record>
</data>
</openerp>
Buttons
<header>
<button string="Submit" name="validate1" states="confirm" type="workflow" class="oe_highlight"/>
<button string="Manager Acknowledgement" name="validate2" states="validate1" type="workflow" class="oe_highlight" />
<button string="Refuse" name="refuse" states="validate1" type="workflow"/>
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate1,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/>
</header>
Changing workflow state to validate
requires to be member of base.group_hr_user
.
It worked when logging with admin user and not with aa normal user because record rules do not apply to the Administrator user
(although access rules do).
Just add user to base.group_hr_user
and give him access to the model then he should be able to change workflow state from validate1
to validate
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.