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