From 808a73742c030a71ce39a2abff32401f4f65155a Mon Sep 17 00:00:00 2001 From: "David Monnom (moda)" Date: Thu, 20 Jul 2023 07:46:18 +0000 Subject: [PATCH] [IMP] pos_self_order: improve qr code PDF In order to improve the self order user experience, QR code generation has been improved. Now, the user can reset the access_token linked to the QR code and then regenerate them, he can also redownload the QR code whenever he wishes. The content of the QR code PDF has also been changed. Now, for each table a QR code is generated and inserted in the PDF with the name of the table and its unique identifier (access_token). closes odoo/odoo#129100 Taskid: 3377335 Related: odoo/upgrade#4958 Signed-off-by: Joseph Caburnay (jcb) --- addons/pos_self_order/models/pos_config.py | 83 ++++-------- .../pos_self_order/models/pos_restaurant.py | 24 ---- .../models/res_config_settings.py | 17 ++- .../static/img/default_qrcode_odoo.png | Bin 0 -> 16408 bytes .../static/src/self_order_service.js | 4 +- addons/pos_self_order/views/qr_code.xml | 125 ++++++++---------- .../views/res_config_settings_views.xml | 5 +- 7 files changed, 102 insertions(+), 156 deletions(-) create mode 100644 addons/pos_self_order/static/img/default_qrcode_odoo.png 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 0000000000000000000000000000000000000000..9d54e63aebf84ee83dd5b79fb1a53510b105e134 GIT binary patch literal 16408 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 Tt^A 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 @@ -
+