blob: 4f83f08ae71818278ebe7ae4654eab4cfc1f4c60 [file] [log] [blame]
marination0dadf532021-06-29 11:22:27 +05301# -*- coding: utf-8 -*-
2# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
3# For license information, please see license.txt
4
5import frappe
6from frappe.utils import cint
7
8from erpnext.e_commerce.product_query import ProductQuery
9from erpnext.e_commerce.filters import ProductFiltersBuilder
10from erpnext.setup.doctype.item_group.item_group import get_child_groups
11
12@frappe.whitelist(allow_guest=True)
13def get_product_filter_data():
14 """Get pre-rendered filtered products and discount filters on load."""
15 if frappe.form_dict:
16 search = frappe.form_dict.search
17 field_filters = frappe.parse_json(frappe.form_dict.field_filters)
18 attribute_filters = frappe.parse_json(frappe.form_dict.attribute_filters)
19 start = cint(frappe.parse_json(frappe.form_dict.start)) if frappe.form_dict.start else 0
20 item_group = frappe.form_dict.item_group
marinationc0811c42021-07-08 19:34:07 +053021 from_filters = frappe.parse_json(frappe.form_dict.from_filters)
marination0dadf532021-06-29 11:22:27 +053022 else:
marinationc0811c42021-07-08 19:34:07 +053023 search, attribute_filters, item_group, from_filters = None, None, None, None
marination0dadf532021-06-29 11:22:27 +053024 field_filters = {}
25 start = 0
26
marinationc0811c42021-07-08 19:34:07 +053027 if from_filters:
28 # if filter is checked, go to start
29 # and show filtered items from page 1
30 start = 0
31
marination0dadf532021-06-29 11:22:27 +053032 sub_categories = []
33 if item_group:
34 field_filters['item_group'] = item_group
35 sub_categories = get_child_groups(item_group)
36
37 engine = ProductQuery()
38 result = engine.query(attribute_filters, field_filters, search_term=search,
39 start=start, item_group=item_group)
40
41 # discount filter data
42 filters = {}
43 discounts = result["discounts"]
44
45 if discounts:
46 filter_engine = ProductFiltersBuilder()
47 filters["discount_filters"] = filter_engine.get_discount_filters(discounts)
48
49 return {
50 "items": result["items"] or [],
51 "filters": filters,
52 "settings": engine.settings,
53 "sub_categories": sub_categories,
54 "items_count": result["items_count"]
marination82f8f3c2021-07-08 10:57:01 +053055 }
56
57@frappe.whitelist(allow_guest=True)
58def get_guest_redirect_on_action():
59 return frappe.db.get_single_value("E Commerce Settings", "redirect_on_action")