odoo在Tree試圖自定義按鈕。。。

XML

<?xml version="1.0" encoding="UTF-8"?>
<template id="template" xml:space="preserve">
  <t t-name="WageManageListView.employee_performance_manage">
        <button type="button" class="btn btn-secondary employee_performance_manage_submit_review">
            批量提交審覈
        </button>
        <button type="button" class="btn btn-secondary employee_performance_manage_review_confirmed" groups="wage_manage.performance_review_group">
            批量確認審覈
        </button>
    </t>

    <t t-extend="ListView.buttons" t-name="WageManageListView.employee_performance_manage_buttons">
        <t t-jquery="button.o_list_button_add" t-operation="after">
            <t t-js="ctx">
                if (window.odoo._modules.indexOf("base_import") >= 0) {
                    r.push(context.engine.tools.call(context, 'ImportView.import_button', dict));
                };
            </t>
            <t t-call="WageManageListView.employee_performance_manage"/>
        </t>
    </t>
</template>

Js文件監聽按鈕,觸發事件

odoo.define('employee.performance.manage.tree.button', function (require) {
    "use strict";

    let ListController = require('web.ListController');
    let ListView = require('web.ListView');
    let viewRegistry = require('web.view_registry');

    let EmployeePerformanceManageViewController = ListController.extend({
        buttons_template: 'WageManageListView.employee_performance_manage_buttons',
        renderButtons: function () {
            this._super.apply(this, arguments);
            if (this.$buttons) {
                var self = this;
                // 提交審覈
                this.$buttons.on('click', '.employee_performance_manage_submit_review', function () {
                    let view_type = self.viewType;
                    let actived_ids = [];
                    let state = self.model.get(self.handle, {raw: true});
                    for (let i = 0; i < $('tbody .o_list_record_selector input').length; i++) {
                        if ($('tbody .o_list_record_selector input')[i].checked === true) {
                            actived_ids.push(state.res_ids[i]);
                        }
                    }
                    console.log(actived_ids);
                    // 至此已經獲取到了勾選的項的ID,可以去調用後臺的方法,或者打開一個新的頁面,一個新的wizard
                    let ctx = state.context;
                    ctx['active_ids'] = actived_ids;
                      // 我這裏是打開了一個新的wizard 將選中的id通過context傳遞過去進行相應的處理
                    self.do_action({
                        type: 'ir.actions.act_window',
                        res_model: 'employee.performance.manage.review',
                        target: 'new',
                        views: [[false, 'form']],
                        context: {
                            view_type: view_type,
                            active_ids: actived_ids,
                        },
                    },{
                        on_reverse_breadcrumb: function () {
                            self.reload();
                        },
                        on_close: function () {
                            self.reload();
                        }
                    });
                });
                // 確認審覈
                this.$buttons.on('click', '.employee_performance_manage_review_confirmed', function () {
                    let view_type = self.viewType;
                    let actived_ids = [];
                    let state = self.model.get(self.handle, {raw: true});
                    for (let i = 0; i < $('tbody .o_list_record_selector input').length; i++) {
                        if ($('tbody .o_list_record_selector input')[i].checked === true) {
                            actived_ids.push(state.res_ids[i]);
                        }
                    }
                    // 至此已經獲取到了勾選的項的ID,可以去調用後臺的方法,或者打開一個新的頁面,一個新的wizard
                    let ctx = state.context;
                    ctx['active_ids'] = actived_ids;
                      // 我這裏是打開了一個新的wizard 將選中的id通過context傳遞過去進行相應的處理
                    self.do_action({
                        type: 'ir.actions.act_window',
                        res_model: 'employee.performance.manage.confirmed',
                        target: 'new',
                        views: [[false, 'form']],
                        context: {
                            view_type: view_type,
                            active_ids: actived_ids,
                        },
                    },{
                        on_reverse_breadcrumb: function () {
                            self.reload();
                        },
                        on_close: function () {
                            self.reload();
                        }
                    });
                });
            }
        }
    });

    let EmployeePerformanceeView = ListView.extend({
        config: _.extend({}, ListView.prototype.config, {
            Controller: EmployeePerformanceManageViewController,
        }),
    });

    viewRegistry.add('employee_performance_manage_class', EmployeePerformanceeView);
});

.py文件

# -*- coding: utf-8 -*-
import logging
from odoo import api, fields, models
from odoo.exceptions import UserError

_logger = logging.getLogger(__name__)


class EmployeePerformanceTran(models.TransientModel):
    _name = 'employee.performance.manage.review'
    _description = "批量提交審覈"

    performance_ids = fields.Many2many('employee.performance.manage', 'performance_manage_review_list_rel', string=u'員工績效管理')

    @api.multi
    def submit_review(self):
        """
        批量提交審覈
        :return:
        """
        self.ensure_one()
        self.performance_ids.write({'state': 'wait'})
        return {'type': 'ir.actions.act_window_close'}

    @api.model
    def default_get(self, fields):
        context = dict(self._context or {})
        view_type = context.get('view_type')
        active_ids = context.get('active_ids')
        if not active_ids:
            raise UserError("未選擇要提交的記錄!")
        result = super(EmployeePerformanceTran, self).default_get(fields)
        if 'performance_ids' in fields:
            result['performance_ids'] = [(6, 0, active_ids)]
        return result

 不要忘了把XML加載到 __manifest__.py裏面

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章