You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.8 KiB
91 lines
3.8 KiB
odoo.define('kpi_dashboard.AbstractWidget', function (require) {
|
|
"use strict";
|
|
var Widget = require('web.Widget');
|
|
var field_utils = require('web.field_utils');
|
|
var time = require('web.time');
|
|
var ajax = require('web.ajax');
|
|
var registry = require('kpi_dashboard.widget_registry');
|
|
|
|
var AbstractWidget = Widget.extend({
|
|
template: 'kpi_dashboard.base_widget', // Template used by the widget
|
|
cssLibs: [], // Specific css of the widget
|
|
jsLibs: [], // Specific Javascript libraries of the widget
|
|
events: {
|
|
'click .o_kpi_dashboard_toggle_button': '_onClickToggleButton',
|
|
'click .direct_action': '_onClickDirectAction',
|
|
},
|
|
init: function (parent, kpi_values) {
|
|
this._super(parent);
|
|
this.col = kpi_values.col;
|
|
this.row = kpi_values.row;
|
|
this.sizex = kpi_values.sizex;
|
|
this.sizey = kpi_values.sizey;
|
|
this.color = kpi_values.color;
|
|
this.values = kpi_values;
|
|
this.margin_x = parent.state.specialData.margin_x;
|
|
this.margin_y = parent.state.specialData.margin_y;
|
|
this.widget_dimension_x = parent.state.specialData.widget_dimension_x;
|
|
this.widget_dimension_y = parent.state.specialData.widget_dimension_y;
|
|
this.prefix = kpi_values.prefix;
|
|
this.suffix = kpi_values.suffix;
|
|
this.actions = kpi_values.actions;
|
|
this.widget_size_x = this.widget_dimension_x * this.sizex +
|
|
(this.sizex - 1) * this.margin_x;
|
|
this.widget_size_y = this.widget_dimension_y * this.sizey +
|
|
(this.sizey - 1) * this.margin_y;
|
|
},
|
|
willStart: function () {
|
|
// We need to load the libraries before the start
|
|
return $.when(ajax.loadLibs(this), this._super.apply(this, arguments));
|
|
},
|
|
start: function () {
|
|
var self = this;
|
|
return this._super.apply(this, arguments).then(function () {
|
|
self._fillWidget(self.values);
|
|
});
|
|
},
|
|
_onClickToggleButton: function (event) {
|
|
event.preventDefault();
|
|
this.$el.toggleClass('o_dropdown_open');
|
|
},
|
|
_fillWidget: function (values) {
|
|
// This function fills the widget values
|
|
if (this.$el === undefined)
|
|
return;
|
|
this.fillWidget(values);
|
|
var item = this.$el.find('[data-bind="value_last_update_display"]');
|
|
if (item && values.value_last_update !== undefined) {
|
|
var value = field_utils.parse.datetime(values.value_last_update);
|
|
item.text(value.clone().add(
|
|
this.getSession().getTZOffset(value), 'minutes').format(
|
|
time.getLangDatetimeFormat()
|
|
));
|
|
}
|
|
var $manage = this.$el.find('.o_kpi_dashboard_manage');
|
|
if ($manage && this.showManagePanel(values))
|
|
$manage.toggleClass('hidden', false);
|
|
},
|
|
showManagePanel: function (values) {
|
|
// Hook for extensions
|
|
return (values.actions !== undefined);
|
|
},
|
|
fillWidget: function (values) {
|
|
// Specific function that will be changed by specific widget
|
|
var value = values.value;
|
|
var self = this;
|
|
_.each(value, function (val, key) {
|
|
var item = self.$el.find('[data-bind=' + key + ']')
|
|
if (item)
|
|
item.text(val);
|
|
})
|
|
},
|
|
_onClickDirectAction: function(event) {
|
|
event.preventDefault();
|
|
var $data = $(event.currentTarget).closest('a');
|
|
return this.do_action($($data).data('id'));
|
|
}
|
|
});
|
|
|
|
registry.add('abstract', AbstractWidget);
|
|
return AbstractWidget;
|
|
});
|