summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-09-21 18:52:56 +0200
committerChristophe Simonis <chs@odoo.com>2017-09-21 18:52:56 +0200
commit4b455098f8cefa5122479a5a84fa07c2330e7a66 (patch)
tree43d625a9e37a5d9c07780f8116bf0247fb693fe0 /addons/web/static/src/js/views/basic
parentf53e65c356a5d43d2b5b50dc509ee70e0df30ba5 (diff)
parent5c51a0ad4d6bfab6427949ffe61650196798846a (diff)
[MERGE] forward port branch saas-18 up to 5c51a0ad4d6
Diffstat (limited to 'addons/web/static/src/js/views/basic')
-rw-r--r--addons/web/static/src/js/views/basic/basic_controller.js2
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js21
-rw-r--r--addons/web/static/src/js/views/basic/basic_renderer.js18
3 files changed, 27 insertions, 14 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_controller.js b/addons/web/static/src/js/views/basic/basic_controller.js
index 46359188577..481fc0cf4dd 100644
--- a/addons/web/static/src/js/views/basic/basic_controller.js
+++ b/addons/web/static/src/js/views/basic/basic_controller.js
@@ -71,7 +71,7 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
return $.when(false);
}
- var message = _t("The record has been modified, your changes will be discarded. Are you sure you want to ?");
+ var message = _t("The record has been modified, your changes will be discarded. Do you want to proceed?");
var def = $.Deferred();
var dialog = Dialog.confirm(this, message, {
title: _t("Warning"),
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 5b6eb35b4ac..276fd4df82b 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -769,7 +769,7 @@ var BasicModel = AbstractModel.extend({
removeLine: function (elementID) {
var record = this.localData[elementID];
var parent = this.localData[record.parentID];
- if (parent.parentID) {
+ if (parent.static) {
// x2Many case: the new record has been stored in _changes, as a
// command so we remove the command(s) related to that record
parent._changes = _.filter(parent._changes, function (change) {
@@ -778,6 +778,7 @@ var BasicModel = AbstractModel.extend({
} else {
// main list view case: the new record is in data
parent.data = _.without(parent.data, elementID);
+ parent.count--;
}
},
/**
@@ -1307,13 +1308,25 @@ var BasicModel = AbstractModel.extend({
record._changes[name] = list.id;
var shouldLoad = false;
list._changes = list._changes || [];
+
+ // save it in case of a [5] which will remove the _changes
+ var oldChanges = list._changes;
_.each(val, function (command) {
- var rec;
+ var rec, recID;
if (command[0] === 0 || command[0] === 1) {
// CREATE or UPDATE
+ if (command[0] === 0 && command[1]) {
+ // updating an existing (virtual) record
+ var previousChange = _.find(oldChanges, function (operation) {
+ var child = self.localData[operation.id];
+ return child && (child.res_id === command[1]);
+ });
+ recID = previousChange && previousChange.id;
+ rec = self.localData[recID];
+ }
if (command[0] === 1 && command[1]) {
// updating an existing record
- var recID = _.find(list.data, function (childID) {
+ recID = _.find(list.data, function (childID) {
var child = self.localData[childID];
return child.res_id === command[1];
});
@@ -1327,7 +1340,7 @@ var BasicModel = AbstractModel.extend({
modelName: list.model,
parentID: list.id,
viewType: list.viewType,
- ref: command[1],
+ ref: command[1],
};
if (command[0] === 1) {
params.res_id = command[1];
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 ee6e685c3d4..24922622a42 100644
--- a/addons/web/static/src/js/views/basic/basic_renderer.js
+++ b/addons/web/static/src/js/views/basic/basic_renderer.js
@@ -288,18 +288,18 @@ var BasicRenderer = AbstractRenderer.extend({
* from internal referencing.
*
* @private
- * @param {Object} record
+ * @param {string} recordID id of the local resource
* @param {AbstractField} widget
* @returns {integer} the index of the removed widget
*/
- _destroyFieldWidget: function (record, widget) {
- var recordWidgets = this.allFieldWidgets[record.id];
+ _destroyFieldWidget: function (recordID, widget) {
+ var recordWidgets = this.allFieldWidgets[recordID];
var index = recordWidgets.indexOf(widget);
if (index >= 0) {
recordWidgets.splice(index, 1);
}
- this._unregisterModifiersElement(widget.__node, record, widget);
- widget.$el.destroy();
+ this._unregisterModifiersElement(widget.__node, recordID, widget);
+ widget.destroy();
return index;
},
/**
@@ -594,7 +594,7 @@ var BasicRenderer = AbstractRenderer.extend({
widget.$el.replaceWith(newWidget.$el);
// Destroy the old widget and position the new one at the old one's
- var oldIndex = this._destroyFieldWidget(record, widget);
+ var oldIndex = this._destroyFieldWidget(record.id, widget);
var recordWidgets = this.allFieldWidgets[record.id];
recordWidgets.splice(oldIndex, 0, newWidget);
recordWidgets.pop();
@@ -606,13 +606,13 @@ var BasicRenderer = AbstractRenderer.extend({
* node and record.
*
* @param {Object} node
- * @param {Object} record
+ * @param {string} recordID id of the local resource
* @param {jQuery|AbstractField} element
*/
- _unregisterModifiersElement: function (node, record, element) {
+ _unregisterModifiersElement: function (node, recordID, element) {
var modifiersData = this._getModifiersData(node);
if (modifiersData) {
- var elements = modifiersData.elementsByRecord[record.id];
+ var elements = modifiersData.elementsByRecord[recordID];
var index = _.findIndex(elements, function (oldElement) {
return oldElement.widget === element
|| oldElement.$el[0] === element[0];