diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-07-18 17:59:23 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-07-18 17:59:23 +0200 |
| commit | e5fab318d9ca1e578c88b543c72380c7df521cbb (patch) | |
| tree | 80c3499118807a85b3ab47294457d2e029446995 /addons/board/static | |
| parent | 1969168affbe76d43d607f386eca26b19b5abcc7 (diff) | |
| parent | 02f38beffbb5053c81e9f6828d36a2de9468b2bc (diff) | |
[MERGE] forward port branch saas-11.2 up to 02f38beffbb
Diffstat (limited to 'addons/board/static')
| -rw-r--r-- | addons/board/static/src/js/board_view.js | 19 | ||||
| -rw-r--r-- | addons/board/static/tests/dashboard_tests.js | 45 |
2 files changed, 63 insertions, 1 deletions
diff --git a/addons/board/static/src/js/board_view.js b/addons/board/static/src/js/board_view.js index f65e6bb1e85..aa0613e9785 100644 --- a/addons/board/static/src/js/board_view.js +++ b/addons/board/static/src/js/board_view.js @@ -109,7 +109,7 @@ var BoardController = FormController.extend({ this.do_action({ type: 'ir.actions.act_window', res_model: event.data.model, - views: [[false, 'form']], + views: [[event.data.formViewID || false, 'form']], res_id: event.data.res_id, }); }, @@ -120,6 +120,7 @@ var BoardRenderer = FormRenderer.extend({ do_action: '_onDoAction', env_updated: '_onEnvUpdated', update_filters: '_onUpdateFilters', + switch_view: '_onSwitchView', }), events: _.extend({}, FormRenderer.prototype.events, { 'click .oe_dashboard_column .oe_fold': '_onFoldClick', @@ -135,6 +136,7 @@ var BoardRenderer = FormRenderer.extend({ this.noContentHelp = params.noContentHelp; this.actionsDescr = {}; this._boardSubcontrollers = []; // for board: controllers of subviews + this._boardFormViewIDs = {}; // for board: mapping subview controller to form view id }, /** * Call `on_attach_callback` for each subview @@ -260,6 +262,11 @@ var BoardRenderer = FormRenderer.extend({ hasSelectors: false, }); return view.getController(self).then(function (controller) { + self._boardFormViewIDs[controller.handle] = _.first( + _.find(action.views, function (descr) { + return descr[1] === 'form'; + }) + ); self._boardSubcontrollers.push(controller); return controller.appendTo(params.$node); }); @@ -402,6 +409,16 @@ var BoardRenderer = FormRenderer.extend({ this.trigger_up('save_dashboard'); }, /** + * Let FormController know which form view it should display based on the + * window action of the sub controller that is switching view + * + * @private + * @param {OdooEvent} event + */ + _onSwitchView: function (event) { + event.data.formViewID = this._boardFormViewIDs[event.target.handle]; + }, + /** * Stops the propagation of 'update_filters' events triggered by the * controllers instantiated by the dashboard to prevent them from * interfering with the ActionManager. diff --git a/addons/board/static/tests/dashboard_tests.js b/addons/board/static/tests/dashboard_tests.js index 9afb88e5648..ef6162ff755 100644 --- a/addons/board/static/tests/dashboard_tests.js +++ b/addons/board/static/tests/dashboard_tests.js @@ -275,6 +275,51 @@ QUnit.test('can open a record', function (assert) { form.destroy(); }); +QUnit.test('can open record using action form view', function (assert) { + assert.expect(1); + + var form = createView({ + View: FormView, + model: 'board', + data: this.data, + arch: '<form string="My Dashboard">' + + '<board style="2-1">' + + '<column>' + + '<action context="{}" view_mode="list" string="ABC" name="51" domain="[]"></action>' + + '</column>' + + '</board>' + + '</form>', + mockRPC: function (route) { + if (route === '/web/action/load') { + return $.when({ + res_model: 'partner', + views: [[4, 'list'], [5, 'form']], + }); + } + return this._super.apply(this, arguments); + }, + archs: { + 'partner,4,list': + '<tree string="Partner"><field name="foo"/></tree>', + 'partner,5,form': + '<form string="Partner"><field name="display_name"/></form>', + }, + intercepts: { + do_action: function (event) { + assert.deepEqual(event.data.action, { + res_id: 1, + res_model: 'partner', + type: 'ir.actions.act_window', + views: [[5, 'form']], + }, "should do a do_action with correct parameters"); + }, + }, + }); + + form.$('tr.o_data_row td:contains(yop)').click(); + form.destroy(); +}); + QUnit.test('can drag and drop a view', function (assert) { assert.expect(4); |
