X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=addons%2Fwebsite_sale%2Fcontrollers%2Fmain.py;h=fc2a6e426509fe71571f4152717a5dd5bb86f397;hb=5cc81dd64f2260fff3a0ec659c67d15bd3a50921;hp=486914dfd6a524a2d07660379984a499ba79e007;hpb=7505cce2e96771942e804596383dce255528dfd2;p=odoo%2Fodoo.git diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 486914d..fc2a6e4 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -98,18 +98,33 @@ class QueryURL(object): return path -def get_pricelist(): - cr, uid, context, pool = request.cr, request.uid, request.context, request.registry - sale_order = context.get('sale_order') - if sale_order: - pricelist = sale_order.pricelist_id - else: - partner = pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=context).partner_id - pricelist = partner.property_product_pricelist - return pricelist - class website_sale(http.Controller): + def get_pricelist(self): + cr, uid, context, pool = request.cr, request.uid, request.context, request.registry + sale_order = context.get('sale_order') + if sale_order: + pricelist = sale_order.pricelist_id + else: + partner = pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=context).partner_id + pricelist = partner.property_product_pricelist + return pricelist + + def get_attribute_value_ids(self, product): + cr, uid, context, pool = request.cr, request.uid, request.context, request.registry + currency_obj = pool['res.currency'] + attribute_value_ids = [] + if request.website.pricelist_id.id != context['pricelist']: + website_currency_id = request.website.currency_id.id + currency_id = self.get_pricelist().currency_id.id + for p in product.product_variant_ids: + price = currency_obj.compute(cr, uid, website_currency_id, currency_id, p.lst_price) + attribute_value_ids.append([p.id, map(int, p.attribute_value_ids), p.price, price]) + else: + attribute_value_ids = [[p.id, map(int, p.attribute_value_ids), p.price, p.lst_price] for p in product.product_variant_ids] + + return attribute_value_ids + @http.route(['/shop', '/shop/page/', '/shop/category/', @@ -148,7 +163,11 @@ class website_sale(http.Controller): keep = QueryURL('/shop', category=category and int(category), search=search, attrib=attrib_list) if not context.get('pricelist'): - context['pricelist'] = int(self.get_pricelist()) + pricelist = self.get_pricelist() + context['pricelist'] = int(pricelist) + else: + pricelist = pool.get('product.pricelist').browse(cr, uid, context['pricelist'], context) + product_obj = pool.get('product.template') product_count = product_obj.search_count(cr, uid, domain, context=context) @@ -166,8 +185,12 @@ class website_sale(http.Controller): categs = filter(lambda x: not x.parent_id, categories) attributes_obj = request.registry['product.attribute'] - attributes_ids = attributes_obj.search(cr, uid, [], context=request.context) - attributes = attributes_obj.browse(cr, uid, attributes_ids, context=request.context) + attributes_ids = attributes_obj.search(cr, uid, [], context=context) + attributes = attributes_obj.browse(cr, uid, attributes_ids, context=context) + + from_currency = pool.get('product.price.type')._get_field_currency(cr, uid, 'list_price', context) + to_currency = pricelist.currency_id + compute_currency = lambda price: pool['res.currency']._compute(cr, uid, from_currency, to_currency, price, context=context) values = { 'search': search, @@ -175,18 +198,18 @@ class website_sale(http.Controller): 'attrib_values': attrib_values, 'attrib_set': attrib_set, 'pager': pager, - 'pricelist': self.get_pricelist(), + 'pricelist': pricelist, 'products': products, 'bins': table_compute().process(products), 'rows': PPR, 'styles': styles, 'categories': categs, 'attributes': attributes, + 'compute_currency': compute_currency, 'keep': keep, 'style_in_product': lambda style, product: style.id in [s.id for s in product.website_style_ids], 'attrib_encode': lambda attribs: werkzeug.url_encode([('attrib',i) for i in attribs]), } - return request.website.render("website_sale.products", values) @http.route(['/shop/product/'], type='http', auth="public", website=True) @@ -194,7 +217,6 @@ class website_sale(http.Controller): cr, uid, context, pool = request.cr, request.uid, request.context, request.registry category_obj = pool['product.public.category'] template_obj = pool['product.template'] - currency_obj = pool['res.currency'] context.update(active_id=product.id) @@ -215,16 +237,6 @@ class website_sale(http.Controller): context['pricelist'] = int(self.get_pricelist()) product = template_obj.browse(cr, uid, int(product), context=context) - attribute_value_ids = [] - 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: - price = currency_obj.compute(cr, uid, company_currency_id, currency_id, p.lst_price) - attribute_value_ids.append([p.id, map(int, p.attribute_value_ids), p.price, price]) - else: - attribute_value_ids = [[p.id, map(int, p.attribute_value_ids), p.price, p.lst_price] for p in product.product_variant_ids] - values = { 'search': search, 'category': category, @@ -235,7 +247,7 @@ class website_sale(http.Controller): 'category_list': category_list, 'main_object': product, 'product': product, - 'attribute_value_ids': attribute_value_ids + 'get_attribute_value_ids': self.get_attribute_value_ids } return request.website.render("website_sale.product", values) @@ -262,8 +274,13 @@ class website_sale(http.Controller): cr, uid, context, pool = request.cr, request.uid, request.context, request.registry order = request.website.sale_get_order() + from_currency = pool.get('product.price.type')._get_field_currency(cr, uid, 'list_price', context) + to_currency = order.pricelist_id.currency_id + compute_currency = lambda price: pool['res.currency']._compute(cr, uid, from_currency, to_currency, price, context=context) + values = { 'order': order, + 'compute_currency': compute_currency, 'suggested_products': [], } if order: @@ -274,31 +291,22 @@ class website_sale(http.Controller): return request.website.render("website_sale.cart", values) @http.route(['/shop/cart/update'], type='http', auth="public", methods=['POST'], website=True) - def cart_update(self, product_id, add_qty=1, set_qty=0, goto_shop=None, **kw): - cr, uid, context, pool = request.cr, request.uid, request.context, request.registry - prod_obj = pool['product.product'] - - order = request.website.sale_get_order(force_create=1) - line_id, quantity = order._cart_update(product_id=int(product_id), add_qty=int(add_qty), set_qty=int(set_qty)) - - if goto_shop: - return request.redirect("/shop/product/%s" % slug(prod_obj.browse(cr, uid, product_id).product_tmpl_id)) - else: - return request.redirect("/shop/cart") + def cart_update(self, product_id, add_qty=1, set_qty=0, **kw): + cr, uid, context = request.cr, request.uid, request.context + request.website.sale_get_order(force_create=1)._cart_update(product_id=int(product_id), add_qty=float(add_qty), set_qty=float(set_qty)) + return request.redirect("/shop/cart") @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 = order._cart_update(product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty) + value = 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, - 'cart_quantity': order.cart_quantity, - 'website_sale.total': request.website._render("website_sale.total", { - 'website_sale_order': request.website.sale_get_order() - }) - } + value['cart_quantity'] = order.cart_quantity + value['website_sale.total'] = request.website._render("website_sale.total", { + 'website_sale_order': request.website.sale_get_order() + }) + return value #------------------------------------------------------ # Checkout @@ -461,6 +469,7 @@ class website_sale(http.Controller): if partner_id and request.website.partner_id.id != partner_id: orm_partner.write(cr, SUPERUSER_ID, [partner_id], billing_info, context=context) else: + # create partner partner_id = orm_partner.create(cr, SUPERUSER_ID, billing_info, context=context) # create a new shipping partner @@ -477,7 +486,9 @@ class website_sale(http.Controller): 'partner_invoice_id': partner_id, 'partner_shipping_id': shipping_id or partner_id } - order_info.update(registry.get('sale.order').onchange_partner_id(cr, SUPERUSER_ID, [], partner_id, context=context)['value']) + order_info.update(order_obj.onchange_partner_id(cr, SUPERUSER_ID, [], partner_id, context=context)['value']) + order_info.update(order_obj.onchange_delivery_id(cr, SUPERUSER_ID, [], order.company_id.id, partner_id, shipping_id, None, context=context)['value']) + order_info.pop('user_id') order_obj.write(cr, SUPERUSER_ID, [order.id], order_info, context=context) @@ -517,6 +528,8 @@ class website_sale(http.Controller): self.checkout_form_save(values["checkout"]) request.session['sale_last_order_id'] = order.id + request.website.sale_get_order(update_pricelist=True, context=context) + return request.redirect("/shop/payment") #------------------------------------------------------