diff options
Diffstat (limited to 'addons/pos_restaurant/static/src')
8 files changed, 87 insertions, 23 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); } }, diff --git a/addons/pos_restaurant/static/src/xml/Chrome.xml b/addons/pos_restaurant/static/src/xml/Chrome.xml deleted file mode 100644 index ee29abe2e36..00000000000 --- a/addons/pos_restaurant/static/src/xml/Chrome.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<templates id="template" xml:space="preserve"> - - <t t-name="Chrome" t-inherit="point_of_sale.Chrome" t-inherit-mode="extension" owl="1"> - <xpath expr="//OrderSelector" position="attributes"> - <attribute name="t-if">mainScreen.name !== 'FloorScreen'</attribute> - </xpath> - <xpath expr="//OrderSelector" position="after"> - <div t-else="" class="order-selector"></div> - </xpath> - </t> - -</templates> diff --git a/addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderList.xml b/addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderList.xml new file mode 100644 index 00000000000..7960710260f --- /dev/null +++ b/addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderList.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates id="template" xml:space="preserve"> + + <t t-name="OrderList" t-inherit="point_of_sale.OrderList" t-inherit-mode="extension" owl="1"> + <xpath expr="//div[hasclass('order-row')]//div[hasclass('customer')]" position="after"> + <div t-if="env.pos.config.module_pos_restaurant" class="header table"> + Table + </div> + </xpath> + </t> + +</templates> diff --git a/addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderRow.xml b/addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderRow.xml new file mode 100644 index 00000000000..3006e5bfb42 --- /dev/null +++ b/addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderRow.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates id="template" xml:space="preserve"> + + <t t-name="OrderRow" t-inherit="point_of_sale.OrderRow" t-inherit-mode="extension" owl="1"> + <xpath expr="//div[hasclass('order-row')]//div[hasclass('customer')]" position="after"> + <div t-if="env.pos.config.module_pos_restaurant" class="item table"> + <t t-esc="table" /> + </div> + </xpath> + </t> + +</templates> |
