summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields/relational_fields.js
diff options
context:
space:
mode:
authorPrakash Prajapati <ppr@odoo.com>2019-04-04 13:17:49 +0000
committerVincent Schippefilt <vsc@odoo.com>2019-05-22 13:43:44 +0000
commit4107dc11deb596a0a320bcf6f5c7c811376bbd7d (patch)
treea6096d415868f95683834c0f121b2829bc1a892a /addons/web/static/src/js/fields/relational_fields.js
parent199bb65b42542c32872d26399d6be3bce45d7853 (diff)
[ADD] web: Allow to add multiple records in m2m_tags widget.
Before this commit when user want to add multiple record at that time they only allow to add one record at a time. After this commit user can add multiple record from search more wizard. Added function _getSearchCreatePopupOptions so that it can be overridden in FieldMany2ManyTags, options for FieldMany2ManyTags will differ, like FieldMany2ManyTags SearchCreateDailog should have multi record selection, Many2ManyTags' SelectCreateDialog should display record other than selected This commit is related to task id: 1945912 closes odoo/odoo#32453 Signed-off-by: VincentSchippefilt <VincentSchippefilt@users.noreply.github.com> Co-authored-by: Mohammed Shekha <msh@openerp.com>
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, 38 insertions, 15 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index 325e0ceb8e8..398928f585b 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -377,6 +377,29 @@ var FieldMany2One = AbstractField.extend({
return value.split('\n')[0];
},
/**
+ * Prepares and returns options for SelectCreateDialog
+ *
+ * @private
+ */
+ _getSearchCreatePopupOptions: function(view, ids, context, dynamicFilters) {
+ var self = this;
+ return {
+ res_model: this.field.relation,
+ domain: this.record.getDomain({fieldName: this.name}),
+ context: _.extend({}, this.record.getContext(this.recordParams), context || {}),
+ dynamicFilters: dynamicFilters || [],
+ title: (view === 'search' ? _t("Search: ") : _t("Create: ")) + this.string,
+ initial_ids: ids,
+ initial_view: view,
+ disable_multiple_selection: true,
+ no_create: !self.can_create,
+ on_selected: function (records) {
+ self.reinitialize(records[0]);
+ self.activate();
+ }
+ };
+ },
+ /**
* Listens to events 'field_changed' to keep track of the last event that
* has been trigerred. This allows to detect that all changes have been
* acknowledged by the environment.
@@ -613,21 +636,8 @@ var FieldMany2One = AbstractField.extend({
*/
_searchCreatePopup: function (view, ids, context, dynamicFilters) {
var self = this;
- return new dialogs.SelectCreateDialog(this, _.extend({}, this.nodeOptions, {
- res_model: this.field.relation,
- domain: this.record.getDomain({fieldName: this.name}),
- context: _.extend({}, this.record.getContext(this.recordParams), context || {}),
- dynamicFilters: dynamicFilters || [],
- title: (view === 'search' ? _t("Search: ") : _t("Create: ")) + this.string,
- initial_ids: ids,
- initial_view: view,
- disable_multiple_selection: true,
- no_create: !self.can_create,
- on_selected: function (records) {
- self.reinitialize(records[0]);
- self.activate();
- }
- })).open();
+ var options = this._getSearchCreatePopupOptions(view, ids, context, dynamicFilters);
+ return new dialogs.SelectCreateDialog(this, _.extend({}, this.nodeOptions, options)).open();
},
/**
* @private
@@ -2119,6 +2129,19 @@ var FieldMany2ManyTags = AbstractField.extend({
this.many2one._getSearchBlacklist = function () {
return self.value.res_ids;
};
+ var _getSearchCreatePopupOptions = this.many2one._getSearchCreatePopupOptions;
+ this.many2one._getSearchCreatePopupOptions = function (view, ids, context, dynamicFilters) {
+ var options = _getSearchCreatePopupOptions.apply(this, arguments);
+ var domain = this.record.getDomain({fieldName: this.name});
+ return _.extend({}, options, {
+ domain: domain.concat(["!", ["id", "in", self.value.res_ids]]),
+ disable_multiple_selection: false,
+ on_selected: function (records) {
+ self.many2one.reinitialize(records);
+ self.many2one.activate();
+ }
+ });
+ };
return this.many2one.appendTo(this.$el);
},
/**