简体   繁体   中英

Openerp 7: workflow stops when given access rights

I have created my own model for Monthly Appraisal with simple workflow.

在此处输入图片说明

  1. Any employee can create Monthly evaluation save it and submit (draft --> confirm --> validate1) it.

  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM