57 lines
2.1 KiB
Python
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),
|
|
}
|
|
)
|