[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:
@@ -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,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>
|
||||
|
||||
Reference in New Issue
Block a user