# -*- coding: utf-8 -*- import werkzeug from openerp import SUPERUSER_ID from openerp import http from openerp.http import request from openerp.tools.translate import _ from openerp.addons.website.models.website import slug PPG = 20 # Products Per Page PPR = 4 # Products Per Row class web_site_sale_extend(http.Controller): def get_pricelist(self): return get_pricelist() def get_attribute_value_ids_ext(self, product): sale_order_id = request.session.get('sale_last_order_id') 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, p.qty_available]) else: attribute_value_ids = [[p.id, map(int, p.attribute_value_ids), p.price, p.lst_price, p.qty_available] for p in product.product_variant_ids] return attribute_value_ids @http.route(['/shop/product/'], type='http', auth="public", website=True) def product(self, product, category='', search='', **kwargs): cr, uid, context, pool = request.cr, request.uid, request.context, request.registry category_obj = pool['product.public.category'] template_obj = pool['product.template'] context.update(active_id=product.id) if category: category = category_obj.browse(cr, uid, int(category), context=context) 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]) 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) category_list = sorted(category_list, key=lambda category: category[1]) pricelist = self.get_pricelist() 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) if not context.get('pricelist'): context['pricelist'] = int(self.get_pricelist()) product = template_obj.browse(cr, uid, int(product), context=context) values = { 'search': search, 'category': category, 'pricelist': pricelist, 'attrib_values': attrib_values, 'compute_currency': compute_currency, 'attrib_set': attrib_set, 'keep': keep, 'category_list': category_list, 'main_object': product, 'product': product, 'get_attribute_value_ids': self.get_attribute_value_ids_ext } return request.website.render("website_sale.product", values) @http.route(['/shop/cart/get_added_qty_product_json'], type='json', auth="public", methods=['POST'], website=True) def cart_stock_for_product_json(self, product_id): cr, uid, context = request.cr, request.uid, request.context qty = request.website.added_to_cart_product_qty_variant(product_id) return qty; class QueryURL(object): def __init__(self, path='', **args): self.path = path self.args = args def __call__(self, path=None, **kw): if not path: path = self.path for k,v in self.args.items(): kw.setdefault(k,v) l = [] for k,v in kw.items(): if v: 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 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 # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: