diff --git a/addons/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py
index 900b0b66c7b..839653ab0ac 100644
--- a/addons/website_event_sale/controllers/main.py
+++ b/addons/website_event_sale/controllers/main.py
@@ -55,6 +55,8 @@ class WebsiteEventSaleController(WebsiteEventController):
data['sale_order_id'] = order_sudo.id
data['sale_order_line_id'] = cart_data[event_ticket_id]
+ request.session['website_sale_cart_quantity'] = order_sudo.cart_quantity
+
return super()._create_attendees_from_registration_post(event, registration_data)
@route()
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index c5ac062db80..e0ffebeac10 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -499,6 +499,9 @@ class WebsiteSale(http.Controller):
if order and order.state != 'draft':
request.session['sale_order_id'] = None
order = request.website.sale_get_order()
+
+ request.session['website_sale_cart_quantity'] = order.cart_quantity
+
values = {}
if access_token:
abandoned_order = request.env['sale.order'].sudo().search([('access_token', '=', access_token)], limit=1)
@@ -557,6 +560,8 @@ class WebsiteSale(http.Controller):
**kwargs
)
+ request.session['website_sale_cart_quantity'] = sale_order.cart_quantity
+
if express:
return request.redirect("/shop/checkout?express=1")
@@ -597,6 +602,8 @@ class WebsiteSale(http.Controller):
**kw
)
+ request.session['website_sale_cart_quantity'] = order.cart_quantity
+
if not order.cart_quantity:
request.website.sale_reset()
return values
@@ -627,8 +634,9 @@ class WebsiteSale(http.Controller):
@http.route(['/shop/cart/quantity'], type='json', auth="public", methods=['POST'], website=True, csrf=False)
def cart_quantity(self):
- cart = request.website.sale_get_order()
- return cart and cart.cart_quantity or 0
+ if 'website_sale_cart_quantity' not in request.session:
+ return request.website.sale_get_order().cart_quantity
+ return request.session['website_sale_cart_quantity']
# ------------------------------------------------------
# Checkout
diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index 1954e9f761f..0ea76a2402a 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -124,7 +124,8 @@ class SaleOrder(models.Model):
self = self.with_company(self.company_id)
if self.state != 'draft':
- request.session['sale_order_id'] = None
+ request.session.pop('sale_order_id', None)
+ request.session.pop('website_sale_cart_quantity', None)
raise UserError(_('It is forbidden to modify a sales order which is not in draft status.'))
product = self.env['product.product'].browse(product_id).exists()
diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py
index 152676765be..e82cce92018 100644
--- a/addons/website_sale/models/website.py
+++ b/addons/website_sale/models/website.py
@@ -302,7 +302,8 @@ class Website(models.Model):
if not (sale_order_sudo or force_create):
# Do not create a SO record unless needed
if request.session.get('sale_order_id'):
- request.session['sale_order_id'] = None
+ request.session.pop('sale_order_id')
+ request.session.pop('website_sale_cart_quantity', None)
return self.env['sale.order']
# Only set when neeeded
@@ -316,6 +317,7 @@ class Website(models.Model):
sale_order_sudo = SaleOrder.with_user(SUPERUSER_ID).create(so_data)
request.session['sale_order_id'] = sale_order_sudo.id
+ request.session['website_sale_cart_quantity'] = sale_order_sudo.cart_quantity
# The order was created with SUPERUSER_ID, revert back to request user.
sale_order_sudo = sale_order_sudo.with_user(self.env.user).sudo()
return sale_order_sudo
@@ -327,6 +329,7 @@ class Website(models.Model):
# case when user emptied the cart
if not request.session.get('sale_order_id'):
request.session['sale_order_id'] = sale_order_sudo.id
+ request.session['website_sale_cart_quantity'] = sale_order_sudo.cart_quantity
# check for change of partner_id ie after signup
if sale_order_sudo.partner_id.id != partner_sudo.id and request.website.partner_id.id != partner_sudo.id:
@@ -435,10 +438,9 @@ class Website(models.Model):
return fpos.id
def sale_reset(self):
- request.session.update({
- 'sale_order_id': False,
- 'website_sale_current_pl': False,
- })
+ request.session.pop('sale_order_id', None)
+ request.session.pop('website_sale_current_pl', None)
+ request.session.pop('website_sale_cart_quantity', None)
@api.model
def action_dashboard_redirect(self):
diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml
index 3041b31f2d7..31a8af23e08 100644
--- a/addons/website_sale/views/templates.xml
+++ b/addons/website_sale/views/templates.xml
@@ -5,14 +5,14 @@
t-nocache-_icon="_icon"
t-nocache-_item_class="_item_class"
t-nocache-_link_class="_link_class">
-