summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorMathieu Duckerts-Antoine <dam@odoo.com>2018-03-20 16:54:49 +0100
committerGéry Debongnie <ged@odoo.com>2018-04-03 15:19:42 +0200
commit8e017ee296d955713f86f1395d00a7d9d9e59985 (patch)
tree70cf849bf2a4cdc9f30df62554208b7c80b2183f /addons
parentdcca2e8b9da685c13ba3fe8d3196b8e83fb429ba (diff)
[IMP] web: add a percentage formatter
This rev. adds a new formatter for numerical values to fieldsUtils.
Diffstat (limited to 'addons')
-rw-r--r--addons/web/static/src/js/fields/field_utils.js21
-rw-r--r--addons/web/static/tests/fields/field_utils_tests.js16
2 files changed, 32 insertions, 5 deletions
diff --git a/addons/web/static/src/js/fields/field_utils.js b/addons/web/static/src/js/fields/field_utils.js
index 5a11f1b0ba8..989f99c5fef 100644
--- a/addons/web/static/src/js/fields/field_utils.js
+++ b/addons/web/static/src/js/fields/field_utils.js
@@ -29,12 +29,12 @@ var _t = core._t;
/**
* Convert binary to bin_size
- *
+ *
* @param {string} [value] base64 representation of the binary (might be already a bin_size!)
* @param {Object} [field]
- * a description of the field (note: this parameter is ignored)
+ * a description of the field (note: this parameter is ignored)
* @param {Object} [options] additional options (note: this parameter is ignored)
- *
+ *
* @returns {string} bin_size (which is human-readable)
*/
function formatBinary(value, field, options) {
@@ -320,7 +320,19 @@ function formatMonetary(value, field, options) {
return currency.symbol + '&nbsp;' + formatted_value;
}
}
-
+/**
+ * Returns a string representing the given value (multiplied by 100)
+ * concatenated with '%'.
+ *
+ * @param {number | false} value
+ * @param {Object} [field]
+ * @param {Object} [options]
+ * @returns {string}
+ */
+function formatPercentage(value, field, options) {
+ value = formatFloat(value * 100, field, options) || '0';
+ return parseFloat(value) + "%";
+}
/**
* Returns a string representing the value of the selection.
*
@@ -591,6 +603,7 @@ return {
many2one: formatMany2one,
monetary: formatMonetary,
one2many: formatX2Many,
+ percentage: formatPercentage,
reference: formatMany2one,
selection: formatSelection,
text: formatChar,
diff --git a/addons/web/static/tests/fields/field_utils_tests.js b/addons/web/static/tests/fields/field_utils_tests.js
index e24571ea1d8..0947bfbbd4b 100644
--- a/addons/web/static/tests/fields/field_utils_tests.js
+++ b/addons/web/static/tests/fields/field_utils_tests.js
@@ -4,7 +4,6 @@ odoo.define('web.field_utils_tests', function (require) {
var core = require('web.core');
var session = require('web.session');
var fieldUtils = require('web.field_utils');
-var testUtils = require('web.test_utils');
QUnit.module('fields', {}, function () {
@@ -133,7 +132,22 @@ QUnit.test('format binary', function (assert) {
// base64 estimated size (bytes) = value.length / 1.37 (http://en.wikipedia.org/wiki/Base64#MIME)
// Here: 4 / 1.37 = 2.91970800 => 2.92 (rounded 2 decimals by utils.human_size)
assert.strictEqual(fieldUtils.format.binary('Cg=='), '2.92 Bytes');
+});
+
+QUnit.test('format percentage', function (assert) {
+ assert.expect(8);
+
+ assert.strictEqual(fieldUtils.format.percentage(0), '0%');
+ assert.strictEqual(fieldUtils.format.percentage(0.5), '50%');
+ assert.strictEqual(fieldUtils.format.percentage(1), '100%');
+
+ assert.strictEqual(fieldUtils.format.percentage(-0.2), '-20%');
+ assert.strictEqual(fieldUtils.format.percentage(2.5), '250%');
+
+ assert.strictEqual(fieldUtils.format.percentage(0.125), '12.5%');
+ assert.strictEqual(fieldUtils.format.percentage(0.666666), '66.67%');
+ assert.strictEqual(fieldUtils.format.percentage(false), '0%');
});
QUnit.test('parse float', function(assert) {