obook/website_snippet_carousel_product/controllers/website.py

57 lines
2.1 KiB
Python

# Copyright 2020 Tecnativa - Alexandre Díaz
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
import time
from odoo import http
from odoo.http import request
from odoo.addons.website_sale.controllers.main import WebsiteSale
from odoo.addons.website.controllers.main import QueryURL
class ProductCarouselWebsiteSale(WebsiteSale):
@http.route(
["/website/render_product_carousel"],
type="json",
auth="public",
website=True,
csrf=False,
cache=30,
)
def render_product_carousel(
self, domain=False, limit=12, products_per_slide=4, **kwargs
):
# Snippet options only allow a maximium of 24 records
limit = min(limit, 24)
_pricelist_context, pricelist = self._get_pricelist_context()
order = 'website_published desc, create_date desc, website_sequence desc'
# Used this way to follow Odoo implementation
request.context = dict(
request.context,
pricelist=pricelist.id,
partner=request.env.user.partner_id)
records = request.env["product.template"].search(domain or [], limit=limit, order=order)
records_grouped = []
record_list = []
for index, record in enumerate(records, 1):
record_list.append(record)
if index % products_per_slide == 0:
records_grouped.append(record_list)
record_list = []
if any(record_list):
records_grouped.append(record_list)
template = "website_snippet_carousel_product.s_product_carousel_items"
return request.website.viewref(template).render(
{
"objects": records_grouped,
"keep": QueryURL("/shop"),
"pager": request.website.pager(
url="/shop", total=limit, scope=7, url_args=kwargs
),
"products_per_slide": products_per_slide,
"num_slides": len(records_grouped),
"uniqueId": "pc-%d" % int(time.time() * 1000),
}
)