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 @@