odoo/ext/clarico-addons/clarico_recently_viewed/controllers/main.py

74 lines
3.6 KiB
Python
Executable File

import odoo
from odoo import http
from odoo import fields
from odoo.http import request
from odoo.addons.website_sale.controllers.main import WebsiteSale
from odoo.addons.website_sale_wishlist.controllers.main import WebsiteSaleWishlist
class claricoRecentlyViewed(WebsiteSale):
@http.route(['/shop/product/<model("product.template"):product>'], type='http', auth="public", website=True)
def product(self, product, category='', search='', **post):
response = super(claricoRecentlyViewed, self).product(product=product, category=category, search=search, **post)
recently_viewed_product_ids = self.update_recently_viewed_items(product.id)
response.qcontext.update(active_id=product.id)
if request.session['recently_viewed_product_ids'] :
product = request.env['product.template'].search([('id','in',request.session['recently_viewed_product_ids'])])
response.qcontext['recently_viewed_product'] = product
return response
@http.route(['/shop/cart'], type='http', auth="public", website=True)
def cart(self, **post):
response = super(claricoRecentlyViewed, self).cart(**post)
recently_viewed_product_ids = request.session.get( 'recently_viewed_product_ids', False)
if recently_viewed_product_ids :
product = request.env['product.template'].search([('id','in',request.session['recently_viewed_product_ids'])])
response.qcontext['recently_viewed_product'] = product
return response
def update_recently_viewed_items(self,product_id):
recently_viewed_product_ids = request.session.get( 'recently_viewed_product_ids', False)
if recently_viewed_product_ids :
if product_id not in request.session['recently_viewed_product_ids'] :
tmp = recently_viewed_product_ids
tmp.append(product_id)
request.session['recently_viewed_product_ids'] = tmp
else :
request.session['recently_viewed_product_ids'] = [product_id]
return request.session['recently_viewed_product_ids']
class claricoWishlist_RecentlyViewed(WebsiteSaleWishlist):
def _get_compute_currency_and_context(self):
pricelist_context = dict(request.env.context)
pricelist = False
if not pricelist_context.get('pricelist'):
pricelist = request.website.get_current_pricelist()
pricelist_context['pricelist'] = pricelist.id
else:
pricelist = request.env['product.pricelist'].browse(pricelist_context['pricelist'])
from_currency = request.env.user.company_id.currency_id
to_currency = pricelist.currency_id
compute_currency = lambda price: from_currency.compute(price, to_currency)
return compute_currency, pricelist_context, pricelist
@http.route(['/shop/wishlist'], type='http', auth="public", website=True)
def get_wishlist(self, count=False, **kw):
response = super(claricoWishlist_RecentlyViewed, self).get_wishlist(count=count,**kw)
recently_viewed_product_ids = request.session.get('recently_viewed_product_ids', False)
compute_currency, pricelist_context, pricelist = self._get_compute_currency_and_context()
if recently_viewed_product_ids :
product = request.env['product.template'].search([('id','in',request.session['recently_viewed_product_ids'])])
response.qcontext['recently_viewed_product'] = product
response.qcontext['compute_currency'] = compute_currency
response.qcontext['pricelist'] = pricelist
return response