diff options
| author | Joseph Caburnay <jcb@odoo.com> | 2020-06-15 09:59:37 +0000 |
|---|---|---|
| committer | Joseph Caburnay <jcb@odoo.com> | 2020-07-17 10:00:04 +0000 |
| commit | b2f8170d88239b5eaf04f1e3c0dcef613b78fedc (patch) | |
| tree | ae1a178dab9afd382cd9e45e8db5b28d6a6424e5 /addons/pos_restaurant/static/src/js | |
| parent | 39ff9d95c2c2b09e7d6ec47051ca0bb3c9f6165a (diff) | |
[IMP] point_of_sale,pos_*: allow users to manage orders in the pos frontend
We now allow invoicing of finalized orders in an open session in this first
iteration of order management in the pos frontend. Additionally, receipt
reprinting is also introduced. With this feature, we can now reprint the
receipt of old orders.
closes odoo/odoo#51141
Task-id: 1981354
Related: odoo/enterprise#11690
Related: odoo/upgrade#1472
Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
Diffstat (limited to 'addons/pos_restaurant/static/src/js')
5 files changed, 63 insertions, 10 deletions
diff --git a/addons/pos_restaurant/static/src/js/Chrome.js b/addons/pos_restaurant/static/src/js/Chrome.js index 399a3887125..949082f1d8e 100644 --- a/addons/pos_restaurant/static/src/js/Chrome.js +++ b/addons/pos_restaurant/static/src/js/Chrome.js @@ -45,7 +45,7 @@ odoo.define('pos_restaurant.chrome', function (require) { */ _showSavedScreen(pos, newSelectedOrder) { if (!newSelectedOrder) { - this.showScreen('FloorScreen', { floor: pos.table.floor }); + this.showScreen('FloorScreen', { floor: pos.table ? pos.table.floor : null }); } else { super._showSavedScreen(pos, newSelectedOrder); } @@ -68,7 +68,8 @@ odoo.define('pos_restaurant.chrome', function (require) { if (this.tempScreen.isShown) { this.trigger('close-temp-screen'); } - this.showScreen('FloorScreen', { floor: this.env.pos.table.floor }); + const table = this.env.pos.table; + this.showScreen('FloorScreen', { floor: table ? table.floor : null }); } _shouldResetIdleTimer() { return this.env.pos.config.iface_floorplan && this.mainScreen.name !== 'FloorScreen'; diff --git a/addons/pos_restaurant/static/src/js/Screens/FloorScreen/FloorScreen.js b/addons/pos_restaurant/static/src/js/Screens/FloorScreen/FloorScreen.js index aaf929ed0fe..276663cf57c 100644 --- a/addons/pos_restaurant/static/src/js/Screens/FloorScreen/FloorScreen.js +++ b/addons/pos_restaurant/static/src/js/Screens/FloorScreen/FloorScreen.js @@ -289,6 +289,7 @@ odoo.define('pos_restaurant.FloorScreen', function (require) { } } FloorScreen.template = 'FloorScreen'; + FloorScreen.hideOrderSelector = true; Registries.Component.add(FloorScreen); diff --git a/addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderManagementScreen.js b/addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderManagementScreen.js new file mode 100644 index 00000000000..e2a1ce65dce --- /dev/null +++ b/addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderManagementScreen.js @@ -0,0 +1,29 @@ +odoo.define('pos_restaurant.OrderManagementScreen', function (require) { + 'use strict'; + + const OrderManagementScreen = require('point_of_sale.OrderManagementScreen'); + const Registries = require('point_of_sale.Registries'); + + const PosResOrderManagementScreen = (OrderManagementScreen) => + class extends OrderManagementScreen { + /** + * @override + */ + _setOrder(order) { + if (this.env.pos.config.module_pos_restaurant) { + const currentOrder = this.env.pos.get_order(); + if (currentOrder && currentOrder.uid === order.uid) { + this.close(); + } else { + this.env.pos.set_table(order.table, order); + } + } else { + super._setOrder(order); + } + } + }; + + Registries.Component.extend(OrderManagementScreen, PosResOrderManagementScreen); + + return OrderManagementScreen; +}); diff --git a/addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderRow.js b/addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderRow.js new file mode 100644 index 00000000000..f5a32114553 --- /dev/null +++ b/addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderRow.js @@ -0,0 +1,17 @@ +odoo.define('pos_restaurant.OrderRow', function (require) { + 'use strict'; + + const OrderRow = require('point_of_sale.OrderRow'); + const Registries = require('point_of_sale.Registries'); + + const PosResOrderRow = (OrderRow) => + class extends OrderRow { + get table() { + return this.order.table ? this.order.table.name : ''; + } + }; + + Registries.Component.extend(OrderRow, PosResOrderRow); + + return OrderRow; +}); diff --git a/addons/pos_restaurant/static/src/js/floors.js b/addons/pos_restaurant/static/src/js/floors.js index 1276fea9f8b..b6614c07ebe 100644 --- a/addons/pos_restaurant/static/src/js/floors.js +++ b/addons/pos_restaurant/static/src/js/floors.js @@ -45,9 +45,9 @@ models.load_models({ // New orders are now associated with the current table, if any. var _super_order = models.Order.prototype; models.Order = models.Order.extend({ - initialize: function() { + initialize: function(attr,options) { _super_order.initialize.apply(this,arguments); - if (!this.table) { + if (!this.table && !options.json) { this.table = this.pos.table; } this.customer_count = this.customer_count || 1; @@ -192,16 +192,20 @@ models.PosModel = models.PosModel.extend({ } }, - set_order_on_table: function() { + /** + * @param {models.Order} order order to set + */ + set_order_on_table: function(order) { var orders = this.get_order_list(); if (orders.length) { - this.set_order(orders[0]); // and go to the first one ... + order = order ? orders.find((o) => o.uid === order.uid) : null; + this.set_order(order || orders[0]); } else { this.add_new_order(); // or create a new order with the current table } }, - sync_to_server: function(table) { + sync_to_server: function(table, order) { var self = this; var ids_to_remove = this.db.get_ids_to_remove_from_server(); @@ -229,7 +233,7 @@ models.PosModel = models.PosModel.extend({ }).catch(function(reason){ self.set_synch('error'); }).finally(function(){ - self.set_order_on_table(); + self.set_order_on_table(order); }); }, @@ -247,8 +251,9 @@ models.PosModel = models.PosModel.extend({ * * Switch table and make sure all nececery syncing tasks are done. * @param {object} table. + * @param {models.Order|undefined} order if provided, set to this order */ - set_table: function(table) { + set_table: function(table, order) { if(!table){ this.sync_from_server(table, this.get_order_list(), this.get_order_with_uid()); this.set_order(null); @@ -262,7 +267,7 @@ models.PosModel = models.PosModel.extend({ this.set_order(null); } else { this.table = table; - this.sync_to_server(table); + this.sync_to_server(table, order); } }, |
