odoo.define('kpi_dashboard.IntegerWidget', 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 IntegerWidget = AbstractWidget.extend({ template: 'kpi_dashboard.number', digits: [3, 0], shortList: [ [1000000000000, 'T', [3, 1]], [1000000000, 'G', [3, 1]], [1000000, 'M', [3, 1]], [1000, 'K', [3, 1]] ], shortNumber: function (num) { var suffix = ''; var shortened = false; var digits = this.digits; _.each(this.shortList, function (shortItem) { if (!shortened && Math.abs(num) >= shortItem[0]) { shortened = true; suffix = shortItem[1]; num = num / shortItem[0]; digits = shortItem[2]; } }); return field_utils.format.float(num, false, { digits: digits}) + suffix; }, 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('integer', IntegerWidget); return IntegerWidget; });