[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) <jcb@odoo.com>
Signed-off-by: Loukas Wets (lowe) <lowe@odoo.com>
This commit is contained in:
Loukas Wets (lowe)
2023-09-15 12:15:16 +00:00
parent 167c51b1f9
commit 8ee8010cf6
5 changed files with 61 additions and 3 deletions
+3
View File
@@ -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"),
+9 -2
View File
@@ -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()
@@ -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
@@ -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);
@@ -28,7 +28,7 @@
<field name="pos_self_order_table_mode"/>
<div class="content-group" invisible="not pos_self_order_table_mode">
<label string="Pay after" for="pos_self_order_pay_after" class="me-2"/>
<field name="pos_self_order_pay_after"/>
<field name="pos_self_order_pay_after" widget="upgrade_selection"/>
</div>
</setting>
</block>