From 49f0413290821cb123e75b4546873cf98edf1d25 Mon Sep 17 00:00:00 2001 From: fwi-odoo Date: Wed, 16 Aug 2017 17:16:03 +0200 Subject: [FIX] web: debug manager: open the set_default dialog Before this commit, the function opening the set_default dialog was not declared anymore. This commit redefines this function in the debug manager. --- addons/web/static/src/js/widgets/debug_manager.js | 89 ++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/widgets/debug_manager.js') diff --git a/addons/web/static/src/js/widgets/debug_manager.js b/addons/web/static/src/js/widgets/debug_manager.js index badff89c846..e38813478b0 100644 --- a/addons/web/static/src/js/widgets/debug_manager.js +++ b/addons/web/static/src/js/widgets/debug_manager.js @@ -348,7 +348,94 @@ DebugManager.include({ }); }, set_defaults: function() { - this._active_view.controller.open_defaults_dialog(); + var self = this; + var renderer = this._active_view.controller.renderer; + var fields = self._active_view.fields_view.fields; + var fieldsInfo = self._active_view.fields_view.fieldsInfo.form; + var fieldNamesInView = renderer.state.getFieldNames(); + var fieldsValues = renderer.state.data; + var modifierDatas = {}; + _.each(fieldNamesInView, function (fieldName) { + modifierDatas[fieldName] = _.find(renderer.allModifiersData, function (modifierdata) { + return modifierdata.node.attrs.name === fieldName; + }); + }); + this.fields = _.chain(fieldNamesInView) + .map(function (fieldName) { + var modifierData = modifierDatas[fieldName]; + var invisibleOrReadOnly; + if (modifierData) { + var evaluatedModifiers = modifierData.evaluatedModifiers[renderer.state.id]; + invisibleOrReadOnly = evaluatedModifiers.invisible || evaluatedModifiers.readonly; + } + var fieldInfo = fields[fieldName]; + var value = fieldsValues[fieldName]; + var displayed = value; + if (value && fieldInfo.type === 'many2one') { + displayed = value.data.display_name; + value = value.data.id; + } else if (value && fieldInfo.type === 'selection') { + displayed = _.find(fieldInfo.selection, function (option) { + return option[0] === value; + })[1]; + } + // ignore fields which are empty, invisible, readonly, o2m + // or m2m + if (!value || invisibleOrReadOnly || fieldInfo.type === 'one2many' || + fieldInfo.type === 'many2many' || fieldInfo.type === 'binary' || + fieldsInfo[fieldName].options.isPassword) { + return false; + } + return { + name: fieldName, + string: fieldInfo.string, + value: value, + displayed: displayed, + }; + }) + .compact() + .sortBy(function (field) { return field.string; }) + .value(); + var d = new Dialog(this, { + title: _t("Set Default"), + buttons: [ + {text: _t("Close"), close: true}, + {text: _t("Save default"), click: function () { + var $defaults = d.$el.find('#formview_default_fields'); + var fieldToSet = $defaults.val(); + if (!fieldToSet) { + $defaults.parent().addClass('o_form_invalid'); + return; + } + var allUsers = d.$el.find('#formview_default_all').is(':checked'); + var value = _.find(self.fields, function (field) { + return field.name === fieldToSet; + }).value; + self._rpc({ + model: 'ir.values', + method: 'set_default', + args: [ + self._active_view.fields_view.model, + fieldToSet, + value, + allUsers, + true, + false + ], + }).done(function () { d.close(); }); + }} + ] + }); + d.args = { + fields: this.fields, + // @FIXME + // The conditions part has been dropped from now on because the flag 'change_default' + // disappeared during the web client refactoring. Should be implemented again in the + // right place. + conditions: [], + }; + d.template = 'FormView.set_default'; + d.open(); }, fvg: function() { var dialog = new Dialog(this, { title: _t("Fields View Get") }).open(); -- cgit v1.2.3 From 65ecd109a5910b9bf919b42fc8198f3762f5f240 Mon Sep 17 00:00:00 2001 From: Martin Geubelle Date: Tue, 22 Aug 2017 14:22:03 +0200 Subject: [FIX] web: reimplement conditions in the "Set Default" dialog The rev. https://github.com/odoo/odoo/commit/49f0413290821cb123e75b4546873cf98edf1d25 reintroduced the "Set Default" dialog but forgot the conditions part. This rev. reintroduces the missing part. --- addons/web/static/src/js/widgets/debug_manager.js | 57 ++++++++++++++++------- 1 file changed, 40 insertions(+), 17 deletions(-) (limited to 'addons/web/static/src/js/widgets/debug_manager.js') diff --git a/addons/web/static/src/js/widgets/debug_manager.js b/addons/web/static/src/js/widgets/debug_manager.js index e38813478b0..5fc51d1deb1 100644 --- a/addons/web/static/src/js/widgets/debug_manager.js +++ b/addons/web/static/src/js/widgets/debug_manager.js @@ -349,6 +349,20 @@ DebugManager.include({ }, set_defaults: function() { var self = this; + + var display = function (fieldInfo, value) { + var displayed = value; + if (value && fieldInfo.type === 'many2one') { + displayed = value.data.display_name; + value = value.data.id; + } else if (value && fieldInfo.type === 'selection') { + displayed = _.find(fieldInfo.selection, function (option) { + return option[0] === value; + })[1]; + } + return [value, displayed]; + }; + var renderer = this._active_view.controller.renderer; var fields = self._active_view.fields_view.fields; var fieldsInfo = self._active_view.fields_view.fieldsInfo.form; @@ -369,17 +383,10 @@ DebugManager.include({ invisibleOrReadOnly = evaluatedModifiers.invisible || evaluatedModifiers.readonly; } var fieldInfo = fields[fieldName]; - var value = fieldsValues[fieldName]; - var displayed = value; - if (value && fieldInfo.type === 'many2one') { - displayed = value.data.display_name; - value = value.data.id; - } else if (value && fieldInfo.type === 'selection') { - displayed = _.find(fieldInfo.selection, function (option) { - return option[0] === value; - })[1]; - } - // ignore fields which are empty, invisible, readonly, o2m + var valueDisplayed = display(fieldInfo, fieldsValues[fieldName]); + var value = valueDisplayed[0]; + var displayed = valueDisplayed[1]; + // ignore fields which are empty, invisible, readonly, o2m // or m2m if (!value || invisibleOrReadOnly || fieldInfo.type === 'one2many' || fieldInfo.type === 'many2many' || fieldInfo.type === 'binary' || @@ -396,6 +403,25 @@ DebugManager.include({ .compact() .sortBy(function (field) { return field.string; }) .value(); + + var conditions = _.chain(fieldNamesInView) + .filter(function (fieldName) { + var fieldInfo = fields[fieldName]; + return fieldInfo.change_default; + }) + .map(function (fieldName) { + var fieldInfo = fields[fieldName]; + var valueDisplayed = display(fieldInfo, fieldsValues[fieldName]); + var value = valueDisplayed[0]; + var displayed = valueDisplayed[1]; + return { + name: fieldName, + string: fieldInfo.string, + value: value, + displayed: displayed, + }; + }) + .value(); var d = new Dialog(this, { title: _t("Set Default"), buttons: [ @@ -408,6 +434,7 @@ DebugManager.include({ return; } var allUsers = d.$el.find('#formview_default_all').is(':checked'); + var condition = d.$el.find('#formview_default_conditions').val(); var value = _.find(self.fields, function (field) { return field.name === fieldToSet; }).value; @@ -420,7 +447,7 @@ DebugManager.include({ value, allUsers, true, - false + condition || false, ], }).done(function () { d.close(); }); }} @@ -428,11 +455,7 @@ DebugManager.include({ }); d.args = { fields: this.fields, - // @FIXME - // The conditions part has been dropped from now on because the flag 'change_default' - // disappeared during the web client refactoring. Should be implemented again in the - // right place. - conditions: [], + conditions: conditions, }; d.template = 'FormView.set_default'; d.open(); -- cgit v1.2.3