123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- # -*- 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/<model("product.template"):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:
|