diff options
Diffstat (limited to 'addons/web/static/src/js/views/basic')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 25 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_renderer.js | 16 |
2 files changed, 38 insertions, 3 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 79fac0f2247..150b97ff0d8 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -88,8 +88,10 @@ var concurrency = require('web.concurrency'); var Context = require('web.Context'); var core = require('web.core'); var Domain = require('web.Domain'); +var fieldUtils = require('web.field_utils'); var session = require('web.session'); var utils = require('web.utils'); +var viewUtils = require('web.viewUtils'); var _t = core._t; @@ -178,7 +180,7 @@ var BasicModel = AbstractModel.extend({ addDefaultRecord: function (listID, options) { var self = this; var list = this.localData[listID]; - var context = this._getContext(list); + var context = _.extend({}, this._getDefaultContext(list), this._getContext(list)); var position = (options && options.position) || 'top'; var params = { @@ -3333,6 +3335,27 @@ var BasicModel = AbstractModel.extend({ return toFetch; }, /** + * Given a dataPoint of type list (that may be a group), returns an object + * with 'default_' keys to be used to create new records in that group. + * + * @private + * @param {Object} dataPoint + * @returns {Object} + */ + _getDefaultContext: function (dataPoint) { + var defaultContext = {}; + while (dataPoint.parentID) { + var parent = this.localData[dataPoint.parentID]; + var groupByField = parent.groupedBy[0].split(':')[0]; + var value = viewUtils.getGroupValue(dataPoint, groupByField); + if (value) { + defaultContext['default_' + groupByField] = value; + } + dataPoint = parent; + } + return defaultContext; + }, + /** * Some records are associated to a/some domain(s). This method allows to * retrieve them, evaluated. * diff --git a/addons/web/static/src/js/views/basic/basic_renderer.js b/addons/web/static/src/js/views/basic/basic_renderer.js index 6f5fa263ba8..f741e11b789 100644 --- a/addons/web/static/src/js/views/basic/basic_renderer.js +++ b/addons/web/static/src/js/views/basic/basic_renderer.js @@ -91,8 +91,7 @@ var BasicRenderer = AbstractRenderer.extend({ */ confirmChange: function (state, id, fields, ev) { this.state = state; - - var record = state.id === id ? state : _.findWhere(state.data, {id: id}); + var record = this._getRecord(id); if (!record) { return this._render().then(_.constant([])); } @@ -351,6 +350,19 @@ var BasicRenderer = AbstractRenderer.extend({ return _.findWhere(this.allModifiersData, {node: node}); }, /** + * This function is meant to be overriden in renderers. It takes a dataPoint + * id (for a dataPoint of type record), and should return the corresponding + * dataPoint. + * + * @abstract + * @private + * @param {string} [recordId] + * @returns {Object|null} + */ + _getRecord: function (recordId) { + return null; + }, + /** * @private * @param {jQueryElement} $el * @param {Object} node |
