Search code examples
buttonheadertreeviewodooodoo-8

How to add button in tree view header near "Create" and "Import" buttons Odoo 8?


I can successfully add buttons in form view header or in tree view rows, but I want to add a custom button in the treeview header near "Create" and "Import" buttons in Odoo 8. How can I do this?

enter image description here


Solution

  • I find the solution to my problem! I replace the create button if I use project.project model.

    1) I create some js script (static/src/js/task_list.js) with click listener for my button :

     openerp.project = function (instance){
        var QWeb = openerp.web.qweb;
        _t = instance.web._t;
        var self = this;
    openerp.web.ListView.include({
        load_list: function(data) {
            this._super(data);
            if (this.$buttons) {
                this.$buttons.find('.oe_new_button').off().click(this.proxy('do_the_job')) ;
                console.log('Save & Close button method call...');
            }
        },
        do_the_job: function () {
            this.do_action({
                type: "ir.actions.act_window",
                name: "Создание нового проекта",
                res_model: "project.project",
                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',
            }
    }
    });
    }
    

    2) After that, I create static/src/xml/project_button.xml with a template, which replaces the "Create" button if I use project.project model

        <?xml version="1.0" encoding="UTF-8"?>
    <template id="template" xml:space="preserve">
        <t t-extend="ListView.buttons">
                    <t t-jquery="button.oe_list_add" t-operation="replace">
                            <button t-if="widget.model == 'project.project'"  class="oe_button oe_new_button oe_highlight" type="button">Создать новый проект</button>
                            <button t-if="widget.model != 'project.project'" class="oe_button oe_list_add oe_highlight" type="button">Создать</button>
            </t>
        </t>
    </template>
    

    3) After that, I add my js script in web.asset_backend (I create file project/views/project.xml)

        <?xml version="1.0" encoding="utf-8"?>
    <!-- vim:fdn=3:
    -->
    <openerp>
        <data>
            <template id="assets_backend" name="project assets" inherit_id="web.assets_backend">
                <xpath expr="." position="inside">
                    <script type="text/javascript" src="/project/static/src/js/task_list.js"></script>
                </xpath>
            </template>
        </data>
    </openerp>
    

    4) And finally I add in project/__openerp__.py section 'qweb' for static/src/xml/project_button.xml, 'js' for static/src/js/task_list.js and place file views/project.xml in 'data' section.

        'data': [
            'security/project_security.xml',
             ...
            'views/project.xml',
        ],
        'qweb': ['static/src/xml/project_button.xml',],
        ...
        'js': 'static/src/js/task_list.js',
    

    And my button successful replaces old button in project.project model.