self.table[(pos/PPR)+y2][(pos%PPR)+x2] = False
self.table[pos/PPR][pos%PPR] = {
'product': p, 'x':x, 'y': y,
- 'class': " ".join(map(lambda x: x.html_class, p.website_style_ids))
+ 'class': " ".join(map(lambda x: x.html_class or '', p.website_style_ids))
}
if index<=PPG:
maxy=max(maxy,y+(pos/PPR))
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>',
if category:
domain += [('product_variant_ids.public_categ_ids', 'child_of', int(category))]
- attrib_values = [map(int,v.split(",")) for v in request.httprequest.args.getlist('attrib') if v]
+ attrib_list = request.httprequest.args.getlist('attrib')
+ attrib_values = [map(int,v.split("-")) for v in attrib_list if v]
attrib_set = set([v[1] for v in attrib_values])
if attrib_values:
if attrib:
domain += [('attribute_line_ids.value_ids', 'in', ids)]
- attrib_query = set(["%s,%s" % (v[0],v[1]) for v in attrib_values])
- keep = QueryURL('/shop', category=category and int(category), search=search, attrib=attrib_query)
+ 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,
- 'category': category and int(category),
+ 'category': category,
'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)
context.update(active_id=product.id)
if category:
- category = category_obj.browse(request.cr, request.uid, int(category), context=request.context)
+ category = category_obj.browse(cr, uid, int(category), context=context)
- attrib_values = [map(int,v.split(",")) for v in request.httprequest.args.getlist('attrib') if v]
+ attrib_list = request.httprequest.args.getlist('attrib')
+ attrib_values = [map(int,v.split("-")) for v in attrib_list if v]
attrib_set = set([v[1] for v in attrib_values])
- attrib_query = set(["%s,%s" % (v[0],v[1]) for v in attrib_values])
- keep = QueryURL('/shop', category=category and category.id, search=search, attrib=attrib_query)
+ keep = QueryURL('/shop', category=category and category.id, search=search, attrib=attrib_list)
category_ids = category_obj.search(cr, uid, [], context=context)
category_list = category_obj.name_get(cr, uid, category_ids, context=context)
if not context.get('pricelist'):
context['pricelist'] = int(self.get_pricelist())
- product = template_obj.browse(request.cr, request.uid, int(product), context=context)
-
- optional_product_ids = []
- for p in product.optional_product_ids:
- ctx = context.copy()
- ctx.update(active_id=p.id)
- optional_product_ids.append(template_obj.browse(cr, uid, p.id, context=ctx))
+ product = template_obj.browse(cr, uid, int(product), context=context)
values = {
'search': search,
'category_list': category_list,
'main_object': product,
'product': product,
- 'optional_product_ids': optional_product_ids
+ 'get_attribute_value_ids': self.get_attribute_value_ids
}
return request.website.render("website_sale.product", values)
context=dict(context, mail_create_nosubcribe=True))
return werkzeug.utils.redirect(request.httprequest.referrer + "#comments")
+ @http.route(['/shop/pricelist'], type='http', auth="public", website=True)
+ def pricelist(self, promo, **post):
+ cr, uid, context = request.cr, request.uid, request.context
+ request.website.sale_get_order(code=promo, context=context)
+ return request.redirect("/shop/cart")
+
@http.route(['/shop/cart'], type='http', auth="public", website=True)
def cart(self, **post):
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,
- 'suggested_products': []
+ 'compute_currency': compute_currency,
+ 'suggested_products': [],
}
if order:
if not context.get('pricelist'):
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
- order = request.website.sale_get_order(force_create=1)
- if add_qty or set_qty:
- order._cart_update(product_id=int(product_id), add_qty=int(add_qty), set_qty=int(set_qty))
- if goto_shop:
- path = "/shop"
- l = list()
- for k,v in kw.items():
- if v and k in ["category", "search", "attrib"]:
- if isinstance(v, list) or isinstance(v, set):
- l.append(werkzeug.url_encode([(k,i) for i in v]))
- else:
- l.append(werkzeug.url_encode([(k,v)]))
- if l:
- path += '?' + '&'.join(l)
- return request.redirect(path)
- 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)
- 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
checkout.update(self.checkout_parse('shipping', data))
checkout["shipping_different"] = True
+ # Default search by user country
+ country_code = request.session['geoip'].get('country_code')
+ if country_code:
+ country_ids = request.registry.get('res.country').search(cr, uid, [('code', '=', country_code)], context=context)
+ if country_ids:
+ checkout['country_id'] = country_ids[0]
+
values = {
'countries': countries,
'states': states,
'checkout': checkout,
'shipping_different': checkout.get('shipping_different'),
'error': {},
+ 'has_check_vat': hasattr(registry['res.partner'], 'check_vat')
}
return values
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")
#------------------------------------------------------