diff --git a/addons/pos_self_order/models/pos_config.py b/addons/pos_self_order/models/pos_config.py index 82177da1e38..844170d39b5 100644 --- a/addons/pos_self_order/models/pos_config.py +++ b/addons/pos_self_order/models/pos_config.py @@ -188,65 +188,34 @@ class PosConfig(models.Model): "has_active_session": self.has_active_session, } - def _generate_data_for_qr_codes_page(self, cols: int = 4) -> Dict[str, List[Dict]]: - """ - :cols: the number of qr codes per row - """ + def _get_qr_code_data(self): self.ensure_one() - return { - "floors": self._split_qr_codes_list( - self._get_qr_codes_info(cols * cols), - cols, - ) - } - def _get_qr_codes_info(self, total_number: int) -> List[Dict]: - """ - total_number: the number of qr codes to generate (in the case where we don't have - floor management) - return: a list of dictionaries with the following keys: - - name: the name of the floor - - tables: a list of dictionaries with the following keys: - - id: the id of the table - - url: the url of the table - - name?: the name of the table - """ - self.ensure_one() + table_qr_code = [] if self.self_order_table_mode: - return self.floor_ids._get_data_for_qr_codes_page(self._get_self_order_url) - else: - return self._get_default_qr_codes(total_number, self._get_self_order_url) + table_qr_code.extend([{ + 'name': floor.name, + 'type': 'table', + 'tables': [ + { + 'identifier': table.identifier, + 'id': table.id, + 'name': table.name, + 'url': self._get_self_order_url(table.id), + } + for table in floor.table_ids.filtered("active") + ] + } + for floor in self.floor_ids] + ) - def _split_qr_codes_list(self, floors: List[Dict], cols: int) -> List[Dict]: - """ - :floors: the list of floors - :cols: the number of qr codes per row - """ - self.ensure_one() - return [ - { - "name": floor.get("name"), - "rows_of_tables": list(split_every(cols, floor["tables"], list)), - } - for floor in floors - ] + table_qr_code.extend([{ + 'name': 'Generic', + 'type': 'default', + 'tables': [{ + 'id': i, + 'url': self._get_self_order_url(), + } for i in range(0, 11)] + }]) - def _get_default_qr_codes( - self, number: int, url: Callable[[Optional[int]], str] - ) -> List[Dict]: - """ - :number: the number of qr codes to generate - :url: a function that takes a table id and returns the url of the table - """ - self.ensure_one() - return [ - { - "tables": [ - { - "id": 0, - "url": url(), - } - ] - * number, - } - ] + return table_qr_code diff --git a/addons/pos_self_order/models/pos_restaurant.py b/addons/pos_self_order/models/pos_restaurant.py index 4efce62bb6c..ed195c428e9 100644 --- a/addons/pos_self_order/models/pos_restaurant.py +++ b/addons/pos_self_order/models/pos_restaurant.py @@ -7,19 +7,6 @@ from typing import Dict, Callable, List, Optional from odoo import api, fields, models -class RestaurantFloor(models.Model): - _inherit = "restaurant.floor" - - def _get_data_for_qr_codes_page(self, url: Callable): - return [ - { - "name": floor.name, - "tables": floor.table_ids.filtered("active")._get_data_for_qr_codes_page(url), - } - for floor in self - ] - - class RestaurantTable(models.Model): _inherit = "restaurant.table" @@ -35,17 +22,6 @@ class RestaurantTable(models.Model): self.ensure_one() return self.read(["name", "identifier"])[0] - def _get_data_for_qr_codes_page(self, url: Callable[[Optional[int]], str]) -> List[Dict]: - return [ - { - 'identifier': table.identifier, - 'id': table.id, - 'name': table.name, - 'url': url(table.id), - } - for table in self - ] - @staticmethod def _get_identifier(): return uuid.uuid4().hex[:8] diff --git a/addons/pos_self_order/models/res_config_settings.py b/addons/pos_self_order/models/res_config_settings.py index 1b3933de7ac..690de0e0ae9 100644 --- a/addons/pos_self_order/models/res_config_settings.py +++ b/addons/pos_self_order/models/res_config_settings.py @@ -2,6 +2,7 @@ from odoo import models, fields, api, _ from odoo.exceptions import UserError +from odoo.tools.misc import split_every class ResConfigSettings(models.TransientModel): @@ -71,13 +72,21 @@ class ResConfigSettings(models.TransientModel): """ Generate the data needed to print the QR codes page """ - if len(self.pos_config_id.floor_ids.table_ids) == 0: - raise UserError(_("Before you can create QR codes, you need to create tables for the restaurant.")) - return self.env.ref("pos_self_order.report_self_order_qr_codes_page").report_action( - [], data=self.pos_config_id._generate_data_for_qr_codes_page(cols=3) + [], data={'floors': [ + { + "name": floor.get("name"), + "type": floor.get("type"), + "table_rows": list(split_every(3, floor["tables"], list)), + } + for floor in self.pos_config_id._get_qr_code_data() + ]} ) def preview_self_order_app(self): self.ensure_one() return self.pos_config_id.preview_self_order_app() + + def update_access_tokens(self): + self.ensure_one() + self.pos_config_id._update_access_token() diff --git a/addons/pos_self_order/static/img/default_qrcode_odoo.png b/addons/pos_self_order/static/img/default_qrcode_odoo.png new file mode 100644 index 00000000000..9d54e63aebf Binary files /dev/null and b/addons/pos_self_order/static/img/default_qrcode_odoo.png differ diff --git a/addons/pos_self_order/static/src/self_order_service.js b/addons/pos_self_order/static/src/self_order_service.js index 87d56bf52e9..5db2e5f1b69 100644 --- a/addons/pos_self_order/static/src/self_order_service.js +++ b/addons/pos_self_order/static/src/self_order_service.js @@ -282,7 +282,9 @@ export class SelfOrder { const order = this.orders.filter((o) => o.access_token === access_token); let message = _t("Your order status has been changed"); - if (order.length !== 1) { + if (order.length === 0) { + throw new Error("Warning, no order with this access_token"); + } else if (order.length !== 1) { throw new Error("Warning, two orders with the same access_token"); } else { order[0].state = state; diff --git a/addons/pos_self_order/views/qr_code.xml b/addons/pos_self_order/views/qr_code.xml index 925a3f04a06..f2fdfc31525 100644 --- a/addons/pos_self_order/views/qr_code.xml +++ b/addons/pos_self_order/views/qr_code.xml @@ -19,77 +19,66 @@ - - - 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 ebacaa30341..e28718dec64 100644 --- a/addons/pos_self_order/views/res_config_settings_views.xml +++ b/addons/pos_self_order/views/res_config_settings_views.xml @@ -8,11 +8,12 @@ -
+