OCA reporting engine fork for dev and update.
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.

71 lines
2.6 KiB

  1. odoo.define('kpi_dashboard.IntegerWidget', function (require) {
  2. "use strict";
  3. var AbstractWidget = require('kpi_dashboard.AbstractWidget');
  4. var registry = require('kpi_dashboard.widget_registry');
  5. var field_utils = require('web.field_utils');
  6. var IntegerWidget = AbstractWidget.extend({
  7. template: 'kpi_dashboard.number',
  8. digits: [3, 0],
  9. shortList: [
  10. [1000000000000, 'T', [3, 1]],
  11. [1000000000, 'G', [3, 1]],
  12. [1000000, 'M', [3, 1]],
  13. [1000, 'K', [3, 1]]
  14. ],
  15. shortNumber: function (num) {
  16. var suffix = '';
  17. var shortened = false;
  18. var digits = this.digits;
  19. _.each(this.shortList, function (shortItem) {
  20. if (!shortened && Math.abs(num) >= shortItem[0]) {
  21. shortened = true;
  22. suffix = shortItem[1];
  23. num = num / shortItem[0];
  24. digits = shortItem[2];
  25. }
  26. });
  27. return field_utils.format.float(num, false, {
  28. digits: digits}) + suffix;
  29. },
  30. fillWidget: function (values) {
  31. var widget = this.$el;
  32. var value = values.value.value;
  33. if (value === undefined) {
  34. value = 0;
  35. }
  36. var item = widget.find('[data-bind="value"]');
  37. if (item) {
  38. item.text(this.shortNumber(value));
  39. }
  40. var previous = values.value.previous;
  41. var $change_rate = widget.find('.change-rate');
  42. if (previous === undefined) {
  43. $change_rate.toggleClass('active', false);
  44. } else {
  45. var difference = 0;
  46. if (previous !== 0) {
  47. difference = field_utils.format.integer(
  48. (100 * value / previous) - 100) + '%';
  49. }
  50. $change_rate.toggleClass('active', true);
  51. var $difference = widget.find('[data-bind="difference"]');
  52. $difference.text(difference);
  53. var $arrow = widget.find('[data-bind="arrow"]');
  54. if (value < previous) {
  55. $arrow.toggleClass('fa-arrow-up', false);
  56. $arrow.toggleClass('fa-arrow-down', true);
  57. } else {
  58. $arrow.toggleClass('fa-arrow-up', true);
  59. $arrow.toggleClass('fa-arrow-down', false);
  60. }
  61. }
  62. },
  63. });
  64. registry.add('integer', IntegerWidget);
  65. return IntegerWidget;
  66. });