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.

72 lines
2.8 KiB

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