summaryrefslogtreecommitdiff
path: root/addons/pos_restaurant/static/src
diff options
context:
space:
mode:
authorJoseph Caburnay <jcb@odoo.com>2020-06-15 09:59:37 +0000
committerJoseph Caburnay <jcb@odoo.com>2020-07-17 10:00:04 +0000
commitb2f8170d88239b5eaf04f1e3c0dcef613b78fedc (patch)
treeae1a178dab9afd382cd9e45e8db5b28d6a6424e5 /addons/pos_restaurant/static/src
parent39ff9d95c2c2b09e7d6ec47051ca0bb3c9f6165a (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')
-rw-r--r--addons/pos_restaurant/static/src/js/Chrome.js5
-rw-r--r--addons/pos_restaurant/static/src/js/Screens/FloorScreen/FloorScreen.js1
-rw-r--r--addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderManagementScreen.js29
-rw-r--r--addons/pos_restaurant/static/src/js/Screens/OrderManagementScreen/OrderRow.js17
-rw-r--r--addons/pos_restaurant/static/src/js/floors.js21
-rw-r--r--addons/pos_restaurant/static/src/xml/Chrome.xml13
-rw-r--r--addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderList.xml12
-rw-r--r--addons/pos_restaurant/static/src/xml/Screens/OrderManagementScreen/OrderRow.xml12
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>