summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields/relational_fields.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/fields/relational_fields.js')
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js53
1 files changed, 34 insertions, 19 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index 642fa55b33e..85342269617 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -812,7 +812,7 @@ var FieldX2Many = AbstractField.extend({
open_record: '_onOpenRecord',
kanban_record_delete: '_onRemoveRecord',
list_record_remove: '_onRemoveRecord',
- resequence: '_onResequence',
+ resequence_records: '_onResequenceRecords',
save_line: '_onSaveLine',
toggle_column_order: '_onToggleColumnOrder',
activate_next_widget: '_onActiveNextWidget',
@@ -1043,6 +1043,7 @@ var FieldX2Many = AbstractField.extend({
};
_.extend(rendererParams, {
record_options: record_options,
+ readOnlyMode: this.isReadonly,
});
}
@@ -1351,38 +1352,52 @@ var FieldX2Many = AbstractField.extend({
* Forces a resequencing of the records.
*
* @private
- * @param {OdooEvent} event
+ * @param {OdooEvent} ev
+ * @param {string[]} ev.data.recordIds
+ * @param {integer} ev.data.offset
+ * @param {string} ev.data.handleField
*/
- _onResequence: function (event) {
- event.stopPropagation();
+ _onResequenceRecords: function (ev) {
+ ev.stopPropagation();
var self = this;
- this.trigger_up('edited_list', { id: this.value.id });
- var rowIDs = event.data.rowIDs.slice();
- var rowID = rowIDs.pop();
- var defs = _.map(rowIDs, function (rowID, index) {
+ if (this.view.arch.tag === 'tree') {
+ this.trigger_up('edited_list', { id: this.value.id });
+ }
+ var handleField = ev.data.handleField;
+ var offset = ev.data.offset;
+ var recordIds = ev.data.recordIds.slice();
+ // trigger an update of all records but the last one with option
+ // 'notifyChanges' set to false, and once all those changes have been
+ // validated by the model, trigger the change on the last record
+ // (without the option, s.t. the potential onchange on parent record
+ // is triggered)
+ var recordId = recordIds.pop();
+ var proms = recordIds.map(function (recordId, index) {
var data = {};
- data[event.data.handleField] = event.data.offset + index;
+ data[handleField] = offset + index;
return self._setValue({
operation: 'UPDATE',
- id: rowID,
+ id: recordId,
data: data,
}, {
notifyChange: false,
});
});
- Promise.all(defs).then(function () {
+ Promise.all(proms).then(function () {
function always() {
- self.trigger_up('toggle_column_order', {
- id: self.value.id,
- name: event.data.handleField,
- });
+ if (self.view.arch.tag === 'tree') {
+ self.trigger_up('toggle_column_order', {
+ id: self.value.id,
+ name: handleField,
+ });
+ }
}
-
- // trigger only once the onchange for parent record
+ var data = {};
+ data[handleField] = offset + recordIds.length;
self._setValue({
operation: 'UPDATE',
- id: rowID,
- data: _.object([event.data.handleField], [event.data.offset + rowIDs.length]),
+ id: recordId,
+ data: data,
}).then(always).guardedCatch(always);
});
},