summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-11-12 13:06:48 +0100
committerChristophe Simonis <chs@odoo.com>2018-11-12 13:06:48 +0100
commit99d0e1b80e5b2d5eb59b96c6ce1bf246f8df2326 (patch)
tree6c53282f8a22e9b59d83762ebe057173172c5f63 /addons/web/static/src/js
parent4d53266e236d1816e45b13aa50bcafb1bab2bc8c (diff)
parenta403155dec769418ede3c9128a887847f97a956f (diff)
[MERGE] forward port branch 12.0 up to a403155dec7
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/fields/field_utils.js17
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js41
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 () {