summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-04-24 17:42:41 +0200
committerChristophe Simonis <chs@odoo.com>2018-04-24 17:42:41 +0200
commitb192431aeecc59b48898ce9c6f276b82d65cbfa6 (patch)
tree598ec468eac64914858e24d2235827d905692c80 /addons/web/static/src
parentddf601d44367a791848da38df9cff02b3e32b95b (diff)
parentec5e27bb7cc7808d7128eae4e7e67910f40492c0 (diff)
[MERGE] forward port branch saas-11.3 up to ec5e27bb7cc
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/chrome/action_manager_act_window.js9
-rw-r--r--addons/web/static/src/js/fields/field_registry.js1
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js4
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_model.js12
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_controller.js18
5 files changed, 35 insertions, 9 deletions
diff --git a/addons/web/static/src/js/chrome/action_manager_act_window.js b/addons/web/static/src/js/chrome/action_manager_act_window.js
index 0ed909e2512..e040096f60b 100644
--- a/addons/web/static/src/js/chrome/action_manager_act_window.js
+++ b/addons/web/static/src/js/chrome/action_manager_act_window.js
@@ -615,7 +615,14 @@ ActionManager.include({
};
var controllerDef = action.controllers[viewType];
- if (!controllerDef) {
+ if (!controllerDef || controllerDef.state() === 'rejected') {
+ // if the controllerDef is rejected, it probably means that the js
+ // code or the requests made to the server crashed. In that case,
+ // if we reuse the same deferred, then the switch to the view is
+ // definitely blocked. We want to use a new controller, even though
+ // it is very likely that it will recrash again. At least, it will
+ // give more feedback to the user, and it could happen that one
+ // record crashes, but not another.
controllerDef = newController();
} else {
controllerDef = controllerDef.then(function (controller) {
diff --git a/addons/web/static/src/js/fields/field_registry.js b/addons/web/static/src/js/fields/field_registry.js
index 53a12fc8944..135243398fe 100644
--- a/addons/web/static/src/js/fields/field_registry.js
+++ b/addons/web/static/src/js/fields/field_registry.js
@@ -26,6 +26,7 @@ registry
.add('datetime', basic_fields.FieldDateTime)
.add('domain', basic_fields.FieldDomain)
.add('text', basic_fields.FieldText)
+ .add('html', basic_fields.FieldText)
.add('float', basic_fields.FieldFloat)
.add('char', basic_fields.FieldChar)
.add('link_button', basic_fields.LinkButton)
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 45d698cd75b..ec0fad66a06 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -358,6 +358,7 @@ var BasicModel = AbstractModel.extend({
var element = this.localData[id];
var isNew = this.isNew(id);
var rollback = 'rollback' in options ? options.rollback : isNew;
+ var initialOffset = element.offset;
this._visitChildren(element, function (elem) {
if (rollback && elem._savePoint) {
if (elem._savePoint instanceof Array) {
@@ -376,6 +377,7 @@ var BasicModel = AbstractModel.extend({
delete elem.tempLimitIncrement;
}
});
+ element.offset = initialOffset;
},
/**
* Duplicate a record (by calling the 'copy' route)
@@ -3667,7 +3669,7 @@ var BasicModel = AbstractModel.extend({
r._changes[fieldName] = rec.id;
many2ones[fieldName] = true;
} else if (_.contains(['one2many', 'many2many'], fieldType)) {
- var x2mCommands = commands[0][2][fieldName];
+ var x2mCommands = value[2][fieldName];
defs.push(self._processX2ManyCommands(r, fieldName, x2mCommands));
} else {
r._changes[fieldName] = self._parseServerValue(field, r._changes[fieldName]);
diff --git a/addons/web/static/src/js/views/calendar/calendar_model.js b/addons/web/static/src/js/views/calendar/calendar_model.js
index b847d7ca391..240beb9f1dc 100644
--- a/addons/web/static/src/js/views/calendar/calendar_model.js
+++ b/addons/web/static/src/js/views/calendar/calendar_model.js
@@ -559,6 +559,7 @@ return AbstractModel.extend({
});
var fs = [];
+ var undefined_fs = [];
_.each(events, function (event) {
var data = event.record[fieldName];
if (!_.contains(['many2many', 'one2many'], field.type)) {
@@ -568,15 +569,18 @@ return AbstractModel.extend({
}
_.each(data, function (_value) {
var value = _.isArray(_value) ? _value[0] : _value;
- fs.push({
+ var f = {
'color_index': self.model_color === (field.relation || element.model) ? value : false,
'value': value,
- 'label': fieldUtils.format[field.type](_value, field),
+ 'label': fieldUtils.format[field.type](_value, field) || _t("Undefined"),
'avatar_model': field.relation || element.model,
- });
+ };
+ // if field used as color does not have value then push filter in undefined_fs,
+ // such filters should come last in filter list with Undefined string, later merge it with fs
+ value ? fs.push(f) : undefined_fs.push(f);
});
});
- _.each(fs, function (f) {
+ _.each(_.union(fs, undefined_fs), function (f) {
var f1 = _.findWhere(filter.filters, f);
if (f1) {
f1.display = true;
diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js
index 5e8bcbf963f..986fff3a53e 100644
--- a/addons/web/static/src/js/views/kanban/kanban_controller.js
+++ b/addons/web/static/src/js/views/kanban/kanban_controller.js
@@ -79,6 +79,16 @@ var KanbanController = BasicController.extend({
return this.renderer.updateRecord(this.model.get(id));
},
/**
+ * @param {number[]} ids
+ * @private
+ * @returns {Deferred}
+ */
+ _resequenceColumns: function (ids) {
+ var state = this.model.get(this.handle, {raw: true});
+ var model = state.fields[state.groupedBy[0]].relation;
+ return this.model.resequence(model, ids, this.handle);
+ },
+ /**
* This method calls the server to ask for a resequence. Note that this
* does not rerender the user interface, because in most case, the
* resequencing operation has already been displayed by the renderer.
@@ -134,6 +144,10 @@ var KanbanController = BasicController.extend({
_onAddColumn: function (event) {
var self = this;
this.model.createGroup(event.data.value, this.handle).then(function () {
+ var state = self.model.get(self.handle, {raw: true});
+ var ids = _.pluck(state.data, 'res_id').filter(_.isNumber);
+ return self._resequenceColumns(ids);
+ }).then(function () {
return self.update({}, {reload: false});
}).then(function () {
self._updateButtons();
@@ -396,9 +410,7 @@ var KanbanController = BasicController.extend({
*/
_onResequenceColumn: function (event) {
var self = this;
- var state = this.model.get(this.handle, {raw: true});
- var model = state.fields[state.groupedBy[0]].relation;
- this.model.resequence(model, event.data.ids, this.handle).then(function () {
+ this._resequenceColumns(event.data.ids).then(function () {
self._updateEnv();
});
},