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"> - +
  • My Cart - +
  • @@ -20,7 +20,7 @@ diff --git a/addons/website_sale_product_configurator/controllers/main.py b/addons/website_sale_product_configurator/controllers/main.py index 11c7db05a1f..c3966a88ca5 100644 --- a/addons/website_sale_product_configurator/controllers/main.py +++ b/addons/website_sale_product_configurator/controllers/main.py @@ -96,4 +96,6 @@ class WebsiteSale(main.WebsiteSale): ) option_parent[option['unique_id']] = option_value['line_id'] + request.session['website_sale_cart_quantity'] = order.cart_quantity + return str(order.cart_quantity) 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 832a421581f..e441f18e6c4 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 @@ -191,6 +191,7 @@ publicWidget.registry.ProductWishlist = publicWidget.Widget.extend(VariantMixin, var cart_alert = $('.wishlist-section').parent().find('#data_warning'); cart_alert.html(' ' + resp.warning); } + sessionStorage.setItem('website_sale_cart_quantity', resp.cart_quantity); $('.my_cart_quantity').html(resp.cart_quantity || ' '); }); },