diff options
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/fields/field_utils.js | 17 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 41 |
2 files changed, 34 insertions, 24 deletions
diff --git a/addons/web/static/src/js/fields/field_utils.js b/addons/web/static/src/js/fields/field_utils.js index 9d40c88019d..bbdee83c4f9 100644 --- a/addons/web/static/src/js/fields/field_utils.js +++ b/addons/web/static/src/js/fields/field_utils.js @@ -587,6 +587,22 @@ function parseFloatTime(value) { } /** + * Parse a String containing a percentage and convert it to float. + * The percentage can be a regular xx.xx float or a xx%. + * + * @param {string} value + * The string to be parsed + * @returns {float} + * @throws {Error} if the value couldn't be converted to float + */ +function parsePercentage(value) { + if (value.slice(-1) === '%') { + return parseFloat(value.slice(0, -1)) / 100; + } + return parseFloat(value); +} + +/** * Parse a String containing integer with language formating * * @param {string} value @@ -668,6 +684,7 @@ return { many2one: parseMany2one, monetary: parseMonetary, one2many: _.identity, + percentage: parsePercentage, reference: parseMany2one, selection: _.identity, // todo text: _.identity, // todo diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 0701c1d1046..d0f15aeb369 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -3733,27 +3733,21 @@ var BasicModel = AbstractModel.extend({ _makeDefaultRecord: function (modelName, params) { var self = this; - var determineExtraFields = function () { - // Fields that are present in the originating view, that need to be initialized - // Hence preventing their value to crash when getting back to the originating view - var parentRecord = self.localData[params.parentID]; - - var originView = parentRecord && parentRecord.fieldsInfo; - if (!originView || !originView[parentRecord.viewType]) - return []; - - var fieldsFromOrigin = _.filter(Object.keys(originView[parentRecord.viewType]), - function (fieldname) { - return params.fields[fieldname] !== undefined; - }); - - return fieldsFromOrigin; - }; - - var fieldNames = Object.keys(params.fieldsInfo[params.viewType]); + var targetView = params.viewType; + var fields = params.fields; + var fieldsInfo = params.fieldsInfo; + var fieldNames = Object.keys(fieldsInfo[targetView]); var fields_key = _.without(fieldNames, '__last_update'); - var extraFields = determineExtraFields(); + // Fields that are present in the originating view, that need to be initialized + // Hence preventing their value to crash when getting back to the originating view + var parentRecord = self.localData[params.parentID]; + if (parentRecord) { + var originView = parentRecord.viewType; + fieldNames = _.union(fieldNames, Object.keys(parentRecord.fieldsInfo[originView])); + fieldsInfo[targetView] = _.defaults({}, fieldsInfo[targetView], parentRecord.fieldsInfo[originView]); + fields = _.defaults({}, fields, parentRecord.fields); + } return this._rpc({ model: modelName, @@ -3762,15 +3756,14 @@ var BasicModel = AbstractModel.extend({ context: params.context, }) .then(function (result) { - var record = self._makeDataPoint({ modelName: modelName, - fields: params.fields, - fieldsInfo: params.fieldsInfo, + fields: fields, + fieldsInfo: fieldsInfo, context: params.context, parentID: params.parentID, res_ids: params.res_ids, - viewType: params.viewType, + viewType: targetView, }); // We want to overwrite the default value of the handle field (if any), @@ -3787,7 +3780,7 @@ var BasicModel = AbstractModel.extend({ result[overrideDefaultFields.field] = overrideDefaultFields.value; } - return self.applyDefaultValues(record.id, result, {fieldNames: _.union(fieldNames, extraFields)}) + return self.applyDefaultValues(record.id, result, {fieldNames: fieldNames}) .then(function () { var def = $.Deferred(); self._performOnChange(record, fields_key).always(function () { |
