diff --git a/addons/pos_self_order/__manifest__.py b/addons/pos_self_order/__manifest__.py index cd9c7116566..43684abc1a1 100644 --- a/addons/pos_self_order/__manifest__.py +++ b/addons/pos_self_order/__manifest__.py @@ -26,7 +26,6 @@ # Assets "pos_self_order.assets_common": [ "pos_self_order/static/src/kiosk/bootstrap_overridden.scss", - "web/static/lib/jquery/jquery.js", ("include", "web._assets_helpers"), ("include", "web._assets_backend_helpers"), ("include", "web._assets_primary_variables"), diff --git a/addons/pos_self_order/models/pos_config.py b/addons/pos_self_order/models/pos_config.py index e7090ec40a0..00319709eaf 100644 --- a/addons/pos_self_order/models/pos_config.py +++ b/addons/pos_self_order/models/pos_config.py @@ -69,12 +69,10 @@ class PosConfig(models.Model): [("code", "=", self.env.lang)], limit=1 ), ) - self_order_kiosk_image_home = fields.Image( - string="Self Order Kiosk Image Home", + self_order_kiosk_image_home_ids = fields.Many2many( + 'ir.attachment', + string="Home Images", help="Image to display on the self order screen", - max_width=1080, - max_height=1920, - default=_self_order_default_image, ) self_order_kiosk_image_eat = fields.Image( string="Self Order Kiosk Image Eat", @@ -89,11 +87,6 @@ class PosConfig(models.Model): max_width=1200, max_height=250, ) - self_order_kiosk_image_home_name = fields.Char( - string="Self Order Kiosk Image Home Name", - help="Name of the image to display on the self order screen", - default=_self_order_default_image_name, - ) self_order_kiosk_image_eat_name = fields.Char( string="Self Order Kiosk Image Eat Name", help="Name of the image to display on the self order screen", @@ -163,6 +156,17 @@ class PosConfig(models.Model): pos_config_ids = super().create(vals_list) for pos_config_id in pos_config_ids: + for image_name in ['landing_01.jpg', 'landing_02.jpg', 'landing_03.jpg']: + image_path = modules.get_module_resource("pos_self_order", "static/img", image_name) + attachment = self.env['ir.attachment'].create({ + 'name': image_name, + 'datas': base64.b64encode(file_open(image_path, "rb").read()), + 'res_model': 'pos.config', + 'res_id': pos_config_id.id, + 'type': 'binary', + }) + pos_config_id.self_order_kiosk_image_home_ids = [(4, attachment.id)] + if pos_config_id.module_pos_restaurant: pos_config_id.self_order_view_mode = True pos_config_id.self_order_table_mode = True @@ -348,7 +352,7 @@ class PosConfig(models.Model): "kiosk_mode": self.self_order_kiosk_mode, "kiosk_takeaway": self.self_order_kiosk_takeaway, "kiosk_alternative_fp": self.self_order_kiosk_alternative_fp_id.id, - "kiosk_image_home": self._get_kiosk_image(self.self_order_kiosk_image_home), + "kiosk_image_home": self._get_kiosk_attachment(self.self_order_kiosk_image_home_ids), "kiosk_image_eat": self._get_kiosk_image(self.self_order_kiosk_image_eat), "kiosk_image_brand": self._get_kiosk_image(self.self_order_kiosk_image_brand), "kiosk_default_language": default_language[0] if default_language else [], @@ -359,6 +363,15 @@ class PosConfig(models.Model): image = Image.open(io.BytesIO(base64.b64decode(image))) if image else False return image_to_base64(image, 'PNG').decode('utf-8') if image else False + def _get_kiosk_attachment(self, images): + encoded_images = [] + for image in images: + encoded_images.append({ + 'id': image.id, + 'data': image.datas.decode('utf-8'), + }) + return encoded_images + def _split_qr_codes_list(self, floors: List[Dict], cols: int) -> List[Dict]: """ :floors: the list of floors diff --git a/addons/pos_self_order/models/res_config_settings.py b/addons/pos_self_order/models/res_config_settings.py index b17598f89ab..069ab1e2b4e 100644 --- a/addons/pos_self_order/models/res_config_settings.py +++ b/addons/pos_self_order/models/res_config_settings.py @@ -12,10 +12,9 @@ class ResConfigSettings(models.TransientModel): pos_self_order_kiosk_mode = fields.Selection(related="pos_config_id.self_order_kiosk_mode", readonly=False) pos_self_order_kiosk_takeaway = fields.Boolean(related="pos_config_id.self_order_kiosk_takeaway", readonly=False) pos_self_order_kiosk_alternative_fp_id = fields.Many2one(related="pos_config_id.self_order_kiosk_alternative_fp_id", readonly=False) - pos_self_order_kiosk_image_home = fields.Image(related="pos_config_id.self_order_kiosk_image_home", readonly=False) + pos_self_order_kiosk_image_home_ids = fields.Many2many(related="pos_config_id.self_order_kiosk_image_home_ids", readonly=False) pos_self_order_kiosk_image_eat = fields.Image(related="pos_config_id.self_order_kiosk_image_eat", readonly=False) pos_self_order_kiosk_image_brand = fields.Image(related="pos_config_id.self_order_kiosk_image_brand", readonly=False) - pos_self_order_kiosk_image_home_name = fields.Char(related="pos_config_id.self_order_kiosk_image_home_name", readonly=False) pos_self_order_kiosk_image_eat_name = fields.Char(related="pos_config_id.self_order_kiosk_image_eat_name", readonly=False) pos_self_order_kiosk_image_brand_name = fields.Char(related="pos_config_id.self_order_kiosk_image_brand_name", readonly=False) pos_self_order_kiosk_available_language_ids = fields.Many2many(related="pos_config_id.self_order_kiosk_available_language_ids", readonly=False) diff --git a/addons/pos_self_order/static/img/landing_01.jpg b/addons/pos_self_order/static/img/landing_01.jpg new file mode 100644 index 00000000000..0592ac97387 Binary files /dev/null and b/addons/pos_self_order/static/img/landing_01.jpg differ diff --git a/addons/pos_self_order/static/img/landing_02.jpg b/addons/pos_self_order/static/img/landing_02.jpg new file mode 100644 index 00000000000..de947bea437 Binary files /dev/null and b/addons/pos_self_order/static/img/landing_02.jpg differ diff --git a/addons/pos_self_order/static/img/landing_03.jpg b/addons/pos_self_order/static/img/landing_03.jpg new file mode 100644 index 00000000000..f209dff66d1 Binary files /dev/null and b/addons/pos_self_order/static/img/landing_03.jpg differ diff --git a/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js b/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js index 32f063d4fb6..950c34084ba 100644 --- a/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js +++ b/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.js @@ -1,11 +1,13 @@ /** @odoo-module */ +/* global Carousel */ -import { Component, onWillStart } from "@odoo/owl"; +import { Component, onMounted, onWillStart, onWillUnmount, useRef } from "@odoo/owl"; import { useselfOrder } from "@pos_self_order/kiosk/self_order_kiosk_service"; import { useService } from "@web/core/utils/hooks"; import { KioskTemplate } from "@pos_self_order/kiosk/template/kiosk_template"; import { LanguagePopup } from "@pos_self_order/kiosk/components/language_popup/language_popup"; import { Order } from "@pos_self_order/common/models/order"; +import { loadJS } from "@web/core/assets"; export class LandingPage extends Component { static template = "pos_self_order.LandingPage"; @@ -15,10 +17,28 @@ export class LandingPage extends Component { this.selfOrder = useselfOrder(); this.router = useService("router"); this.dialog = useService("dialog"); + this.carouselRef = useRef("carousel"); + this.activeSelected = false; + this.carouselInterval = null; onWillStart(() => { this.selfOrder.currentOrder = new Order({}); this.tablePadNumber = null; + + return loadJS("/web/static/lib/bootstrap/js/dist/carousel.js"); + }); + + onMounted(() => { + // used to init carousel after components mount / unmount + const carousel = new Carousel(this.carouselRef.el); + + this.carouselInterval = setInterval(() => { + carousel.next(); + }, 5000); + }); + + onWillUnmount(() => { + clearInterval(this.carouselInterval); }); } @@ -41,4 +61,12 @@ export class LandingPage extends Component { get languages() { return this.selfOrder.kiosk_available_languages; } + + get activeImage() { + if (!this.activeSelected) { + this.activeSelected = true; + return "active"; + } + return ""; + } } diff --git a/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.xml b/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.xml index c5cf166ec4c..e7f48e5f890 100644 --- a/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.xml +++ b/addons/pos_self_order/static/src/kiosk/pages/landing_page/landing_page.xml @@ -7,12 +7,11 @@ -
- -