diff --git a/controllers/main.py b/controllers/main.py index 0def9e81217..0e0c87e3d2f 100644 --- a/controllers/main.py +++ b/controllers/main.py @@ -27,3 +27,27 @@ class WebsiteSale(WebsiteSale): order = request.website.sale_get_order() order.recompute_coupon_lines() return super(WebsiteSale, self).cart(**post) + + def _update_website_sale_coupon(self, **post): + order = request.website.sale_get_order() + order.recompute_coupon_lines() + free_shipping_lines = order._get_free_shipping_lines() + currency = order.currency_id + result = {} + if free_shipping_lines: + amount_free_shipping = sum(free_shipping_lines.mapped('price_subtotal')) + result.update({ + 'new_amount_delivery': self._format_amount(0.0, currency), + 'new_amount_untaxed': self._format_amount(order.amount_untaxed, currency), + 'new_amount_tax': self._format_amount(order.amount_tax, currency), + 'new_amount_total': self._format_amount(order.amount_total, currency), + 'new_amount_order_discounted': self._format_amount(order.reward_amount - amount_free_shipping, currency) + }) + return result + + # Override + # Add in the rendering the free_shipping_line + def _get_shop_payment_values(self, order, **kwargs): + values = super(WebsiteSale, self)._get_shop_payment_values(order, **kwargs) + values['free_shipping_lines'] = order._get_free_shipping_lines() + return values diff --git a/models/sale_order.py b/models/sale_order.py index e96e81a92f8..0fa6efb784f 100644 --- a/models/sale_order.py +++ b/models/sale_order.py @@ -61,3 +61,11 @@ class SaleOrder(models.Model): res = super(SaleOrder, self)._cart_update(product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty, attributes=attributes, **kwargs) self.recompute_coupon_lines() return res + + def _get_free_shipping_lines(self): + self.ensure_one() + free_shipping_prgs_ids = self.no_code_promo_program_ids.filtered(lambda p: p.reward_type == 'free_shipping') + if not free_shipping_prgs_ids: + return self.env['sale.order.line'] + free_shipping_product_ids = free_shipping_prgs_ids.mapped('discount_line_product_id') + return self.order_line.filtered(lambda l: l.product_id in free_shipping_product_ids) diff --git a/views/website_sale_templates.xml b/views/website_sale_templates.xml index 922751ecff5..392914e3c73 100644 --- a/views/website_sale_templates.xml +++ b/views/website_sale_templates.xml @@ -79,4 +79,10 @@ + +