summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic
diff options
context:
space:
mode:
authorRavi Gadhia <rga@odoo.com>2018-06-06 13:41:44 +0000
committerAaron Bohy <aab@odoo.com>2019-04-02 11:55:57 +0000
commit234d92c4f0c092dca9f10d194ddcff998fc3a886 (patch)
tree9b4cd9794b9f494694b9671e6bb682d75c007bd7 /addons/web/static/src/js/views/basic
parent55676110c8787dfafd34a6508b207952f5c5eb88 (diff)
[IMP] web: list: editable grouped list views
This rev. enables the editable feature in grouped list views. Part of task 1915702 Co-authored-by: Aaron Bohy <aab@odoo.com> Co-authored-by: Martin Geubelle <mge@odoo.com>
Diffstat (limited to 'addons/web/static/src/js/views/basic')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js25
-rw-r--r--addons/web/static/src/js/views/basic/basic_renderer.js16
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