[FIX] web_widget_one2many_product_picker: Update widget state

pull/1858/head
Alexandre D. Díaz 2021-01-27 14:14:39 +01:00
parent 90ed0e255c
commit 0fb8c1b12b
1 changed files with 16 additions and 4 deletions

View File

@ -119,7 +119,7 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
* @param {Array[Object]} states * @param {Array[Object]} states
* @returns {Deferred} * @returns {Deferred}
*/ */
_removeRecords: function (states) { _removeRecords: function (states, new_states) {
var defs = []; var defs = [];
var to_destroy = []; var to_destroy = [];
for (var index_state in states) { for (var index_state in states) {
@ -145,6 +145,7 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
var widget_product_id = widget_destroyed.state var widget_product_id = widget_destroyed.state
.data[this.options.field_map.product].data.id; .data[this.options.field_map.product].data.id;
var found = false; var found = false;
// If already exists a widget for the product don't try create a new one
for (var eb = this.widgets.length-1; eb>=0; --eb) { for (var eb = this.widgets.length-1; eb>=0; --eb) {
var widget = this.widgets[eb]; var widget = this.widgets[eb];
if ( if (
@ -156,9 +157,21 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
break; break;
} }
} }
if (!found) { if (!found) {
// Get the new state ID if exists to link it with the new record
var new_state_id = undefined;
for (var eb = new_states.length-1; eb>=0; --eb) {
var state = new_states[eb];
if (
state.data[this.options.field_map.product].data.id === widget_product_id
) {
new_state_id = state.id;
break;
}
}
var search_record = _.find(this.search_data, {id: widget_product_id}); var search_record = _.find(this.search_data, {id: widget_product_id});
var new_search_record = _.extend({}, search_record, {__id: state.id}); var new_search_record = _.extend({}, search_record, {__id: new_state_id});
var search_record_index = widget_destroyed.$el.index(); var search_record_index = widget_destroyed.$el.index();
defs.push( defs.push(
this.appendSearchRecords( this.appendSearchRecords(
@ -202,8 +215,7 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
states_to_destroy.push(old_state); states_to_destroy.push(old_state);
} }
} }
this._removeRecords(states_to_destroy, this.state.data);
this._removeRecords(states_to_destroy);
// Records to Update or Create // Records to Update or Create
var defs = []; var defs = [];