From 8ee8010cf67f20c4eb28a334cc943bfedf2dd0d1 Mon Sep 17 00:00:00 2001 From: "Loukas Wets (lowe)" Date: Thu, 3 Aug 2023 07:51:29 +0000 Subject: [PATCH] [IMP] pos_self_order: install kitchen display for pay after each Previously, when ordering with the Self app and paying after each order, since paid orders aren't displayed on tables in floor plan, and orders aren't send to kitchen directly. The flow is stuck. This PR makes sure that the kitchen display is installed if the pay each order is set. If not it will install it. Because the kitchen display is only available in Enterprise, the paying after each order mode is not available in community. When selecting the mode in community the upgrade to Enterprise popup will be displayed. task-3429195 closes odoo/odoo#135534 X-original-commit: 6c2dd0a53cb4dd33af01fdc3553ba2b379188265 Signed-off-by: Joseph Caburnay (jcb) Signed-off-by: Loukas Wets (lowe) --- addons/pos_self_order/__manifest__.py | 3 ++ addons/pos_self_order/models/pos_config.py | 11 ++++- .../models/res_config_settings.py | 5 +++ .../static/src/upgrade_selection_field.js | 43 +++++++++++++++++++ .../views/res_config_settings_views.xml | 2 +- 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 addons/pos_self_order/static/src/upgrade_selection_field.js diff --git a/addons/pos_self_order/__manifest__.py b/addons/pos_self_order/__manifest__.py index ecb68c5a363..d2fbcc1174c 100644 --- a/addons/pos_self_order/__manifest__.py +++ b/addons/pos_self_order/__manifest__.py @@ -25,6 +25,9 @@ ], "assets": { # Assets + 'web.assets_backend': [ + "pos_self_order/static/src/upgrade_selection_field.js", + ], "pos_self_order.assets_common": [ "pos_self_order/static/src/kiosk/bootstrap_overridden.scss", ("include", "web._assets_helpers"), diff --git a/addons/pos_self_order/models/pos_config.py b/addons/pos_self_order/models/pos_config.py index 1c412396029..3e432f2f794 100644 --- a/addons/pos_self_order/models/pos_config.py +++ b/addons/pos_self_order/models/pos_config.py @@ -9,7 +9,7 @@ from typing import Optional, List, Dict from werkzeug.urls import url_quote from odoo.tools import image_to_base64 -from odoo import api, fields, models, modules, _ +from odoo import api, fields, models, modules, _, service from odoo.tools import file_open, split_every @@ -105,7 +105,7 @@ class PosConfig(models.Model): help="Allow customers to Order from their phones", ) self_order_pay_after = fields.Selection( - [("each", "Each Order (mobile payment only)"), ("meal", "Meal (mobile payment or cashier)")], + selection=lambda self: self._compute_selection_pay_after(), string="Pay After:", default="meal", help="Choose when the customer will pay", @@ -183,6 +183,13 @@ class PosConfig(models.Model): record.self_order_view_mode = False record.self_order_table_mode = False + def _compute_selection_pay_after(self): + selection = [("each", "Each Order (mobile payment only)"), ("meal", "Meal (mobile payment or cashier)")] + version_info = service.common.exp_version()['server_version_info'] + if version_info[-1] == '': + selection[0] = (selection[0][0], selection[0][1] + ' (require Odoo Enterprise)') + return selection + def _get_qr_code_data(self): self.ensure_one() diff --git a/addons/pos_self_order/models/res_config_settings.py b/addons/pos_self_order/models/res_config_settings.py index 150e037fd57..fc35adde3ee 100644 --- a/addons/pos_self_order/models/res_config_settings.py +++ b/addons/pos_self_order/models/res_config_settings.py @@ -53,6 +53,11 @@ class ResConfigSettings(models.TransientModel): if self.pos_self_order_table_mode: self.pos_self_order_view_mode = True + @api.onchange("pos_self_order_pay_after", "pos_self_order_table_mode") + def _onchange_pos_self_order_pay_after(self): + if self.pos_self_order_pay_after == "each" and not self.module_pos_preparation_display: + self.module_pos_preparation_display = True + def generate_qr_codes_page(self): """ Generate the data needed to print the QR codes page diff --git a/addons/pos_self_order/static/src/upgrade_selection_field.js b/addons/pos_self_order/static/src/upgrade_selection_field.js new file mode 100644 index 00000000000..af47c59a546 --- /dev/null +++ b/addons/pos_self_order/static/src/upgrade_selection_field.js @@ -0,0 +1,43 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { selectionField, SelectionField } from "@web/views/fields/selection/selection_field"; +import { useService } from "@web/core/utils/hooks"; +import { UpgradeDialog } from "@web/webclient/settings_form_view/fields/upgrade_dialog"; + +/** + * The upgrade selection field is intended to be used in config settings. + * When selection changed, an upgrade popup is showed to the user. + */ + +export class UpgradeSelectionField extends SelectionField { + setup() { + super.setup(); + this.dialogService = useService("dialog"); + this.isEnterprise = odoo.info && odoo.info.isEnterprise; + } + + async onChange(newValue) { + if (!this.isEnterprise) { + this.dialogService.add( + UpgradeDialog, + {}, + { + onClose: () => { + newValue.target.value='"meal"' + }, + } + ); + } else { + super.onChange(...arguments); + } + } +} + +export const upgradeSelectionField = { + ...selectionField, + component: UpgradeSelectionField, + additionalClasses: [...(selectionField.additionalClasses || []), "o_field_selection"], +}; + +registry.category("fields").add("upgrade_selection", upgradeSelectionField); 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 e223c97fee5..f30ba75b3d5 100644 --- a/addons/pos_self_order/views/res_config_settings_views.xml +++ b/addons/pos_self_order/views/res_config_settings_views.xml @@ -28,7 +28,7 @@