summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-01-25 15:41:45 +0100
committerChristophe Simonis <chs@odoo.com>2018-01-25 15:41:45 +0100
commitcb50970f3f88c5e5e4f0608c6d07e66eb4698eb9 (patch)
treefae668c499403db72b172b3c8802b869b1040ae7 /addons/web/static/src
parentffaca543c47adf5d0286ff8e9eeb99b193948679 (diff)
parenteefe879a37aba221bda84adfd880fb7876955920 (diff)
[MERGE] forward port branch 11.0 up to eefe879a37a
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/chrome/view_manager.js32
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js203
-rw-r--r--addons/web/static/src/js/widgets/debug_manager.js4
-rw-r--r--addons/web/static/src/less/kanban_view.less4
4 files changed, 128 insertions, 115 deletions
diff --git a/addons/web/static/src/js/chrome/view_manager.js b/addons/web/static/src/js/chrome/view_manager.js
index 75029d4cc27..3f3cec9ec7f 100644
--- a/addons/web/static/src/js/chrome/view_manager.js
+++ b/addons/web/static/src/js/chrome/view_manager.js
@@ -87,12 +87,6 @@ var ViewManager = Widget.extend(ControlPanelMixin, {
this.active_view = null;
this.registry = view_registry;
this.title = this.action.name;
- var actionGroupBy = self.action.context.group_by;
- if (!actionGroupBy) {
- actionGroupBy = [];
- } else if (typeof actionGroupBy === 'string') {
- actionGroupBy = [actionGroupBy];
- }
_.each(views, function (view) {
var view_type = view[1] || view.view_type;
var View = self.registry.get(view_type); //.prototype.config.Controller;
@@ -114,7 +108,6 @@ var ViewManager = Widget.extend(ControlPanelMixin, {
action: self.action,
limit: self.action.limit,
views: self.action.views,
- groupBy: actionGroupBy,
}, self.flags, self.flags[view_type], view.options),
searchable: View.prototype.searchable,
title: self.title,
@@ -271,16 +264,6 @@ var ViewManager = Widget.extend(ControlPanelMixin, {
if (!view.loaded) {
view_options = _.extend({}, view.options, view_options, self.env);
- if (view_options.groupBy && !view_options.groupBy.length) {
- var actionContext = view_options ? view_options.action.context : {};
- var actionGroupBy = actionContext.group_by;
- if (!actionGroupBy) {
- actionGroupBy = [];
- } else if (typeof actionGroupBy === 'string') {
- actionGroupBy = [actionGroupBy];
- }
- view_options.groupBy = actionGroupBy;
- }
view.loaded = $.Deferred();
self.create_view(view, view_options).then(function(controller) {
view.controller = controller;
@@ -512,18 +495,15 @@ var ViewManager = Widget.extend(ControlPanelMixin, {
throw new Error(_.str.sprintf(_t("Failed to evaluate search criterions")+": \n%s",
JSON.stringify(results.error)));
}
- // this.dataset._model = new Model(this.dataset.model, results.context, results.domain);
- // var groupby = results.group_by.length ? results.group_by : action_context.group_by;
- // if (_.isString(groupby)) {
- // groupby = [groupby];
- // }
- // if (!controller.grouped && !_.isEmpty(groupby)){
- // this.dataset.set_sort([]);
- // }
+ // FORWARDPORT THIS UP TO SAAS-11.1 ONLY, NOT LATER
+ var groupby = results.group_by.length ? results.group_by : action_context.group_by;
+ if (_.isString(groupby)) {
+ groupby = [groupby];
+ }
return {
context: results.context,
domain: results.domain,
- groupBy: results.group_by,
+ groupBy: groupby || [],
};
},
do_push_state: function(state) {
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 5296c6db7d5..b5b668a43a1 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -3238,92 +3238,7 @@ var BasicModel = AbstractModel.extend({
defs.push(self._fetchNameGet(dp));
record._changes[name] = dp.id;
} else if (field.type === 'one2many' || field.type === 'many2many') {
- var fieldInfo = record.fieldsInfo[record.viewType][name];
- var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];
- var fieldsInfo = view ? view.fieldsInfo : fieldInfo.fieldsInfo;
- var fields = view ? view.fields : fieldInfo.relatedFields;
- var viewType = view ? view.type : fieldInfo.viewType;
-
- var x2manyList = self._makeDataPoint({
- context: record.context,
- fieldsInfo: fieldsInfo,
- fields: fields,
- limit: fieldInfo.limit,
- modelName: field.relation,
- parentID: record.id,
- rawContext: fieldInfo && fieldInfo.context,
- relationField: field.relation_field,
- res_ids: [],
- static: true,
- type: 'list',
- viewType: viewType,
- });
- record._changes[name] = x2manyList.id;
- x2manyList._changes = [];
- var many2ones = {};
- var r;
- result[name] = result[name] || []; // handle false value
- var isCommandList = result[name].length && _.isArray(result[name][0]);
- if (!isCommandList) {
- result[name] = [[6, false, result[name]]];
- }
- _.each(result[name], function (value) {
- // value is a command
- if (value[0] === 0) {
- // CREATE
- r = self._makeDataPoint({
- modelName: x2manyList.model,
- context: x2manyList.context,
- fieldsInfo: fieldsInfo,
- fields: fields,
- parentID: x2manyList.id,
- viewType: viewType,
- });
- x2manyList._changes.push({operation: 'ADD', id: r.id});
- x2manyList._cache[r.res_id] = r.id;
-
- // this is necessary so the fields are initialized
- _.each(r.getFieldNames(), function (fieldName) {
- r.data[fieldName] = null;
- });
-
- r._changes = _.defaults(value[2], r.data);
- for (var name in r._changes) {
- if (!r._changes[name]) {
- continue;
- }
- var isFieldInView = name in r.fields;
- if (isFieldInView && r.fields[name].type === 'many2one') {
- var rec = self._makeDataPoint({
- context: r.context,
- modelName: r.fields[name].relation,
- data: {id: r._changes[name]},
- parentID: r.id,
- });
- r._changes[name] = rec.id;
- many2ones[name] = true;
- }
- }
- }
- if (value[0] === 6) {
- // REPLACE_WITH
- _.each(value[2], function (res_id) {
- x2manyList._changes.push({operation: 'ADD', resID: res_id});
- });
- var def = self._readUngroupedList(x2manyList).then(function () {
- return $.when(
- self._fetchX2ManysBatched(x2manyList),
- self._fetchReferencesBatched(x2manyList)
- );
- });
- defs.push(def);
- }
- });
-
- // fetch many2ones display_name
- _.each(_.keys(many2ones), function (name) {
- defs.push(self._fetchNameGets(x2manyList, name));
- });
+ defs.push(self._processX2ManyCommands(record, name, result[name]));
} else {
record._changes[name] = self._parseServerValue(field, result[name]);
}
@@ -3498,6 +3413,122 @@ var BasicModel = AbstractModel.extend({
});
},
/**
+ * Process x2many commands in a default record by transforming the list of
+ * commands in operations (pushed in _changes) and fetch the related
+ * records fields.
+ *
+ * Note that this method can be called recursively.
+ *
+ * @todo in master: factorize this code with the postprocessing of x2many in
+ * _applyOnChange
+ *
+ * @private
+ * @param {Object} record
+ * @param {string} fieldName
+ * @param {Array[Array]} commands
+ * @returns {Deferred}
+ */
+ _processX2ManyCommands: function (record, fieldName, commands) {
+ var self = this;
+ var defs = [];
+ var field = record.fields[fieldName];
+ var fieldInfo = record.fieldsInfo[record.viewType][fieldName];
+ var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];
+ var fieldsInfo = view ? view.fieldsInfo : fieldInfo.fieldsInfo;
+ var fields = view ? view.fields : fieldInfo.relatedFields;
+ var viewType = view ? view.type : fieldInfo.viewType;
+
+ var x2manyList = self._makeDataPoint({
+ context: record.context,
+ fieldsInfo: fieldsInfo,
+ fields: fields,
+ limit: fieldInfo.limit,
+ modelName: field.relation,
+ parentID: record.id,
+ rawContext: fieldInfo && fieldInfo.context,
+ relationField: field.relation_field,
+ res_ids: [],
+ static: true,
+ type: 'list',
+ viewType: viewType,
+ });
+ record._changes[fieldName] = x2manyList.id;
+ x2manyList._changes = [];
+ var many2ones = {};
+ var r;
+ commands = commands || []; // handle false value
+ var isCommandList = commands.length && _.isArray(commands[0]);
+ if (!isCommandList) {
+ commands = [[6, false, commands]];
+ }
+ _.each(commands, function (value) {
+ // value is a command
+ if (value[0] === 0) {
+ // CREATE
+ r = self._makeDataPoint({
+ modelName: x2manyList.model,
+ context: x2manyList.context,
+ fieldsInfo: fieldsInfo,
+ fields: fields,
+ parentID: x2manyList.id,
+ viewType: viewType,
+ });
+ x2manyList._changes.push({operation: 'ADD', id: r.id});
+ x2manyList._cache[r.res_id] = r.id;
+
+ // this is necessary so the fields are initialized
+ _.each(r.getFieldNames(), function (fieldName) {
+ r.data[fieldName] = null;
+ });
+
+ r._changes = _.defaults(value[2], r.data);
+ for (var fieldName in r._changes) {
+ if (!r._changes[fieldName]) {
+ continue;
+ }
+ var isFieldInView = fieldName in r.fields;
+ if (isFieldInView) {
+ var field = r.fields[fieldName];
+ var fieldType = field.type;
+ if (fieldType === 'many2one') {
+ var rec = self._makeDataPoint({
+ context: r.context,
+ modelName: field.relation,
+ data: {id: r._changes[fieldName]},
+ parentID: r.id,
+ });
+ r._changes[fieldName] = rec.id;
+ many2ones[fieldName] = true;
+ } else if (_.contains(['one2many', 'many2many'], fieldType)) {
+ var x2mCommands = commands[0][2][fieldName];
+ defs.push(self._processX2ManyCommands(r, fieldName, x2mCommands));
+ }
+ }
+ }
+ }
+ if (value[0] === 6) {
+ // REPLACE_WITH
+ _.each(value[2], function (res_id) {
+ x2manyList._changes.push({operation: 'ADD', resID: res_id});
+ });
+ var def = self._readUngroupedList(x2manyList).then(function () {
+ return $.when(
+ self._fetchX2ManysBatched(x2manyList),
+ self._fetchReferencesBatched(x2manyList)
+ );
+ });
+ defs.push(def);
+ }
+ });
+
+ // fetch many2ones display_name
+ _.each(_.keys(many2ones), function (name) {
+ defs.push(self._fetchNameGets(x2manyList, name));
+ });
+
+ return $.when.apply($, defs);
+ },
+ /**
* Reads data from server for all missing fields.
*
* @private
diff --git a/addons/web/static/src/js/widgets/debug_manager.js b/addons/web/static/src/js/widgets/debug_manager.js
index 2c9cf3d4457..732fd7dc157 100644
--- a/addons/web/static/src/js/widgets/debug_manager.js
+++ b/addons/web/static/src/js/widgets/debug_manager.js
@@ -470,7 +470,7 @@ DebugManager.include({
$defaults.parent().addClass('o_form_invalid');
return;
}
- var allUsers = d.$el.find('#formview_default_all').is(':checked');
+ var selfUser = d.$el.find('#formview_default_self').is(':checked');
var condition = d.$el.find('#formview_default_conditions').val();
var value = _.find(self.fields, function (field) {
return field.name === fieldToSet;
@@ -482,7 +482,7 @@ DebugManager.include({
self._active_view.fields_view.model,
fieldToSet,
value,
- allUsers,
+ selfUser,
true,
condition || false,
],
diff --git a/addons/web/static/src/less/kanban_view.less b/addons/web/static/src/less/kanban_view.less
index d95a518fdda..153f6997d4d 100644
--- a/addons/web/static/src/less/kanban_view.less
+++ b/addons/web/static/src/less/kanban_view.less
@@ -208,7 +208,9 @@
.o_kanban_record_headings {
line-height: 1.2;
.o-flex(1, 1, auto);
-
+ // Ensure long word doesn't break out of container
+ word-wrap: break-word;
+ overflow: hidden;
}
}