diff options
| author | Julien Mougenot <jum@odoo.com> | 2020-07-13 13:18:20 +0000 |
|---|---|---|
| committer | Mathieu Duckerts-Antoine <dam@odoo.com> | 2020-07-23 08:21:10 +0000 |
| commit | 3162141e4d71e9c55aff5241c5578571b68c332d (patch) | |
| tree | b925820ad917acfce48e4030b06ba55d88ba1c77 /addons/lunch | |
| parent | 7ff2e5822f08616dd22c142e0e05ed4355801760 (diff) | |
[IMP] lunch: Conversion of model to extension
Conversion of the lunch kanban model to a proper search extension.
Now that the view search model supports model extensions, it has become
more convenient to provide additional domain informations by appending
new extensions.
This is why the lunch "location" logic (locationId and userId) has been
shifted to a new model extension ("Lunch Model Extension") which
provides an additional domain part to the other search extensions.
Part of task 2228968
Co-authored-by: Julien Mougenot <jum@odoo.com>
Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
Diffstat (limited to 'addons/lunch')
| -rw-r--r-- | addons/lunch/static/src/js/lunch_controller_common.js | 51 | ||||
| -rw-r--r-- | addons/lunch/static/src/js/lunch_kanban_view.js | 12 | ||||
| -rw-r--r-- | addons/lunch/static/src/js/lunch_list_view.js | 9 | ||||
| -rw-r--r-- | addons/lunch/static/src/js/lunch_model_extension.js | 100 | ||||
| -rw-r--r-- | addons/lunch/views/lunch_templates.xml | 2 |
5 files changed, 116 insertions, 58 deletions
diff --git a/addons/lunch/static/src/js/lunch_controller_common.js b/addons/lunch/static/src/js/lunch_controller_common.js index 27ce66ec49c..8cd09316220 100644 --- a/addons/lunch/static/src/js/lunch_controller_common.js +++ b/addons/lunch/static/src/js/lunch_controller_common.js @@ -27,7 +27,6 @@ var LunchControllerCommon = { */ init: function () { this._super.apply(this, arguments); - this.userId = null; this.editMode = false; this.updated = false; this.widgetData = null; @@ -60,30 +59,16 @@ var LunchControllerCommon = { }, }); }, - _fetchWidgetData: function () { - var self = this; - - return this._rpc({ + _fetchWidgetData: async function () { + this.widgetData = await this._rpc({ route: '/lunch/infos', params: { - user_id: this.userId, + user_id: this.searchModel.get('userId'), context: this.context, }, - }).then(function (data) { - self.widgetData = data; - return self.model._updateLocation(data.user_location[0]); }); }, /** - * Override to add the location domain (coming from the LunchWidget) - * to the searchDomain (coming from the controlPanel). - * - * @override - */ - _getViewDomain: async function () { - return this.model.getLocationDomain(); - }, - /** * Renders and appends the lunch banner widget. * * @private @@ -140,28 +125,14 @@ var LunchControllerCommon = { }); }, _onLocationChanged: function (ev) { - var self = this; - ev.stopPropagation(); - - this._rpc({ - route: '/lunch/user_location_set', - params: { - user_id: this.userId, - location_id: ev.data.locationId, - context: this.context, - }, - }).then(function () { - self.model._updateLocation(ev.data.locationId).then(function () { - self.reload(); - }); - }); + this.searchModel.dispatch('setLocationId', ev.data.locationId); }, _onOpenWizard: function (ev) { var self = this; ev.stopPropagation(); - var ctx = this.userId ? {default_user_id: this.userId} : {}; + var ctx = this.searchModel.get('userId') ? {default_user_id: this.searchModel.get('userId')} : {}; var options = { on_close: function () { @@ -197,7 +168,7 @@ var LunchControllerCommon = { this._rpc({ route: '/lunch/pay', params: { - user_id: this.userId, + user_id: this.searchModel.get('userId'), context: this.context, }, }).then(function (isPaid) { @@ -224,13 +195,7 @@ var LunchControllerCommon = { }, _onUserChanged: function (ev) { ev.stopPropagation(); - - var self = this; - - this.userId = ev.data.userId; - this.model._updateUser(ev.data.userId).then(function () { - self.reload(); - }); + this.searchModel.dispatch('updateUserId', ev.data.userId); }, _onUnlinkOrder: function (ev) { var self = this; @@ -239,7 +204,7 @@ var LunchControllerCommon = { this._rpc({ route: '/lunch/trash', params: { - user_id: this.userId, + user_id: this.searchModel.get('userId'), context: this.context, }, }).then(function () { diff --git a/addons/lunch/static/src/js/lunch_kanban_view.js b/addons/lunch/static/src/js/lunch_kanban_view.js index 75fda433b2c..50d347de309 100644 --- a/addons/lunch/static/src/js/lunch_kanban_view.js +++ b/addons/lunch/static/src/js/lunch_kanban_view.js @@ -2,7 +2,6 @@ odoo.define('lunch.LunchKanbanView', function (require) { "use strict"; var LunchKanbanController = require('lunch.LunchKanbanController'); -var LunchModel = require('lunch.LunchModel'); var LunchKanbanRenderer = require('lunch.LunchKanbanRenderer'); var core = require('web.core'); @@ -14,21 +13,16 @@ var _lt = core._lt; var LunchKanbanView = KanbanView.extend({ config: _.extend({}, KanbanView.prototype.config, { Controller: LunchKanbanController, - Model: LunchModel, Renderer: LunchKanbanRenderer, }), display_name: _lt('Lunch Kanban'), - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - /** * @override */ - _getViewDomain: function (parent) { - const model = this.getModel(parent); - return model.getLocationDomain(); + _createSearchModel(params, extraExtensions = {}) { + Object.assign(extraExtensions, { Lunch: {} }); + return this._super(params, extraExtensions); }, }); diff --git a/addons/lunch/static/src/js/lunch_list_view.js b/addons/lunch/static/src/js/lunch_list_view.js index b49d4386ffb..00e8efa5aba 100644 --- a/addons/lunch/static/src/js/lunch_list_view.js +++ b/addons/lunch/static/src/js/lunch_list_view.js @@ -2,7 +2,6 @@ odoo.define('lunch.LunchListView', function (require) { "use strict"; var LunchListController = require('lunch.LunchListController'); -var LunchModel = require('lunch.LunchModel'); var LunchListRenderer = require('lunch.LunchListRenderer'); var core = require('web.core'); @@ -14,7 +13,6 @@ var _lt = core._lt; var LunchListView = ListView.extend({ config: _.extend({}, ListView.prototype.config, { Controller: LunchListController, - Model: LunchModel, Renderer: LunchListRenderer, }), display_name: _lt('Lunch List'), @@ -26,10 +24,11 @@ var LunchListView = ListView.extend({ /** * @override */ - _getViewDomain: function (parent) { - const model = this.getModel(parent); - return model.getLocationDomain(); + _createSearchModel(params, extraExtensions = {}) { + Object.assign(extraExtensions, { Lunch: {} }); + return this._super(params, extraExtensions); }, + }); view_registry.add('lunch_list', LunchListView); diff --git a/addons/lunch/static/src/js/lunch_model_extension.js b/addons/lunch/static/src/js/lunch_model_extension.js new file mode 100644 index 00000000000..fccd82fdce9 --- /dev/null +++ b/addons/lunch/static/src/js/lunch_model_extension.js @@ -0,0 +1,100 @@ +odoo.define("lunch/static/src/js/lunch_model_extension.js", function (require) { + "use strict"; + + const ActionModel = require("web/static/src/js/views/action_model.js"); + + class LunchModelExtension extends ActionModel.Extension { + + //--------------------------------------------------------------------- + // Public + //--------------------------------------------------------------------- + + /** + * @override + * @returns {any} + */ + get(property) { + switch (property) { + case "domain": return this.getDomain(); + case "userId": return this.state.userId; + } + } + + /** + * @override + */ + async load() { + await this._updateLocationId(); + } + + /** + * @override + */ + prepareState() { + Object.assign(this.state, { + locationId: null, + userId: null, + }); + } + + //--------------------------------------------------------------------- + // Actions / Getters + //--------------------------------------------------------------------- + + /** + * @returns {Array[] | null} + */ + getDomain() { + if (this.state.locationId) { + return [["is_available_at", "in", [this.state.locationId]]]; + } + return null; + } + + /** + * @param {number} locationId + * @returns {Promise} + */ + async setLocationId(locationId) { + this.state.locationId = locationId; + await this.env.services.rpc({ + route: "/lunch/user_location_set", + params: { + context: this.env.session.user_context, + location_id: this.state.locationId, + user_id: this.state.userId, + }, + }); + } + + /** + * @param {number} userId + * @returns {Promise} + */ + async updateUserId(userId) { + this.state.userId = userId; + await this._updateLocationId(); + } + + //--------------------------------------------------------------------- + // Private + //--------------------------------------------------------------------- + + /** + * @returns {Promise} + */ + async _updateLocationId() { + this.state.locationId = await this.env.services.rpc({ + route: "/lunch/user_location_get", + params: { + context: this.env.session.user_context, + user_id: this.state.userId, + }, + }); + } + } + + ActionModel.registry.add("Lunch", LunchModelExtension, 20); + + return LunchModelExtension; +}); diff --git a/addons/lunch/views/lunch_templates.xml b/addons/lunch/views/lunch_templates.xml index 2b2ea02973a..ff943deb685 100644 --- a/addons/lunch/views/lunch_templates.xml +++ b/addons/lunch/views/lunch_templates.xml @@ -7,7 +7,6 @@ <link rel="stylesheet" type="text/scss" href="/lunch/static/src/scss/lunch_list.scss"/> <script type="text/javascript" src="/lunch/static/src/js/lunch_controller_common.js"></script> - <script type="text/javascript" src="/lunch/static/src/js/lunch_model.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_widget.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_mobile.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_payment_dialog.js"></script> @@ -15,6 +14,7 @@ <script type="text/javascript" src="/lunch/static/src/js/lunch_kanban_controller.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_kanban_renderer.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_kanban_record.js"></script> + <script type="text/javascript" src="/lunch/static/src/js/lunch_model_extension.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_list_view.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_list_controller.js"></script> <script type="text/javascript" src="/lunch/static/src/js/lunch_list_renderer.js"></script> |
