diff --git a/addons/delivery/delivery_demo.xml b/addons/delivery/delivery_demo.xml index 9c412b24957..1881c8b6608 100644 --- a/addons/delivery/delivery_demo.xml +++ b/addons/delivery/delivery_demo.xml @@ -32,6 +32,7 @@ The Poste + 20 diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index ef16762436c..7d44f07a040 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -308,74 +308,6 @@ class Ecommerce(http.Controller): return request.redirect("/shop/product/%s/?enable_editor=1" % product.product_tmpl_id.id) - def add_product_to_cart(self, product_id=0, order_line_id=0, number=1, set_number=-1): - order_line_obj = request.registry.get('sale.order.line') - order_obj = request.registry.get('sale.order') - - order = self.get_order() - if not order: - order = request.registry['website'].ecommerce_get_new_order(request.cr, request.uid, context=request.context) - - request.context = dict(request.context, pricelist=self.get_pricelist()) - - # set order_line_id and product_id - if order_line_id: - order_line = None - for line in order.order_line: - if line.id == order_line_id: - order_line = line - break - if order_line: - product_id = order_line.product_id.id - else: - order_line_id = None - else: - order_line_ids = order_line_obj.search( - request.cr, SUPERUSER_ID, - [('order_id', '=', order.id), ('product_id', '=', product_id)], context=request.context) - if order_line_ids: - order_line_id = order_line_ids[0] - - if not order_line_id and not product_id: - return 0 - - # values initialisation - quantity = 0 - values = {} - if order_line_id: - order_line_val = order_line_obj.read(request.cr, SUPERUSER_ID, [order_line_id], [], context=request.context)[0] - if not product_id: - product_id = order_line_val['product_id'][0] - if set_number >= 0: - quantity = set_number - else: - quantity = order_line_val['product_uom_qty'] + number - if quantity < 0: - quantity = 0 - order_line_ids = [order_line_id] - else: - fields = [k for k, v in order_line_obj._columns.items()] - values = order_line_obj.default_get(request.cr, SUPERUSER_ID, fields, context=request.context) - quantity = 1 - order_line_ids = [] - - # change and record value - vals = order_line_obj._recalculate_product_values(request.cr, request.uid, order_line_ids, product_id, context=request.context) - values.update(vals) - - values['product_uom_qty'] = quantity - values['product_id'] = product_id - values['order_id'] = order.id - - if order_line_id: - order_line_obj.write(request.cr, SUPERUSER_ID, [order_line_id], values, context=request.context) - if not quantity: - order_line_obj.unlink(request.cr, SUPERUSER_ID, [order_line_id], context=request.context) - else: - order_line_id = order_line_obj.create(request.cr, SUPERUSER_ID, values, context=request.context) - order_obj.write(request.cr, SUPERUSER_ID, [order.id], {'order_line': [(4, order_line_id)]}, context=request.context) - return quantity - @website.route(['/shop/mycart/'], type='http', auth="public", multilang=True) def mycart(self, **post): cr, uid, context = request.cr, request.uid, request.context @@ -413,17 +345,23 @@ class Ecommerce(http.Controller): @website.route(['/shop/add_cart/'], type='http', auth="public", multilang=True, methods=['POST']) def add_cart(self, product_id, remove=None, **kw): - self.add_product_to_cart(product_id=int(product_id)) + request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid, + product_id=int(product_id), + context=request.context) return request.redirect("/shop/mycart/") @website.route(['/shop/change_cart//'], type='http', auth="public", multilang=True) def add_cart_order_line(self, order_line_id=None, remove=None, **kw): - self.add_product_to_cart(order_line_id=order_line_id, number=(remove and -1 or 1)) + request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid, + order_line_id=order_line_id, number=(remove and -1 or 1), + context=request.context) return request.redirect("/shop/mycart/") @website.route(['/shop/add_cart_json/'], type='json', auth="public") def add_cart_json(self, product_id=None, order_line_id=None, remove=None): - quantity = self.add_product_to_cart(product_id=product_id, order_line_id=order_line_id, number=(remove and -1 or 1)) + quantity = request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid, + product_id=product_id, order_line_id=order_line_id, number=(remove and -1 or 1), + context=request.context) order = self.get_order() return [quantity, order.get_number_of_products(), @@ -432,7 +370,9 @@ class Ecommerce(http.Controller): @website.route(['/shop/set_cart_json/'], type='json', auth="public") def set_cart_json(self, path=None, product_id=None, order_line_id=None, set_number=0, json=None): - return self.add_product_to_cart(product_id=product_id, order_line_id=order_line_id, set_number=set_number) + return request.registry['website']._ecommerce_add_product_to_cart(request.cr, request.uid, + product_id=product_id, order_line_id=order_line_id, set_number=set_number, + context=request.context) @website.route(['/shop/checkout/'], type='http', auth="public", multilang=True) def checkout(self, **post): diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py index 8ff80a0d840..55ec48a98e4 100644 --- a/addons/website_sale/models/website.py +++ b/addons/website_sale/models/website.py @@ -57,6 +57,73 @@ class Website(orm.Model): # Ecommerce quotation management # ************************************************************ + def _ecommerce_add_product_to_cart(self, cr, uid, product_id=0, order_line_id=0, number=1, set_number=-1, context=None): + order = self.ecommerce_get_current_order(cr, uid, context=context) + if not order: + order = self.ecommerce_get_new_order(cr, uid, context=context) + + order_line_obj = self.pool.get('sale.order.line') + order_obj = self.pool.get('sale.order') + + context = dict(context, pricelist=self.ecommerce_get_pricelist_id(cr, uid, None, context=context)) + + # set order_line_id and product_id + if order_line_id: + order_line = None + for line in order.order_line: + if line.id == order_line_id: + order_line = line + break + if order_line: + product_id = order_line.product_id.id + else: + order_line_id = None + else: + order_line_ids = order_line_obj.search(cr, SUPERUSER_ID, + [('order_id', '=', order.id), ('product_id', '=', product_id)], context=context) + if order_line_ids: + order_line_id = order_line_ids[0] + + if not order_line_id and not product_id: + return 0 + + # values initialisation + quantity = 0 + values = {} + if order_line_id: + order_line_val = order_line_obj.read(cr, SUPERUSER_ID, [order_line_id], [], context=context)[0] + if not product_id: + product_id = order_line_val['product_id'][0] + if set_number >= 0: + quantity = set_number + else: + quantity = order_line_val['product_uom_qty'] + number + if quantity < 0: + quantity = 0 + order_line_ids = [order_line_id] + else: + fields = [k for k, v in order_line_obj._columns.items()] + values = order_line_obj.default_get(cr, SUPERUSER_ID, fields, context=context) + quantity = 1 + order_line_ids = [] + + # change and record value + vals = order_line_obj._recalculate_product_values(cr, uid, order_line_ids, product_id, context=context) + values.update(vals) + + values['product_uom_qty'] = quantity + values['product_id'] = product_id + values['order_id'] = order.id + + if order_line_id: + order_line_obj.write(cr, SUPERUSER_ID, [order_line_id], values, context=context) + if not quantity: + order_line_obj.unlink(cr, SUPERUSER_ID, [order_line_id], context=context) + else: + order_line_id = order_line_obj.create(cr, SUPERUSER_ID, values, context=context) + order_obj.write(cr, SUPERUSER_ID, [order.id], {'order_line': [(4, order_line_id)]}, context=context) + return quantity + def _ecommerce_get_quotation_values(self, cr, uid, context=None): """ Generate the values for a new ecommerce quotation. """ SaleOrder = self.pool.get('sale.order') diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index 8015902b385..a10b300b153 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -55,7 +55,7 @@ $(document).ready(function () { } set_my_cart_quantity(data[1]); $link.parents(".input-group:first").find(".js_quantity").val(data[0]); - $('[data-oe-model="sale.order"][data-oe-field="amount_total"]').replaceWith(data[3]); + $('#mycart_total').replaceWith(data[3]); }); return false; }); diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index e22582fd77e..45795839c5a 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -531,32 +531,7 @@ - - - - - - - - - - - - - - - -

Total:

-

-
Taxes: - -
+
Continue Shopping Process Checkout @@ -933,30 +908,7 @@ - - - - - - - - - - - - - - - -

Total:

-

-
Taxes:
+
@@ -1063,5 +1015,36 @@ + + + + diff --git a/addons/website_sale_delivery/models/website.py b/addons/website_sale_delivery/models/website.py index d36ccc11c02..ab3c6e39a6b 100644 --- a/addons/website_sale_delivery/models/website.py +++ b/addons/website_sale_delivery/models/website.py @@ -6,17 +6,35 @@ from openerp import SUPERUSER_ID class Website(orm.Model): _inherit = 'website' - def _ecommerce_get_quotation_values(self, cr, uid, context=None): - """ Override the quotation values generation to add carrier_id data """ - values = super(Website, self)._ecommerce_get_quotation_values(cr, uid, context=context) - DeliveryCarrier = self.pool.get('delivery.carrier') - carrier_ids = DeliveryCarrier.search(cr, uid, [(1,"=",1)], context=context, limit=1) - # By default, select the first carrier - if carrier_ids: - values['carrier_id'] = carrier_ids[0] - return values - def _ecommerce_create_quotation(self, cr, uid, context=None): order_id = super(Website, self)._ecommerce_create_quotation(cr, uid, context=context) - self.pool['sale.order'].delivery_set(cr, SUPERUSER_ID, [order_id], context=context) + order = self.pool['sale.order'].browse(cr, SUPERUSER_ID, order_id, context=context) + self._check_carrier_quotation(cr, uid, order, context=context) return order_id + + def _ecommerce_add_product_to_cart(self, cr, uid, product_id=0, order_line_id=0, number=1, set_number=-1, context=None): + quantity = super(Website, self)._ecommerce_add_product_to_cart(cr, uid, + product_id=product_id, order_line_id=order_line_id, number=number, set_number=set_number, + context=context) + order = self.ecommerce_get_current_order(cr, uid, context=context) + return self._check_carrier_quotation(cr, uid, order, context=context) and quantity or None + + def _check_carrier_quotation(self, cr, uid, order, context=None): + # check to add or remove carrier_id + carrier_id = False + for line in order.website_order_line: + if line.product_id.type != "service": + carrier_id = True + break + + if not carrier_id: + order.write({'carrier_id': None}, context=context) + self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) + return None + elif not order.carrier_id: + carrier_ids = self.pool.get('delivery.carrier').search(cr, uid, [], context=context) + order.write({'carrier_id': carrier_ids[0]}, context=context) + order.delivery_set(context=context) + return None + + return carrier_id diff --git a/addons/website_sale_delivery/views/website_sale_delivery.xml b/addons/website_sale_delivery/views/website_sale_delivery.xml index b9d2534f7cf..46f04e70a38 100644 --- a/addons/website_sale_delivery/views/website_sale_delivery.xml +++ b/addons/website_sale_delivery/views/website_sale_delivery.xml @@ -2,7 +2,7 @@ -