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;