blob: 01bde2984c1ecec82f2217025e9850dc2f9aee40 [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
marination7d1df9d2021-08-13 14:23:52 +05306import json
marination0dadf532021-06-29 11:22:27 +05307from frappe.utils import cint
8
marination335a2372021-08-12 19:01:10 +05309from erpnext.e_commerce.product_data_engine.query import ProductQuery
10from erpnext.e_commerce.product_data_engine.filters import ProductFiltersBuilder
marination80fbe162021-08-17 00:48:36 +053011from erpnext.setup.doctype.item_group.item_group import get_child_groups_for_website
marination0dadf532021-06-29 11:22:27 +053012
13@frappe.whitelist(allow_guest=True)
marination7d1df9d2021-08-13 14:23:52 +053014def get_product_filter_data(query_args=None):
marination80fbe162021-08-17 00:48:36 +053015 """
16 Returns filtered products and discount filters.
17 :param query_args (dict): contains filters to get products list
18
19 Query Args filters:
20 search (str): Search Term.
21 field_filters (dict): Keys include item_group, brand, etc.
22 attribute_filters(dict): Keys include Color, Size, etc.
23 start (int): Offset items by
24 item_group (str): Valid Item Group
25 from_filters (bool): Set as True to jump to page 1
26 """
marination7d1df9d2021-08-13 14:23:52 +053027 if isinstance(query_args, str):
28 query_args = json.loads(query_args)
29
30 if query_args:
31 search = query_args.get("search")
32 field_filters = query_args.get("field_filters", {})
33 attribute_filters = query_args.get("attribute_filters", {})
34 start = cint(query_args.start) if query_args.get("start") else 0
35 item_group = query_args.get("item_group")
36 from_filters = query_args.get("from_filters")
marination0dadf532021-06-29 11:22:27 +053037 else:
marinationc0811c42021-07-08 19:34:07 +053038 search, attribute_filters, item_group, from_filters = None, None, None, None
marination0dadf532021-06-29 11:22:27 +053039 field_filters = {}
40 start = 0
41
marination7d1df9d2021-08-13 14:23:52 +053042 # if new filter is checked, reset start to show filtered items from page 1
marinationc0811c42021-07-08 19:34:07 +053043 if from_filters:
marinationc0811c42021-07-08 19:34:07 +053044 start = 0
45
marination0dadf532021-06-29 11:22:27 +053046 sub_categories = []
47 if item_group:
48 field_filters['item_group'] = item_group
marination80fbe162021-08-17 00:48:36 +053049 sub_categories = get_child_groups_for_website(item_group, immediate=True)
marination0dadf532021-06-29 11:22:27 +053050
51 engine = ProductQuery()
marination7d1df9d2021-08-13 14:23:52 +053052 try:
53 result = engine.query(
54 attribute_filters,
55 field_filters,
56 search_term=search,
57 start=start,
58 item_group=item_group
59 )
marination80fbe162021-08-17 00:48:36 +053060 except Exception:
marination7d1df9d2021-08-13 14:23:52 +053061 traceback = frappe.get_traceback()
62 frappe.log_error(traceback, frappe._("Product Engine Error"))
63 return {"exc": "Something went wrong!"}
marination0dadf532021-06-29 11:22:27 +053064
65 # discount filter data
66 filters = {}
67 discounts = result["discounts"]
68
69 if discounts:
70 filter_engine = ProductFiltersBuilder()
71 filters["discount_filters"] = filter_engine.get_discount_filters(discounts)
72
73 return {
74 "items": result["items"] or [],
75 "filters": filters,
76 "settings": engine.settings,
77 "sub_categories": sub_categories,
78 "items_count": result["items_count"]
marination82f8f3c2021-07-08 10:57:01 +053079 }
80
81@frappe.whitelist(allow_guest=True)
82def get_guest_redirect_on_action():
83 return frappe.db.get_single_value("E Commerce Settings", "redirect_on_action")