diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-11-22 20:06:48 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-11-22 20:06:48 +0100 |
| commit | b4e1be8ab07d883637a7f0f00c37d9bbf5ef6ee8 (patch) | |
| tree | 591d7ce8d61d9a9e5d35a695f6a2276066f1a4a3 /addons/web/static/src | |
| parent | 1c4d49330e7f9719e372040f0c8729d3cf3d09fa (diff) | |
| parent | b09f624f20781d65baf2060df40383898e6f86e5 (diff) | |
[MERGE] forward port branch saas-11.3 up to b09f624f207
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 13 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/list/list_controller.js | 9 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/favorites_menu.js | 23 |
3 files changed, 37 insertions, 8 deletions
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 f87106ec0c2..b31106b151e 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1596,6 +1596,11 @@ var BasicModel = AbstractModel.extend({ record._rawChanges[name] = val; return; } + if (record._rawChanges[name]) { + // if previous _rawChanges exists, clear them since the field is now knwon + // and restoring outdated onchange over posterious change is wrong + delete record._rawChanges[name]; + } var oldValue = name in record._changes ? record._changes[name] : record.data[name]; var id; if (field.type === 'many2one') { @@ -2733,11 +2738,6 @@ var BasicModel = AbstractModel.extend({ relationField: field.relation_field, viewType: view ? view.type : fieldInfo.viewType, }); - // set existing changes to the list - if (record._changes && record._changes[fieldName]) { - list._changes = self.localData[record._changes[fieldName]]._changes; - record._changes[fieldName] = list.id; - } record.data[fieldName] = list.id; if (!fieldInfo.__no_fetch) { var def = self._readUngroupedList(list).then(function () { @@ -3528,7 +3528,7 @@ var BasicModel = AbstractModel.extend({ model: params.modelName, offset: params.offset || (type === 'record' ? _.indexOf(res_ids, res_id) : 0), openGroupByDefault: params.openGroupByDefault, - orderedBy: params.orderedBy || [], + orderedBy: params.orderedBy || (params.context && params.context.orderedBy) || [], orderedResIDs: params.orderedResIDs, parentID: params.parentID, rawContext: params.rawContext, @@ -4230,6 +4230,7 @@ var BasicModel = AbstractModel.extend({ if (options.context !== undefined) { element.context = options.context; + element.orderedBy = options.context.orderedBy || element.orderedBy; } if (options.domain !== undefined) { element.domain = options.domain; diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js index 3691903c079..955ef2ade39 100644 --- a/addons/web/static/src/js/views/list/list_controller.js +++ b/addons/web/static/src/js/views/list/list_controller.js @@ -79,6 +79,14 @@ var ListController = BasicController.extend({ return $.Deferred().resolve(); } }, + /* + * @override + */ + getContext: function () { + var context = this._super.apply(this, arguments); + context.orderedBy = this.model.get(this.handle, {raw: true}).orderedBy || []; + return context; + }, /** * Returns the list of currently selected res_ids (with the check boxes on * the left) @@ -199,6 +207,7 @@ var ListController = BasicController.extend({ } else { this.selectedRecords = []; } + params.selectedRecords = this.selectedRecords; return this._super.apply(this, arguments); }, diff --git a/addons/web/static/src/js/views/search/favorites_menu.js b/addons/web/static/src/js/views/search/favorites_menu.js index a40f38d4095..46949e901a3 100644 --- a/addons/web/static/src/js/views/search/favorites_menu.js +++ b/addons/web/static/src/js/views/search/favorites_menu.js @@ -103,9 +103,17 @@ return Widget.extend({ var controllerContext; this.trigger_up('get_controller_context', { callback: function (ctx) { - controllerContext = ctx; + if (ctx && ctx.orderedBy) { + var sort = _.map(ctx.orderedBy, function (obj) { + var order = obj.asc ? 'ASC' : 'DESC'; + return obj.name + ' ' + order; + }); + self.searchview.dataset.set_sort(sort); + } + controllerContext = _.omit(ctx, ['orderedBy']); }, }); + var results = pyUtils.eval_domains_and_contexts({ domains: [], contexts: [user_context].concat(search.contexts.concat(controllerContext || [])), @@ -186,7 +194,18 @@ return Widget.extend({ category: _t("Custom Filter"), icon: 'fa-star', field: { - get_context: function () { return filter.context; }, + get_context: function () { + var sortParsed = JSON.parse(filter.sort || "[]"); + var orderedBy = []; + _.each(sortParsed, function (sort) { + orderedBy.push({ + name: sort[0] === '-' ? sort.slice(1) : sort, + asc: sort[0] === '-' ? false : true, + }); + }); + + return _.defaults({}, filter.context, {orderedBy : orderedBy}); + }, get_groupby: function () { return [filter.context]; }, // facet is not used get_domain: function (facet, noEvaluation) { |
