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/<int:page>',
'/shop/category/<model("product.public.category"):category>',
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)
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,
'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/<model("product.template"):product>'], type='http', auth="public", website=True)
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)
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,
'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)
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:
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
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
'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)
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")
#------------------------------------------------------