feat: add product filters generator for item group and all products
diff --git a/erpnext/shopping_cart/filters.py b/erpnext/shopping_cart/filters.py
new file mode 100644
index 0000000..1e4f6e7
--- /dev/null
+++ b/erpnext/shopping_cart/filters.py
@@ -0,0 +1,75 @@
+# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+class ProductFiltersBuilder:
+ def __init__(self, item_group=None):
+ if not item_group or item_group == "Products Settings":
+ self.doc = frappe.get_doc("Products Settings")
+ else:
+ self.doc = frappe.get_doc("Item Group", item_group)
+
+ self.item_group = item_group
+
+ def get_field_filters(self):
+ filter_fields = [row.fieldname for row in self.doc.filter_fields]
+
+ meta = frappe.get_meta('Item')
+ fields = [df for df in meta.fields if df.fieldname in filter_fields]
+
+ filter_data = []
+ for df in fields:
+ filters = {}
+ if df.fieldtype == "Link":
+ if self.item_group:
+ filters['item_group'] = self.item_group
+
+ values = frappe.get_all("Item", fields=[df.fieldname], filters=filters, distinct="True", pluck=df.fieldname)
+ else:
+ doctype = df.get_link_doctype()
+
+ # apply enable/disable/show_in_website filter
+ meta = frappe.get_meta(doctype)
+
+ if meta.has_field('enabled'):
+ filters['enabled'] = 1
+ if meta.has_field('disabled'):
+ filters['disabled'] = 0
+ if meta.has_field('show_in_website'):
+ filters['show_in_website'] = 1
+
+ values = [d.name for d in frappe.get_all(doctype, filters)]
+
+ # Remove None
+ values = values.remove(None) if None in values else values
+ if values:
+ filter_data.append([df, values])
+
+ return filter_data
+
+ def get_attribute_fitlers(self):
+ attributes = [row.attribute for row in self.doc.filter_attributes]
+ attribute_docs = [
+ frappe.get_doc('Item Attribute', attribute) for attribute in attributes
+ ]
+
+ print(attribute_docs)
+
+ # # mark attribute values as checked if they are present in the request url
+ # if frappe.form_dict:
+ # for attr in attribute_docs:
+ # if attr.name in frappe.form_dict:
+ # value = frappe.form_dict[attr.name]
+ # if value:
+ # enabled_values = value.split(',')
+ # else:
+ # enabled_values = []
+
+ # for v in enabled_values:
+ # for item_attribute_row in attr.item_attribute_values:
+ # if v == item_attribute_row.attribute_value:
+ # item_attribute_row.checked = True
+
+ return attribute_docs