From 08a561d5880d6b208e552dc994662bb3615616bb Mon Sep 17 00:00:00 2001 From: "Adrien Guilliams (adgu)" Date: Wed, 4 Oct 2023 17:32:11 +0200 Subject: [PATCH] [IMP] pos_self_order, website_sale: add info popup to product card in self This commit introduce the information button on the product card in the self order mode. This button open a popup with the newly created field "description_self_order" which is an HTML field allowing the user to have a very customizable description for the product. It also removes the description_ecommerce field from the product view form as it is a field used in the website and not adapted for the backend (css/js not compatible). closes odoo/odoo#138216 Task-id: 3512835 Signed-off-by: Joseph Caburnay (jcb) --- addons/pos_self_order/__manifest__.py | 2 ++ .../pos_self_order/models/product_product.py | 5 +++- .../components/product_card/product_card.js | 12 ++++++++++ .../components/product_card/product_card.scss | 24 +++++++++++++++++++ .../components/product_card/product_card.xml | 3 +++ .../product_info_popup/product_info_popup.js | 17 +++++++++++++ .../product_info_popup.scss | 6 +++++ .../product_info_popup/product_info_popup.xml | 21 ++++++++++++++++ .../static/src/app/models/product.js | 4 ++-- .../src/app/pages/combo_page/combo_page.xml | 4 ++-- .../app/pages/product_page/product_page.xml | 4 ++-- .../static/src/app/self_order_service.js | 12 +++++++++- addons/pos_self_order/views/product_views.xml | 8 +++++++ addons/website_sale/views/product_views.xml | 6 ----- 14 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 addons/pos_self_order/static/src/app/components/product_info_popup/product_info_popup.js create mode 100644 addons/pos_self_order/static/src/app/components/product_info_popup/product_info_popup.scss create mode 100644 addons/pos_self_order/static/src/app/components/product_info_popup/product_info_popup.xml diff --git a/addons/pos_self_order/__manifest__.py b/addons/pos_self_order/__manifest__.py index cc8e15b9666..a729cb20285 100644 --- a/addons/pos_self_order/__manifest__.py +++ b/addons/pos_self_order/__manifest__.py @@ -63,6 +63,8 @@ 'web/static/lib/bootstrap/js/dist/scrollspy.js', "pos_self_order/static/src/app/**/*", "point_of_sale/static/src/app/store/models/product_custom_attribute.js", + 'web_editor/static/src/js/editor/odoo-editor/src/base_style.scss', + 'web_editor/static/src/scss/web_editor.common.scss', ], # Assets tests "pos_self_order.assets_tests": [ diff --git a/addons/pos_self_order/models/product_product.py b/addons/pos_self_order/models/product_product.py index 8e7284127cd..1525ec95c6e 100644 --- a/addons/pos_self_order/models/product_product.py +++ b/addons/pos_self_order/models/product_product.py @@ -15,6 +15,9 @@ class ProductTemplate(models.Model): help="If this product is available in the Self Order screens", default=True, ) + description_self_order = fields.Html( + string="Product Description for Self Order", + ) @api.onchange('available_in_pos') def _on_change_available_in_pos(self): @@ -141,7 +144,7 @@ class ProductProduct(models.Model): "attributes": self._get_attributes(pos_config), "name": self._get_name(), "id": self.id, - "description_sale": self.description_sale, + "description_self_order": self.description_self_order, "pos_categ_ids": self.pos_categ_ids.mapped("name") or ["Other"], "pos_combo_ids": self.combo_ids.mapped("id") or False, "is_pos_groupable": self.uom_id.is_pos_groupable, diff --git a/addons/pos_self_order/static/src/app/components/product_card/product_card.js b/addons/pos_self_order/static/src/app/components/product_card/product_card.js index ace0c2ff5d0..11dba3acbd6 100644 --- a/addons/pos_self_order/static/src/app/components/product_card/product_card.js +++ b/addons/pos_self_order/static/src/app/components/product_card/product_card.js @@ -4,6 +4,7 @@ import { Component, useRef } from "@odoo/owl"; import { useSelfOrder } from "@pos_self_order/app/self_order_service"; import { useService, useForwardRefToParent } from "@web/core/utils/hooks"; import { Line } from "@pos_self_order/app/models/line"; +import { ProductInfoPopup } from "@pos_self_order/app/components/product_info_popup/product_info_popup"; export class ProductCard extends Component { static template = "pos_self_order.ProductCard"; @@ -15,6 +16,7 @@ export class ProductCard extends Component { setup() { this.selfOrder = useSelfOrder(); this.router = useService("router"); + this.dialog = useService("dialog"); useForwardRefToParent("currentProductCard"); } @@ -112,4 +114,14 @@ export class ProductCard extends Component { await this.selfOrder.getPricesFromServer(); } } + + showProductInfo() { + this.dialog.add(ProductInfoPopup, { + product: this.props.product, + title: this.props.product.name, + addToCart: () => { + this.selectProduct(); + }, + }); + } } diff --git a/addons/pos_self_order/static/src/app/components/product_card/product_card.scss b/addons/pos_self_order/static/src/app/components/product_card/product_card.scss index 86f49abf001..f553f5c86cf 100644 --- a/addons/pos_self_order/static/src/app/components/product_card/product_card.scss +++ b/addons/pos_self_order/static/src/app/components/product_card/product_card.scss @@ -1,4 +1,28 @@ +.self_order_product_card { + position: relative +} + .scale-up { transform: scale(1.2); transition: transform .75s ease-in-out; } + +.product-information-tag { + width: 0; + height: 0; + border-style: solid; + border-width: 0 34px 34px 0; + border-color: transparent #9a9ea180 transparent transparent; + position: absolute; + top: 0; + right: 17px; + color: white; + text-align: center; + z-index: 1; +} + +.product-information-tag-logo { + position: absolute; + left: 22px; + top: 4px; +} diff --git a/addons/pos_self_order/static/src/app/components/product_card/product_card.xml b/addons/pos_self_order/static/src/app/components/product_card/product_card.xml index 4035eec2523..a44d66a788a 100644 --- a/addons/pos_self_order/static/src/app/components/product_card/product_card.xml +++ b/addons/pos_self_order/static/src/app/components/product_card/product_card.xml @@ -6,6 +6,9 @@ t-att-title="props.product.name" t-on-click="selectProduct" t-ref="selfProductCard"> +
+