diff --git a/controllers/main.py b/controllers/main.py
index 3a589ac2979..0def9e81217 100644
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -10,8 +10,10 @@ class WebsiteSale(WebsiteSale):
def pricelist(self, promo, **post):
order = request.website.sale_get_order()
coupon_status = request.env['sale.coupon.apply.code'].sudo().apply_coupon(order, promo)
- if coupon_status.get('error', False):
+ if coupon_status.get('not_found'):
return super(WebsiteSale, self).pricelist(promo, **post)
+ elif coupon_status.get('error'):
+ request.session['error_promo_code'] = coupon_status['error']
return request.redirect(post.get('r', '/shop/cart'))
@http.route(['/shop/payment'], type='http', auth="public", website=True)
@@ -19,3 +21,9 @@ class WebsiteSale(WebsiteSale):
order = request.website.sale_get_order()
order.recompute_coupon_lines()
return super(WebsiteSale, self).payment(**post)
+
+ @http.route(['/shop/cart'], type='http', auth="public", website=True)
+ def cart(self, **post):
+ order = request.website.sale_get_order()
+ order.recompute_coupon_lines()
+ return super(WebsiteSale, self).cart(**post)
diff --git a/models/__init__.py b/models/__init__.py
index 6819ceab9a0..a603e535975 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -2,4 +2,5 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import sale_coupon_rule
-from . import sale_order
\ No newline at end of file
+from . import sale_order
+from . import website
diff --git a/models/sale_order.py b/models/sale_order.py
index 7bc53960d0a..3effee6a17c 100644
--- a/models/sale_order.py
+++ b/models/sale_order.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
+from odoo.http import request
class SaleOrder(models.Model):
@@ -10,3 +11,9 @@ class SaleOrder(models.Model):
for order in self:
reward_lines = order.website_order_line.filtered(lambda line: line.is_reward_line)
order.cart_quantity -= int(sum(reward_lines.mapped('product_uom_qty')))
+
+ def get_promo_code_error(self, delete=True):
+ error = request.session.get('error_promo_code')
+ if error and delete:
+ request.session.pop('error_promo_code')
+ return error
diff --git a/models/website.py b/models/website.py
new file mode 100644
index 00000000000..37f93c7f64b
--- /dev/null
+++ b/models/website.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields, api
+
+
+class Website(models.Model):
+ _inherit = "website"
+
+ @api.multi
+ def sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False):
+ order = super(Website, self).sale_get_order(force_create, code, update_pricelist, force_pricelist)
+ order.recompute_coupon_lines()
+ return order
diff --git a/views/website_sale_templates.xml b/views/website_sale_templates.xml
index db139ad39a8..033201102d0 100644
--- a/views/website_sale_templates.xml
+++ b/views/website_sale_templates.xml
@@ -47,6 +47,13 @@
+
+
+