summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields/field_utils.js
diff options
context:
space:
mode:
authorrgarnau <rgarnau20@gmail.com>2017-10-12 09:07:27 +0200
committerChristophe Matthieu <chm@odoo.com>2017-10-12 10:34:40 +0200
commitb8dac2ff32d2e875e2f43c91f702e17adc938f7e (patch)
tree2abe84090860d7622f49d228ec1af130d05687e5 /addons/web/static/src/js/fields/field_utils.js
parent2f3b469dee6f18cbccce1cdf2a81cfe57960c533 (diff)
[FIX] web: integer not properly parsed
The parsing of the integers does not escape the thousands separator. issue: Integers are currently not properly parsed. For example, create a database in Spanish language, install product_expiry and in settings activate Lots & Serial Numbers. Go to Products and create a new product. Choose to track by lots and specify the use_time, life_time, etc. When saving, all integers are set to 0
Diffstat (limited to 'addons/web/static/src/js/fields/field_utils.js')
-rw-r--r--addons/web/static/src/js/fields/field_utils.js41
1 files changed, 36 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 db5cd34d8b9..14d8848205f 100644
--- a/addons/web/static/src/js/fields/field_utils.js
+++ b/addons/web/static/src/js/fields/field_utils.js
@@ -421,13 +421,36 @@ function parseDateTime(value, field, options) {
throw new Error(_.str.sprintf(core._t("'%s' is not a correct datetime"), value));
}
-function parseFloat(value) {
+/**
+ * Parse a String containing number in language formating
+ *
+ * @param {string} value
+ * The string to be parsed with the setting of thousands and
+ * decimal separator
+ * @returns {float|NaN} the number value contained in the string representation
+ */
+function parseNumber(value) {
if (core._t.database.parameters.thousands_sep) {
var escapedSep = _.str.escapeRegExp(core._t.database.parameters.thousands_sep);
value = value.replace(new RegExp(escapedSep, 'g'), '');
}
- value = value.replace(core._t.database.parameters.decimal_point, '.');
- var parsed = Number(value);
+ if (core._t.database.parameters.decimal_point) {
+ value = value.replace(core._t.database.parameters.decimal_point, '.');
+ }
+ return Number(value);
+}
+
+/**
+ * Parse a String containing float in language formating
+ *
+ * @param {string} value
+ * The string to be parsed with the setting of thousands and
+ * decimal separator
+ * @returns {float}
+ * @throws {Error} if no float is found respecting the language configuration
+ */
+function parseFloat(value) {
+ var parsed = parseNumber(value);
if (isNaN(parsed)) {
throw new Error(_.str.sprintf(core._t("'%s' is not a correct float"), value));
}
@@ -494,9 +517,17 @@ function parseFloatTime(value) {
return factor * (hours + (minutes / 60));
}
+/**
+ * Parse a String containing integer with language formating
+ *
+ * @param {string} value
+ * The string to be parsed with the setting of thousands and
+ * decimal separator
+ * @returns {integer}
+ * @throws {Error} if no integer is found respecting the language configuration
+ */
function parseInteger(value) {
- value = value.replace(new RegExp(core._t.database.parameters.thousands_sep, "g"), '');
- var parsed = Number(value);
+ var parsed = parseNumber(value);
// do not accept not numbers or float values
if (isNaN(parsed) || parsed % 1 || parsed < -2147483648 || parsed > 2147483647) {
throw new Error(_.str.sprintf(core._t("'%s' is not a correct integer"), value));