Openerp Rederecting to other view on button click

343 Views Asked by At

I am trying to execute a function to populate new tree view. I need to execute the function and redirecting to the tree view done by only one button. Please help me with doing it.

My function is

 def populate_values(self, cr, uid, ids, context={}):

        result = {'value': {}}
        today = datetime.datetime.now()
        tt=today.date()
        emps=self.pool.get('hr.employee').search(cr, uid, [('current_status','=','active')], context=context)
        if emps:
            #...
            #...
            #...
            return {
                 'name':_("leave.score.card.tree"),
                 'view_mode': 'tree',
                 'view_id': '%(open_leave_score_card_tree)d',
                 'views': [('tree'),('graph')],
                 'view_type': 'graph',
                'res_id' : '%(open_leave_score_card)d', 
                 'res_model': 'leave.score.card', 
                'type': 'ir.actions.act_window',
                 'target': 'new', 
             }

Form view with the button

<record model="ir.ui.view" id="edit_leave_score_card_form">
            <field name="name">leave.score.card.form</field>
            <field name="model">leave.score.card</field>
            <field name="arch" type="xml">
                <form string="Leave Score Card" create="false" edit="false" version="7.0">
                 <sheet>
                    <button string="Generate" type="object" name="populate_values" class="oe_highlight"/>                           


                   </sheet> 
                   </form>
            </field>
        </record>

The tree view where I need to get redirected

<record model="ir.ui.view" id="view_leave_score_card_tree">
            <field name="name">leave.score.card.tree</field>
            <field name="model">leave.score.card</field>
            <field name="arch" type="xml">

            <tree string="Leave Score Card To the Date" create="false" edit="false" colors="red:available_medical &lt; 0.0; red:available_casual &lt; 0.0">                     
                        <field name="employee_id"  />
                        <field name="category_id" />
                        <field name="taken_medical" />
                        <field name="taken_casual" />
                        <field name="taken_annual" />
                        <field name="taken_spc" />      
                        <field name="available_medical" />
                        <field name="available_casual" />
                        <field name="available_annual" />
                        <field name="available_spc" />
                        <field name="sec_id" invisible="1" />


                </tree>
            </field>
        </record>

Action windows

<record id="open_leave_score_card" model="ir.actions.act_window">
            <field name="name">Leave Score Card Form</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">leave.score.card</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>

        </record>

        <record id="open_leave_score_card_tree" model="ir.actions.act_window">
            <field name="name">Leave Score Card Tree</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">leave.score.card</field>
            <field name="view_type">form</field>            
            <field name="view_mode">tree,graph</field>
            <field name="view_id" eval="view_leave_score_card_tree"/>
            <field name="search_view_id" ref="view_leave_score_card_search"/>
        </record>

Please let me know where I did wrong because the button call totally not redirecting

1

There are 1 best solutions below

0
On

No need to write any function for that. I understand that you want to print score card of the employee while you click on the button.

Update action of score card as follow.

<record id="open_leave_score_card_tree" model="ir.actions.act_window">
    <field name="name">Leave Score Card Tree</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">leave.score.card</field>
    <field name="view_type">form</field>            
    <field name="view_mode">tree,graph</field>
    <field name="view_id" eval="view_leave_score_card_tree"/>
    <field name="search_view_id" ref="view_leave_score_card_search"/>
    <field name="context">{
                'search_default_employee_id': [active_id],
                'default_employee_id': active_id,
                'active_test': False,}
    </field>
</record>

And then change button code in xml as follow.

<button string="Generate" type="action" name="%(open_leave_score_card_tree)d" class="oe_highlight"/>                           

Remove function no need it. And if you want to do it with the existing code without changing anything then set domain in dynamic action which you are returning from the function.

In your function you have written wrong view_type, it should be form not graph if you want to return list view then.

def populate_values(self, cr, uid, ids, context={}):
    today = datetime.datetime.now()
    tt=today.date()
    emps=self.pool.get('hr.employee').search(cr, uid, [('current_status','=','active')], context=context)
    if emps:
        return {
            'name':_("leave.score.card.tree"),
            'view_mode': 'tree',
            'view_id': '%(open_leave_score_card_tree)d',
            'views': [('tree'),('graph')],
            'view_type': 'form',
            'res_id' : '%(open_leave_score_card)d', 
            'res_model': 'leave.score.card', 
            'type': 'ir.actions.act_window',
            'domain' : [('employee_id','in', ids)],
            'target': 'new', 
        }
    return True