diff --git a/addons/website_sale/__manifest__.py b/addons/website_sale/__manifest__.py
index 832e4f0f188..b641ad81034 100644
--- a/addons/website_sale/__manifest__.py
+++ b/addons/website_sale/__manifest__.py
@@ -81,8 +81,12 @@
'website_sale/static/src/js/website_sale_reorder.js',
'website_sale/static/src/js/website_sale_delivery.js',
'website_sale/static/src/scss/product_configurator.scss',
+ 'website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.js',
+ 'website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.xml',
'website_sale/static/src/js/notification/cart_notification/cart_notification.js',
'website_sale/static/src/js/notification/cart_notification/cart_notification.xml',
+ 'website_sale/static/src/js/notification/warning_notification/warning_notification.js',
+ 'website_sale/static/src/js/notification/warning_notification/warning_notification.xml',
'website_sale/static/src/js/notification/notification_service.js',
],
'web._assets_primary_variables': [
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index 732e28bce04..0588de0a9da 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -870,6 +870,7 @@ class WebsiteSale(payment_portal.PaymentPortal):
)
values['notification_info'] = self._get_cart_notification_information(order, [values['line_id']])
+ values['notification_info']['warning'] = values.pop('warning', '')
request.session['website_sale_cart_quantity'] = order.cart_quantity
if not order.cart_quantity:
diff --git a/addons/website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.js b/addons/website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.js
new file mode 100644
index 00000000000..df7cc3c22eb
--- /dev/null
+++ b/addons/website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.js
@@ -0,0 +1,48 @@
+/** @odoo-module **/
+
+import { Component } from "@odoo/owl";
+import { formatCurrency } from "@web/core/currency";
+
+export class AddToCartNotification extends Component {
+ static template = "website_sale.addToCartNotification";
+ static props = {
+ lines: {
+ type: Array,
+ element: {
+ type: Object,
+ shape: {
+ id: Number,
+ image_url: String,
+ quantity: Number,
+ name: String,
+ description: { type: String, optional: true },
+ line_price_total: Number,
+ },
+ },
+ },
+ currency_id: Number,
+ }
+
+ /**
+ * Return the price, in the format of the sale order currency.
+ *
+ * @param {Object} line - The line element for which to return the formatted price.
+ * @return {String} - The price, in the format of the sale order currency.
+ */
+ getFormattedPrice(line) {
+ return formatCurrency(line.line_price_total, this.props.currency_id);
+ }
+
+ /**
+ * Return the product summary based on the line information.
+ *
+ * The product summary is computed based on the line quantity and name, separated by the symbol
+ * 'x' (e.g.: 1 x Chair Floor Protection).
+ *
+ * @param {Object} line - The line element for which to return the product summary.
+ * @return {String} - The product summary.
+ */
+ getProductSummary(line) {
+ return line.quantity + " x " + line.name;
+ }
+}
diff --git a/addons/website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.xml b/addons/website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.xml
new file mode 100644
index 00000000000..e0ed8ee832c
--- /dev/null
+++ b/addons/website_sale/static/src/js/notification/add_to_cart_notification/add_to_cart_notification.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+ View cart
+
+
+
+
diff --git a/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.js b/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.js
index 06a0ff729a0..fb38c545a6a 100644
--- a/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.js
+++ b/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.js
@@ -1,12 +1,15 @@
/** @odoo-module **/
import { Component } from "@odoo/owl";
-import { formatCurrency } from "@web/core/currency";
+import { AddToCartNotification } from "../add_to_cart_notification/add_to_cart_notification";
+import { WarningNotification } from "../warning_notification/warning_notification";
export class CartNotification extends Component {
+ static components = { AddToCartNotification, WarningNotification };
static template = "website_sale.cartNotification";
static props = {
message: [String, { toString: Function }],
+ warning: [String, { toString: Function }],
lines: {
type: Array,
element: {
@@ -34,27 +37,4 @@ export class CartNotification extends Component {
get positionOffset() {
return (document.querySelector('header.o_top_fixed_element')?.offsetHeight || 0) + 'px';
}
-
- /**
- * Return the price, in the format of the sale order currency.
- *
- * @param {Object} line - The line element for which to return the formatted price.
- * @return {String} - The price, in the format of the sale order currency.
- */
- getFormattedPrice(line) {
- return formatCurrency(line.line_price_total, this.props.currency_id);
- }
-
- /**
- * Return the product summary based on the line information.
- *
- * The product summary is computed based on the line quantity and name, separated by the symbol
- * 'x' (e.g.: 1 x Chair Floor Protection).
- *
- * @param {Object} line - The line element for which to return the product summary.
- * @return {String} - The product summary.
- */
- getProductSummary(line) {
- return line.quantity + " x " + line.name;
- }
}
diff --git a/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.xml b/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.xml
index f4820a66832..a5e9a5b5b8e 100644
--- a/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.xml
+++ b/addons/website_sale/static/src/js/notification/cart_notification/cart_notification.xml
@@ -15,24 +15,11 @@
aria-label="Close"/>
-
-
-
![]()
-
-
-
-
-
-
-
-
- View cart
-
+
+
diff --git a/addons/website_sale/static/src/js/notification/warning_notification/warning_notification.js b/addons/website_sale/static/src/js/notification/warning_notification/warning_notification.js
new file mode 100644
index 00000000000..4944c14824b
--- /dev/null
+++ b/addons/website_sale/static/src/js/notification/warning_notification/warning_notification.js
@@ -0,0 +1,10 @@
+/** @odoo-module **/
+
+import { Component } from "@odoo/owl";
+
+export class WarningNotification extends Component {
+ static template = "website_sale.warningNotification";
+ static props = {
+ warning: [String, { toString: Function }],
+ }
+}
diff --git a/addons/website_sale/static/src/js/notification/warning_notification/warning_notification.xml b/addons/website_sale/static/src/js/notification/warning_notification/warning_notification.xml
new file mode 100644
index 00000000000..22f3c5f7bd8
--- /dev/null
+++ b/addons/website_sale/static/src/js/notification/warning_notification/warning_notification.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js
index eda04372405..ccaa416ed04 100644
--- a/addons/website_sale/static/src/js/website_sale.js
+++ b/addons/website_sale/static/src/js/website_sale.js
@@ -225,7 +225,7 @@ export const WebsiteSale = publicWidget.Widget.extend(VariantMixin, cartHandlerM
$('.js_quantity[data-line-id='+line_id+']').val(data.quantity).text(data.quantity);
wSaleUtils.updateCartNavBar(data);
- wSaleUtils.showWarning(data.warning);
+ wSaleUtils.showWarning(data.notification_info.warning);
// Propagating the change to the express checkout forms
Component.env.bus.trigger('cart_amount_changed', [data.amount, data.minor_amount]);
});
diff --git a/addons/website_sale/static/src/js/website_sale_utils.js b/addons/website_sale/static/src/js/website_sale_utils.js
index aa50679a18d..abd810f6fdf 100644
--- a/addons/website_sale/static/src/js/website_sale_utils.js
+++ b/addons/website_sale/static/src/js/website_sale_utils.js
@@ -35,8 +35,8 @@ export const cartHandlerMixin = {
});
if (data.cart_quantity && (data.cart_quantity !== parseInt($(".my_cart_quantity").text()))) {
updateCartNavBar(data);
- showCartNotification(this.call.bind(this), data.notification_info);
};
+ showCartNotification(this.call.bind(this), data.notification_info);
return data;
},
};
@@ -119,7 +119,14 @@ function showCartNotification(callService, props, options = {}) {
// Show the notification about the cart
if (props.lines) {
callService("cartNotificationService", "add", "Item(s) added to your cart", {
- ...props,
+ lines: props.lines,
+ currency_id: props.currency_id,
+ ...options,
+ });
+ }
+ if (props.warning) {
+ callService("cartNotificationService", "add", "Warning", {
+ warning: props.warning,
...options,
});
}
diff --git a/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js b/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js
index f0a798f10dc..d51c804509d 100644
--- a/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js
+++ b/addons/website_sale_wishlist/static/src/js/website_sale_wishlist.js
@@ -198,7 +198,6 @@ publicWidget.registry.ProductWishlist = publicWidget.Widget.extend(VariantMixin,
}).then(function (data) {
wSaleUtils.updateCartNavBar(data);
wSaleUtils.showCartNotification(callService, data.notification_info);
- wSaleUtils.showWarning(data.warning);
});
},
/**