diff --git a/__manifest__.py b/__manifest__.py
index 522b35d..6c84c2f 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -28,6 +28,8 @@ Features
'pos_ui_optimization/static/src/app/components/order_display/order_display_patch.xml',
'pos_ui_optimization/static/src/app/screens/product_screen/product_screen_patch.js',
'pos_ui_optimization/static/src/app/screens/product_screen/product_screen_patch.xml',
+ 'pos_ui_optimization/static/src/app/screens/product_screen/order_summary_patch.js',
+ 'pos_ui_optimization/static/src/app/screens/product_screen/order_summary_patch.xml',
# Payment screen patches
'pos_ui_optimization/static/src/app/screens/payment_screen/payment_screen_patch.xml',
# Portrait mode — service must load first
diff --git a/static/src/app/screens/product_screen/order_summary_patch.js b/static/src/app/screens/product_screen/order_summary_patch.js
new file mode 100644
index 0000000..0fc3f61
--- /dev/null
+++ b/static/src/app/screens/product_screen/order_summary_patch.js
@@ -0,0 +1,45 @@
+/** @odoo-module **/
+
+import { OrderSummary } from "@point_of_sale/app/screens/product_screen/order_summary/order_summary";
+import { patch } from "@web/core/utils/patch";
+
+patch(OrderSummary.prototype, {
+ get currentOrder() {
+ return this.pos.selectedOrder || null;
+ },
+
+ async updateSelectedOrderline({ buffer, key }) {
+ const order = this.pos.getOrder();
+ if (!order) {
+ return;
+ }
+ return super.updateSelectedOrderline(...arguments);
+ },
+
+ showUnbookButton() {
+ const order = this.pos.getOrder();
+ if (!order) {
+ return false;
+ }
+ if (this.pos.selectedTable) {
+ return (
+ this.pos.config.module_pos_restaurant &&
+ !this.pos.models["pos.order"].some(
+ (o) =>
+ o.table_id?.id === this.pos.selectedTable.id &&
+ o.finalized === false &&
+ !o.isBooked
+ ) &&
+ order.lines.length === 0 &&
+ !order.hasCourses()
+ );
+ }
+ return (
+ this.pos.config.module_pos_restaurant &&
+ !order.finalized &&
+ order.isBooked &&
+ order.isEmpty() &&
+ !order.hasCourses()
+ );
+ }
+});
diff --git a/static/src/app/screens/product_screen/order_summary_patch.xml b/static/src/app/screens/product_screen/order_summary_patch.xml
new file mode 100644
index 0000000..fbfba62
--- /dev/null
+++ b/static/src/app/screens/product_screen/order_summary_patch.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ currentOrder
+
+
+
diff --git a/static/src/app/screens/product_screen/product_screen_patch.js b/static/src/app/screens/product_screen/product_screen_patch.js
index 2888671..acb1160 100644
--- a/static/src/app/screens/product_screen/product_screen_patch.js
+++ b/static/src/app/screens/product_screen/product_screen_patch.js
@@ -7,7 +7,7 @@ import { useEffect } from "@odoo/owl";
patch(ProductScreen.prototype, {
setup() {
super.setup();
- this.state.displayedProductsCount = 40;
+ this.state.displayedProductsCount = 80;
const originalOnScroll = this.onScroll;
this.onScroll = (ev) => {
@@ -15,22 +15,33 @@ patch(ProductScreen.prototype, {
originalOnScroll(ev);
}
const el = ev.target;
- if (el && el.scrollTop + el.clientHeight >= el.scrollHeight - 200) {
+ if (el && el.scrollTop + el.clientHeight >= el.scrollHeight - 400) {
const totalCount = this.pos.productToDisplayByCateg.reduce((acc, cat) => acc + cat[1].length, 0);
if (this.state.displayedProductsCount < totalCount) {
- this.state.displayedProductsCount += 40;
+ this.state.displayedProductsCount += 80;
}
}
};
useEffect(
() => {
- this.state.displayedProductsCount = 40;
+ this.state.displayedProductsCount = 80;
},
() => [this.pos.searchProductWord, this.pos.selectedCategory]
);
},
+ get currentOrder() {
+ return this.pos.getOrder() || {
+ lines: [],
+ totalQuantity: 0,
+ isEmpty() { return true; },
+ getPartner() { return null; },
+ deselectOrderline() {},
+ assertEditable() {},
+ };
+ },
+
get productToDisplayByCategLimited() {
const fullList = this.pos.productToDisplayByCateg;
let count = 0;
diff --git a/static/src/app/screens/product_screen/product_screen_patch.xml b/static/src/app/screens/product_screen/product_screen_patch.xml
index 12771fb..dce1ed8 100644
--- a/static/src/app/screens/product_screen/product_screen_patch.xml
+++ b/static/src/app/screens/product_screen/product_screen_patch.xml
@@ -7,5 +7,9 @@
longPressHandlers.onTouchEnd
+
+ !pos.scanning and currentOrder
+ {{ currentOrder && currentOrder.isEmpty() ? 'btn-secondary' : 'btn-primary' }}
+
diff --git a/static/src/scss/portrait.scss b/static/src/scss/portrait.scss
index 940a422..cc14fce 100644
--- a/static/src/scss/portrait.scss
+++ b/static/src/scss/portrait.scss
@@ -91,6 +91,10 @@
padding-bottom: 122px !important;
overflow: hidden;
+ .products-widget {
+ overflow: hidden !important;
+ }
+
.overflow-y-auto {
flex-grow: 1 !important;
flex-shrink: 1 !important;