diff --git a/addons/pos_self_order/controllers/orders.py b/addons/pos_self_order/controllers/orders.py
index 637c767cca1..383232e8c1f 100644
--- a/addons/pos_self_order/controllers/orders.py
+++ b/addons/pos_self_order/controllers/orders.py
@@ -50,7 +50,7 @@ class PosSelfOrderController(http.Controller):
}
# Save the order in the database to get the id
- posted_order_id = pos_config.env['pos.order'].create_from_ui([order], draft=True)[0].get('id')
+ posted_order_id = pos_config.env['pos.order'].with_context(from_self=True).create_from_ui([order], draft=True)[0].get('id')
# Process the lines and get their prices computed
lines = self._process_lines(lines, pos_config, posted_order_id, order.get('take_away'))
@@ -199,8 +199,9 @@ class PosSelfOrderController(http.Controller):
config_fiscal_pos = pos_config.default_fiscal_position_id
for line in lines:
- if line.get('uuid') in appended_uuid:
+ if line.get('uuid') in appended_uuid or not line.get('product_id'):
continue
+
product = pos_config.env['product.product'].browse(int(line.get('product_id')))
# todo take into account the price extra
price_unit = pricelist._get_product_price(product, quantity=line.get('qty')) if pricelist else product.lst_price
diff --git a/addons/pos_self_order/models/pos_config.py b/addons/pos_self_order/models/pos_config.py
index 00319709eaf..866ac15566b 100644
--- a/addons/pos_self_order/models/pos_config.py
+++ b/addons/pos_self_order/models/pos_config.py
@@ -36,7 +36,7 @@ class PosConfig(models.Model):
)
self_order_kiosk_url = fields.Char(compute="_compute_self_order_kiosk_url")
self_order_kiosk = fields.Boolean(
- string="Kiosk",
+ string="Is a Kiosk",
help="Enable the kiosk mode for the Point of Sale",
)
self_order_kiosk_takeaway = fields.Boolean(
diff --git a/addons/pos_self_order/models/pos_order.py b/addons/pos_self_order/models/pos_order.py
index a8e8dbe2d2d..38ae90dae95 100644
--- a/addons/pos_self_order/models/pos_order.py
+++ b/addons/pos_self_order/models/pos_order.py
@@ -54,7 +54,10 @@ class PosOrder(models.Model):
def create_from_ui(self, orders, draft=False):
orders = super().create_from_ui(orders, draft)
order_ids = self.env['pos.order'].browse([order['id'] for order in orders])
- self._send_notification(order_ids)
+
+ if self.env.context.get('from_self') is not True:
+ self._send_notification(order_ids)
+
return orders
@api.model
@@ -80,6 +83,10 @@ class PosOrder(models.Model):
'access_token': order.access_token,
'state': order.state
})
+ else:
+ self.env['bus.bus']._sendone(f'self_order-{order.access_token}', 'ORDER_CHANGED', {
+ 'order': order._export_for_self_order()
+ })
def _export_for_self_order(self) -> Dict:
self.ensure_one()
diff --git a/addons/pos_self_order/static/src/common/models/order.js b/addons/pos_self_order/static/src/common/models/order.js
index 2a86c494b04..af5b9d7c356 100644
--- a/addons/pos_self_order/static/src/common/models/order.js
+++ b/addons/pos_self_order/static/src/common/models/order.js
@@ -103,12 +103,24 @@ export class Order extends Reactive {
}
}
+ const foundLines = [];
for (const lines of this.lines) {
const lineFound = data.lines.find((line) => line.uuid === lines.uuid);
if (lineFound) {
lines.updateDataFromServer(lineFound);
+ foundLines.push(lines);
}
}
+
+ for (const lines of data.lines) {
+ const lineFound = foundLines.find((line) => line.uuid === lines.uuid);
+
+ if (!lineFound) {
+ foundLines.push(new Line(lines));
+ }
+ }
+
+ this.lines = foundLines;
}
}
diff --git a/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js b/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js
index 950c34084ba..10fb2f304d0 100644
--- a/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js
+++ b/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js
@@ -29,12 +29,15 @@ export class LandingPage extends Component {
});
onMounted(() => {
- // used to init carousel after components mount / unmount
- const carousel = new Carousel(this.carouselRef.el);
+ if (this.selfOrder.kiosk_image_home.length > 1) {
+ // used to init carousel after components mount / unmount
+ const carousel = new Carousel(this.carouselRef.el);
- this.carouselInterval = setInterval(() => {
- carousel.next();
- }, 5000);
+ // prevent traceback when no image is set
+ this.carouselInterval = setInterval(() => {
+ carousel.next();
+ }, 5000);
+ }
});
onWillUnmount(() => {
diff --git a/addons/pos_self_order/static/src/kiosk/self_order_kiosk_service.js b/addons/pos_self_order/static/src/kiosk/self_order_kiosk_service.js
index 0a2ebf537c5..ec252eb854c 100644
--- a/addons/pos_self_order/static/src/kiosk/self_order_kiosk_service.js
+++ b/addons/pos_self_order/static/src/kiosk/self_order_kiosk_service.js
@@ -31,8 +31,7 @@ export class selfOrder extends selfOrderCommon {
}
this.cookie.setCookie("frontend_lang", this.currentLanguage.code);
-
- this.currentCategory = this.pos_category.length > 0 ? this.pos_category[0].name : null;
+ this.currentCategory = this.pos_category.length > 0 ? [...this.categoryList][0].name : null;
// required information to send an order
this.paymentError = false;
this.tablePadNumber = null;
diff --git a/addons/pos_self_order/static/src/mobile/self_order_bus_service.js b/addons/pos_self_order/static/src/mobile/self_order_bus_service.js
index 40710406605..b35835a8b44 100644
--- a/addons/pos_self_order/static/src/mobile/self_order_bus_service.js
+++ b/addons/pos_self_order/static/src/mobile/self_order_bus_service.js
@@ -37,12 +37,18 @@ export class SelfOrderBus {
dispatch(message) {
if (message.type === "ORDER_STATE_CHANGED") {
this.ws_changeOrderState(message.payload.access_token, message.payload.state);
+ } else if (message.type === "ORDER_CHANGED") {
+ this.ws_syncOrder(message.payload.order);
}
}
ws_changeOrderState(access_token, state) {
this.selfOrder.changeOrderState(access_token, state);
}
+
+ ws_syncOrder(order, state) {
+ this.selfOrder.updateOrdersFromServer([order], [order.access_token]);
+ }
}
export const SelfOrderBusService = {
diff --git a/addons/pos_self_order/static/src/mobile/self_order_mobile_service.js b/addons/pos_self_order/static/src/mobile/self_order_mobile_service.js
index dba542b8d47..9578d845336 100644
--- a/addons/pos_self_order/static/src/mobile/self_order_mobile_service.js
+++ b/addons/pos_self_order/static/src/mobile/self_order_mobile_service.js
@@ -155,13 +155,15 @@ export class SelfOrder extends selfOrderCommon {
}
}
- updateOrdersFromServer(orders, localAccessToken) {
+ updateOrdersFromServer(ordersFromServer, localAccessToken) {
//FIXME, if the user refresh the page with not sent, we will lost this data.
- const accessTokensFromServer = orders.map((order) => order.access_token);
+ const accessTokensFromServer = ordersFromServer.map((order) => order.access_token);
for (const order of this.orders) {
if (order.access_token) {
- const orderFromServer = orders.find((o) => o.access_token === order.access_token);
+ const orderFromServer = ordersFromServer.find(
+ (o) => o.access_token === order.access_token
+ );
if (orderFromServer) {
order.updateDataFromServer(orderFromServer);
}
diff --git a/addons/pos_self_order/views/pos_config_view.xml b/addons/pos_self_order/views/pos_config_view.xml
index 25318af1d38..6b0c65ed7ee 100644
--- a/addons/pos_self_order/views/pos_config_view.xml
+++ b/addons/pos_self_order/views/pos_config_view.xml
@@ -10,4 +10,17 @@
+
+
+ pos.config.form.view
+ pos.config
+
+
+
+
+
+
+
+
+
diff --git a/addons/pos_self_order/views/res_config_settings_views.xml b/addons/pos_self_order/views/res_config_settings_views.xml
index 5505eb88a99..c6031b2f330 100644
--- a/addons/pos_self_order/views/res_config_settings_views.xml
+++ b/addons/pos_self_order/views/res_config_settings_views.xml
@@ -34,7 +34,7 @@
- Please note that only Adyen payment methods are supported by the kiosk.
+ Please note that the kiosk only works with Adyen terminals