Files
enterprise-addons/pos_self_order_iot/models/pos_config.py
T

72 lines
2.5 KiB
Python

import logging
from odoo import api, fields, models, _
_logger = logging.getLogger(__name__)
class PosConfig(models.Model):
_inherit = 'pos.config'
self_ordering_iot_available_iot_box_ids = fields.One2many(
'iot.box',
'pos_id',
string='Available IoT Boxes',
domain="[('can_be_kiosk', '=', True)]",
required=True,
)
def _get_kitchen_printer(self):
res = super()._get_kitchen_printer()
for printer in self.printer_ids:
if printer.device_identifier:
res[printer.id]["device_identifier"] = printer.device_identifier
return res
def _load_self_data_models(self):
models = super()._load_self_data_models()
models += ['iot.device', 'iot.box']
return models
def action_open_wizard(self):
"""Override the ir.action.act_url to open the kiosk on the selected IoT Boxes (if any)."""
url_in_new_tab_action = super().action_open_wizard() # Configure pos session
# If no IoT Box is selected in the settings, open the kiosk in a new tab
if not self.self_ordering_iot_available_iot_box_ids:
return url_in_new_tab_action
display_identifiers = [
d.identifier
for box in self.self_ordering_iot_available_iot_box_ids
for d in box.device_ids if d.type == 'display'
]
self.env['iot.channel'].send_message({
"iot_identifiers": [iot_box.identifier for iot_box in self.self_ordering_iot_available_iot_box_ids],
"device_identifiers": display_identifiers,
'action': 'open_kiosk',
'pos_id': self.id,
'access_token': self.access_token,
})
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'type': 'info',
'message': _("Opening the kiosk on %s", ', '.join(self.self_ordering_iot_available_iot_box_ids.mapped('name'))),
}
}
def has_valid_self_payment_method(self):
res = super().has_valid_self_payment_method()
if self.self_ordering_mode == 'mobile':
return res
return res or any(pm.iot_device_id for pm in self.payment_method_ids)
@api.model
def _load_pos_self_data_fields(self, pos_config_id):
fields = super()._load_pos_self_data_fields(pos_config_id)
return fields + ['self_ordering_iot_available_iot_box_ids', 'iface_printer_id']