blob: bfada0faa7a930fd9fb40f0471321973d4f38727 [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
marination7d1df9d2021-08-13 14:23:52 +05305import json
marination9fb61ef2022-02-01 00:39:14 +05306
7import frappe
marination0dadf532021-06-29 11:22:27 +05308from frappe.utils import cint
9
marination335a2372021-08-12 19:01:10 +053010from erpnext.e_commerce.product_data_engine.filters import ProductFiltersBuilder
marination9fb61ef2022-02-01 00:39:14 +053011from erpnext.e_commerce.product_data_engine.query import ProductQuery
marination80fbe162021-08-17 00:48:36 +053012from erpnext.setup.doctype.item_group.item_group import get_child_groups_for_website
marination0dadf532021-06-29 11:22:27 +053013
marination9fb61ef2022-02-01 00:39:14 +053014
marination0dadf532021-06-29 11:22:27 +053015@frappe.whitelist(allow_guest=True)
marination7d1df9d2021-08-13 14:23:52 +053016def get_product_filter_data(query_args=None):
marination80fbe162021-08-17 00:48:36 +053017 """
Ankush Menat494bd9e2022-03-28 18:52:46 +053018 Returns filtered products and discount filters.
19 :param query_args (dict): contains filters to get products list
marination80fbe162021-08-17 00:48:36 +053020
Ankush Menat494bd9e2022-03-28 18:52:46 +053021 Query Args filters:
22 search (str): Search Term.
23 field_filters (dict): Keys include item_group, brand, etc.
24 attribute_filters(dict): Keys include Color, Size, etc.
25 start (int): Offset items by
26 item_group (str): Valid Item Group
27 from_filters (bool): Set as True to jump to page 1
marination80fbe162021-08-17 00:48:36 +053028 """
marination7d1df9d2021-08-13 14:23:52 +053029 if isinstance(query_args, str):
30 query_args = json.loads(query_args)
31
marination942dedd2021-09-03 17:50:14 +053032 query_args = frappe._dict(query_args)
marination7d1df9d2021-08-13 14:23:52 +053033 if query_args:
34 search = query_args.get("search")
35 field_filters = query_args.get("field_filters", {})
36 attribute_filters = query_args.get("attribute_filters", {})
37 start = cint(query_args.start) if query_args.get("start") else 0
38 item_group = query_args.get("item_group")
39 from_filters = query_args.get("from_filters")
marination0dadf532021-06-29 11:22:27 +053040 else:
marinationc0811c42021-07-08 19:34:07 +053041 search, attribute_filters, item_group, from_filters = None, None, None, None
marination0dadf532021-06-29 11:22:27 +053042 field_filters = {}
43 start = 0
44
marination7d1df9d2021-08-13 14:23:52 +053045 # if new filter is checked, reset start to show filtered items from page 1
marinationc0811c42021-07-08 19:34:07 +053046 if from_filters:
marinationc0811c42021-07-08 19:34:07 +053047 start = 0
48
marination0dadf532021-06-29 11:22:27 +053049 sub_categories = []
50 if item_group:
marination80fbe162021-08-17 00:48:36 +053051 sub_categories = get_child_groups_for_website(item_group, immediate=True)
marination0dadf532021-06-29 11:22:27 +053052
53 engine = ProductQuery()
marination7d1df9d2021-08-13 14:23:52 +053054 try:
55 result = engine.query(
Ankush Menat494bd9e2022-03-28 18:52:46 +053056 attribute_filters, field_filters, search_term=search, start=start, item_group=item_group
marination7d1df9d2021-08-13 14:23:52 +053057 )
marination80fbe162021-08-17 00:48:36 +053058 except Exception:
Rushabh Mehta548afba2022-05-02 15:04:26 +053059 frappe.log_error("Product query with filter failed")
marination7d1df9d2021-08-13 14:23:52 +053060 return {"exc": "Something went wrong!"}
marination0dadf532021-06-29 11:22:27 +053061
62 # discount filter data
63 filters = {}
64 discounts = result["discounts"]
65
66 if discounts:
67 filter_engine = ProductFiltersBuilder()
68 filters["discount_filters"] = filter_engine.get_discount_filters(discounts)
69
70 return {
71 "items": result["items"] or [],
72 "filters": filters,
73 "settings": engine.settings,
74 "sub_categories": sub_categories,
Ankush Menat494bd9e2022-03-28 18:52:46 +053075 "items_count": result["items_count"],
marination82f8f3c2021-07-08 10:57:01 +053076 }
77
Ankush Menat494bd9e2022-03-28 18:52:46 +053078
marination82f8f3c2021-07-08 10:57:01 +053079@frappe.whitelist(allow_guest=True)
80def get_guest_redirect_on_action():
Ankush Menat494bd9e2022-03-28 18:52:46 +053081 return frappe.db.get_single_value("E Commerce Settings", "redirect_on_action")