Search code examples
javascriptlistviewodooodoo-11

Call action(Function) on List View Button for odoo 11


I've added a button on list view near create and import button. Now I want to apply action on that button but function not calling on that button. The button is visible on the list view and also file called, I tested with alert. First alert working fine but ListView.include alert not working.

My js and XML code is here:

<?xml version="1.0" encoding="UTF-8"?>
<templates>
    <t t-extend="ListView.buttons" id="template" xml:space="preserve">
        <t t-jquery="button.o_list_button_add" t-operation="after">
            <button t-if="widget.model != 'account.analytic.line'" class="btn btn-primary btn-sm sync_button"
                    type="button" >HELP
            </button>
        </t>
    </t>
</templates>

Js file:

odoo.define('custom_project.web_export_view', function (require){
"use strict";
var core = require('web.core');
var ListView = require('web.ListView');
var QWeb = core.qweb;
alert('Help1');
console.log('testtt',ListView.include)
ListView.include({
        render_buttons: function($node) {
                alert('Help2');
                var self = this;
                this._super($node);
                    this.$buttons.find('.o_list_tender_button_create').click(this.proxy('tree_view_action'));
        },

        tree_view_action: function () {
        alert('Help2');
        this.do_action({
                type: "ir.actions.act_window",
                name: "product",
                res_model: "product.template",
                views: [[false,'form']],
                target: 'current',
                view_type : 'form',
                view_mode : 'form',
                flags: {'form': {'action_buttons': true, 'options': {'mode': 'edit'}}}
        });
        return { 'type': 'ir.actions.client','tag': 'reload', } }

});
});

Also attaching a screenshot for understanding.

list view button

Can Anyone suggest a solution for this problem?

Thanks in advance


Solution

  • Can you please write like the following:

    XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <templates id="help_btn_template" xml:space="preserve">
    <t t-extend="ListView.buttons" id="template" xml:space="preserve">
        <t t-jquery="button.o_list_button_add" t-operation="after">
            <button t-if="widget.model != 'account.analytic.line'" class="btn btn-primary btn-sm sync_button o_button_help"
                    type="button" >HELP
            </button>
        </t>
    </t>
    

    JS:

    odoo.define('custom_project.web_export_view', function (require) {
    
    "use strict";       
    var core = require('web.core');
    var ListView = require('web.ListView'); 
    var ListController = require("web.ListController");
    
    var includeDict = {
        renderButtons: function () {
            this._super.apply(this, arguments);
            if (this.modelName === "account.analytic.line") {
                var your_btn = this.$buttons.find('button.o_button_help')                
                your_btn.on('click', this.proxy('o_button_help'))
            }
        },
        o_button_help: function(){
            var self = this;
            var state = self.model.get(self.handle, {raw: true});
            return self.do_action({
                name: 'product',
                type: 'ir.actions.act_window',
                res_model: 'product.template', #This model must Transient Model
                target: 'new',
                views: [[false, 'form']], 
                view_type : 'form',
                view_mode : 'form',
                flags: {'form': {'action_buttons': true, 'options': {'mode': 'edit'}}
            });
        }
    };
    ListController.include(includeDict);                
    }); 
    

    I hope this will help you. Thank you.