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.
72 lines
2.8 KiB
72 lines
2.8 KiB
odoo.define('kpi_dashboard.NumberWidget', function (require) {
|
|
"use strict";
|
|
|
|
var AbstractWidget = require('kpi_dashboard.AbstractWidget');
|
|
var registry = require('kpi_dashboard.widget_registry');
|
|
var field_utils = require('web.field_utils');
|
|
|
|
|
|
var NumberWidget = AbstractWidget.extend({
|
|
template: 'kpi_dashboard.number',
|
|
shortNumber: function (num) {
|
|
if (Math.abs(num) >= 1000000000000) {
|
|
return field_utils.format.integer(num / 1000000000000, false, {
|
|
digits: [3, 1]}) + 'T';
|
|
}
|
|
if (Math.abs(num) >= 1000000000) {
|
|
return field_utils.format.integer(num / 1000000000, false, {
|
|
digits: [3,1]}) + 'G';
|
|
}
|
|
if (Math.abs(num) >= 1000000) {
|
|
return field_utils.format.integer(num / 1000000, false, {
|
|
digits: [3, 1]}) + 'M';
|
|
}
|
|
if (Math.abs(num) >= 1000) {
|
|
return field_utils.format.float(num / 1000, false, {
|
|
digits: [3, 1]}) + 'K';
|
|
}
|
|
if (Math.abs(num) >= 10) {
|
|
return field_utils.format.float(num, false, {
|
|
digits: [3, 1]});
|
|
}
|
|
return field_utils.format.float(num, false, {
|
|
digits: [3, 2]});
|
|
},
|
|
fillWidget: function (values) {
|
|
var widget = this.$el;
|
|
var value = values.value.value;
|
|
if (value === undefined) {
|
|
value = 0;
|
|
}
|
|
var item = widget.find('[data-bind="value"]');
|
|
if (item) {
|
|
item.text(this.shortNumber(value));
|
|
}
|
|
var previous = values.value.previous;
|
|
|
|
var $change_rate = widget.find('.change-rate');
|
|
if (previous === undefined) {
|
|
$change_rate.toggleClass('active', false);
|
|
} else {
|
|
var difference = 0;
|
|
if (previous !== 0) {
|
|
difference = field_utils.format.integer(
|
|
(100 * value / previous) - 100) + '%';
|
|
}
|
|
$change_rate.toggleClass('active', true);
|
|
var $difference = widget.find('[data-bind="difference"]');
|
|
$difference.text(difference);
|
|
var $arrow = widget.find('[data-bind="arrow"]');
|
|
if (value < previous) {
|
|
$arrow.toggleClass('fa-arrow-up', false);
|
|
$arrow.toggleClass('fa-arrow-down', true);
|
|
} else {
|
|
$arrow.toggleClass('fa-arrow-up', true);
|
|
$arrow.toggleClass('fa-arrow-down', false);
|
|
}
|
|
}
|
|
},
|
|
});
|
|
registry.add('number', NumberWidget);
|
|
return NumberWidget;
|
|
});
|