From 7505cce2e96771942e804596383dce255528dfd2 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Tue, 24 Jun 2014 17:37:13 +0200 Subject: [PATCH] [WIP] --- addons/website_sale/controllers/main.py | 5 +- addons/website_sale/models/product.py | 1 - addons/website_sale/models/sale_order.py | 23 +-- .../static/src/js/website.tour.sale.js | 75 -------- .../static/src/js/website_sale.js | 32 +--- .../website_sale/tests/test_sale_process.py | 1 - addons/website_sale/views/templates.xml | 76 +------- .../website_sale_options/controllers/main.py | 21 ++- .../website_sale_options/models/__init__.py | 1 + addons/website_sale_options/models/product.py | 10 + .../website_sale_options/models/sale_order.py | 66 +++---- .../static/src/js/website_sale.js | 37 ++++ .../static/src/js/website_sale.test.js | 80 ++++++++ addons/website_sale_options/tests/__init__.py | 1 + .../tests/customize_test.py | 14 ++ .../website_sale_options/views/templates.xml | 177 +++++++++++++----- 16 files changed, 328 insertions(+), 292 deletions(-) create mode 100644 addons/website_sale_options/models/product.py create mode 100644 addons/website_sale_options/static/src/js/website_sale.test.js create mode 100644 addons/website_sale_options/tests/__init__.py create mode 100644 addons/website_sale_options/tests/customize_test.py diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 52d4c15df38..486914dfd6a 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -216,7 +216,7 @@ class website_sale(http.Controller): product = template_obj.browse(cr, uid, int(product), context=context) attribute_value_ids = [] - if request.website.company_pricelist_id.id != context['pricelist']: + if request.website.pricelist_id.id != context['pricelist']: company_currency_id = request.website.company_currency_id.id currency_id = self.get_pricelist().currency_id.id for p in product.product_variant_ids: @@ -289,12 +289,11 @@ class website_sale(http.Controller): @http.route(['/shop/cart/update_json'], type='json', auth="public", methods=['POST'], website=True) def cart_update_json(self, product_id, line_id, add_qty=None, set_qty=None, display=True): order = request.website.sale_get_order(force_create=1) - line_id, quantity, option_ids = order._cart_update(product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty) + line_id, quantity = order._cart_update(product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty) if not display: return None return { 'quantity': quantity, - 'option_ids': option_ids, 'cart_quantity': order.cart_quantity, 'website_sale.total': request.website._render("website_sale.total", { 'website_sale_order': request.website.sale_get_order() diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py index 06b61dc6465..ce206372047 100644 --- a/addons/website_sale/models/product.py +++ b/addons/website_sale/models/product.py @@ -132,7 +132,6 @@ class product_template(osv.Model): 'website_sequence': fields.integer('Sequence', help="Determine the display order in the Website E-commerce"), 'website_url': fields.function(_website_url, string="Website url", type="char"), 'public_categ_ids': fields.many2many('product.public.category', string='Public Category', help="Those categories are used to group similar products for e-commerce."), - 'optional_product_ids': fields.many2many('product.template','product_optional_rel','src_id','dest_id',string='Optional Products', help="Products to propose when add to cart."), } def _defaults_website_sequence(self, cr, uid, *l, **kwargs): diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 695d60a4f6a..49f69c9ff57 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -51,18 +51,12 @@ class sale_order(osv.Model): 'order': order } - def _cart_find_product_line(self, cr, uid, ids, product_id=None, line_id=None, context=None): + def _cart_find_product_line(self, cr, uid, ids, product_id=None, line_id=None, context=None, *args): for so in self.browse(cr, uid, ids, context=context): - order_line_id = None - domain = [('order_id', '=', so.id), ('product_id', '=', product_id)] if line_id: domain += [('id', '=', line_id)] - - order_line_ids = self.pool.get('sale.order.line').search(cr, SUPERUSER_ID, domain, context=context) - if order_line_ids: - order_line_id = order_line_ids[0] - return order_line_id + return self.pool.get('sale.order.line').search(cr, SUPERUSER_ID, domain, context=context) def _website_product_id_change(self, cr, uid, ids, order_id, product_id, line_id=None, context=None): so = self.pool.get('sale.order').browse(cr, uid, order_id, context=context) @@ -87,13 +81,16 @@ class sale_order(osv.Model): values['tax_id'] = [(6, 0, values['tax_id'])] return values - def _cart_update(self, cr, uid, ids, product_id=None, line_id=None, add_qty=0, set_qty=0, linked_line_id=None, optional_product_ids=None, context=None): + def _cart_update(self, cr, uid, ids, product_id=None, line_id=None, add_qty=0, set_qty=0, context=None, *args): """ Add or set product quantity, add_qty can be negative """ sol = self.pool.get('sale.order.line') quantity = 0 for so in self.browse(cr, uid, ids, context=context): - line_id = so._cart_find_product_line(product_id, line_id, context=context) + if line_id != False: + line_ids = so._cart_find_product_line(product_id, line_id, context=context, *args) + if line_ids: + line_id = line_ids[0] # Create line if no line with product_id can be located if not line_id: @@ -132,9 +129,7 @@ class website(orm.Model): _columns = { 'pricelist_id': fields.related('user_id','partner_id','property_product_pricelist', type='many2one', relation='product.pricelist', string='Default pricelist'), - 'company_pricelist_id': fields.related('company_id','partner_id','property_product_pricelist', - type='many2one', relation='product.pricelist', string='Default pricelist'), - 'company_currency_id': fields.related('company_pricelist_id','currency_id', + 'currency_id': fields.related('pricelist_id','currency_id', type='many2one', relation='res.currency', string='Default pricelist'), } @@ -230,7 +225,7 @@ class website(orm.Model): }) def compute_curency(self, cr, uid, ids, from_amount, from_currency_id=None, context=None): - from_currency_id = from_currency_id or self.browse(cr, SUPERUSER_ID, ids[0]).company_currency_id.id + from_currency_id = from_currency_id or self.browse(cr, SUPERUSER_ID, ids[0]).currency_id.id to_currency_id = self.pool.get("res.users").browse(cr, uid, uid).partner_id.property_product_pricelist.currency_id.id return self.pool['res.currency'].compute(cr, uid, from_currency_id, to_currency_id, from_amount, context=context) diff --git a/addons/website_sale/static/src/js/website.tour.sale.js b/addons/website_sale/static/src/js/website.tour.sale.js index 65ed620e3a4..09fe9f26171 100644 --- a/addons/website_sale/static/src/js/website.tour.sale.js +++ b/addons/website_sale/static/src/js/website.tour.sale.js @@ -1,80 +1,5 @@ (function () { 'use strict'; - openerp.Tour.register({ - id: 'shop_customize', - name: "Customize the page and search a product", - path: '/shop', - mode: 'test', - steps: [ - { - title: "open customize menu", - element: '#customize-menu-button', - }, - { - title: "click on 'Product Attribute's Filters'", - element: "#customize-menu a:contains(Product Attribute's Filters)", - }, - { - title: "select product attribute memory 16 Go", - waitNot: '#customize-menu:visible', - element: 'form.js_attributes label:contains(16 Go) input:not(:checked)', - }, - { - title: "check the selection", - waitFor: 'form.js_attributes label:contains(16 Go) input:checked', - }, - { - title: "select iPod", - waitNot: '.oe_website_sale .oe_product_cart:eq(2)', - element: '.oe_product_cart a:contains("iPod")', - }, - { - title: "open customize menu 2", - waitFor: 'form[action^="/shop/cart/update"] label:contains(32 Go) input', - element: '#customize-menu-button', - }, - { - title: "click on 'Confirm: Add To Cart'", - element: "#customize-menu a:contains(Confirm: Add To Cart)", - }, - { - title: "click on 'Add to Cart' button", - waitNot: '#customize-menu:visible', - element: "a[data-toggle='modal']:contains(Add to Cart)", - }, - { - title: "click in modal on 'Proceed to checkout' button", - element: '.modal a:contains("Proceed to checkout")', - }, - { - title: "return to the iPod product", - waitFor: '#cart_products', - element: "a:contains(iPod)", - }, - { - title: "open customize menu 3", - waitFor: 'form[action^="/shop/cart/update"] label:contains(32 Go) input', - element: '#customize-menu-button', - }, - { - title: "click on 'Confirm: Add To Cart'", - element: "#customize-menu a:contains(Confirm: Add To Cart)", - }, - { - title: "click on 'My Cart'", - waitFor: "a.a-submit:contains(Add to Cart)", - element: "a[href='/shop/cart']", - }, - { - title: "remove iPod from cart", - element: '#cart_products a.js_add_cart_json:first', - }, - { - title: "finish", - waitFor: '.my_cart_quantity:contains(1)', - }, - ] - }); openerp.Tour.register({ id: 'shop_buy_product', diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index f9ac456ff4e..c9a8c8eea3a 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -85,7 +85,7 @@ $(document).ready(function () { $('input.js_variant_change, select.js_variant_change').change(function (ev) { var $ul = $(this).parents('ul.js_add_cart_variants:first'); var $parent = $ul.parents('.js_product:first'); - var $porduct_id = $parent.find('input.product_id, input.optional_product_id').first(); + var $product_id = $parent.find('input.product_id').first(); var $price = $parent.find(".oe_price:first .oe_currency_value"); var $default_price = $parent.find(".oe_default_price:first .oe_currency_value"); var variant_ids = $ul.data("attribute_value_ids"); @@ -127,11 +127,11 @@ $(document).ready(function () { if (product_id) { $parent.removeClass("css_not_available"); - $porduct_id.val(product_id); + $product_id.val(product_id); $parent.find(".js_check_product").removeAttr("disabled"); } else { $parent.addClass("css_not_available"); - $porduct_id.val(0); + $product_id.val(0); $parent.find(".js_check_product").attr("disabled", "disabled"); } }); @@ -139,32 +139,6 @@ $(document).ready(function () { $('input.js_variant_change, select.js_variant_change', this).first().trigger('change'); }); - $('#modal_optional_products').on('show.bs.modal', function () { - var $confirm = $('#product_confirmation .js_attributes'); - if (!$confirm.size()) return; - $confirm.empty(); - $('.js_add_cart_variants:first ul:first > li').each(function () { - var $li = $(this); - var $span = $("
:
"); - var attr = $li.children().first().text(); - var value = $li.find("label:has(input:checked) span:first").text(); - if (!/\S/.test(value)) { - value = $li.find("label:has(input:checked) input").attr("title"); - } - $span.children().first().text( attr ); - $span.children().last().text( value ); - $confirm.append($span); - }); - }); - - $("a.js_add, a.js_remove").click(function (event) { - event.preventDefault(); - var $parent = $(this).parents('.js_product:first'); - $parent.find("a.js_add, span.js_remove").toggleClass("hidden"); - $parent.find("input.js_optional_same_quantity").val( $(this).hasClass("js_add") ? 1 : 0 ); - var $remove = $parent.find(".js_remove"); - }); - $("input.js_quantity").change(function (event) { var qty = parseFloat($(this).val()); if (qty === 1) { diff --git a/addons/website_sale/tests/test_sale_process.py b/addons/website_sale/tests/test_sale_process.py index 788b6201734..ec7d5ddb46d 100644 --- a/addons/website_sale/tests/test_sale_process.py +++ b/addons/website_sale/tests/test_sale_process.py @@ -12,7 +12,6 @@ inject = [ class TestUi(openerp.tests.HttpCase): def test_01_admin_shop_tour(self): self.phantom_js("/", "openerp.Tour.run('shop', 'test')", "openerp.Tour.tours.shop", login="admin") - self.phantom_js("/", "openerp.Tour.run('shop_customize', 'test')", "openerp.Tour.tours.shop_customize", login="admin", inject=inject) def test_02_admin_checkout(self): self.phantom_js("/", "openerp.Tour.run('shop_buy_product', 'test')", "openerp.Tour.tours.shop_buy_product", login="admin", inject=inject) diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 25f617f552b..3372fc26748 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -393,79 +393,7 @@

Product not available

- Add to Cart - - - @@ -488,7 +416,7 @@