summaryrefslogtreecommitdiff
path: root/addons/lunch
diff options
context:
space:
mode:
authorJulien Mougenot <jum@odoo.com>2020-07-13 13:18:20 +0000
committerMathieu Duckerts-Antoine <dam@odoo.com>2020-07-23 08:21:10 +0000
commit3162141e4d71e9c55aff5241c5578571b68c332d (patch)
treeb925820ad917acfce48e4030b06ba55d88ba1c77 /addons/lunch
parent7ff2e5822f08616dd22c142e0e05ed4355801760 (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.js51
-rw-r--r--addons/lunch/static/src/js/lunch_kanban_view.js12
-rw-r--r--addons/lunch/static/src/js/lunch_list_view.js9
-rw-r--r--addons/lunch/static/src/js/lunch_model_extension.js100
-rw-r--r--addons/lunch/views/lunch_templates.xml2
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>