refactor: item filters are linked with group filters

This commit is contained in:
ruthra kumar 2022-04-04 14:52:19 +05:30
parent 7558f1b078
commit e324d668d3
2 changed files with 63 additions and 23 deletions

View File

@ -32,12 +32,6 @@ function get_filters() {
"fieldtype": "Link",
"width": 100,
"options": "Customer Group",
"get_query": () => {
return {
filters: { 'is_group': 0 }
}
}
},
{
"fieldname":"customer",
@ -46,13 +40,14 @@ function get_filters() {
"width": 100,
"options": "Customer",
"get_query": () => {
filters = {
'disabled': 0
var customer_group = frappe.query_report.get_filter_value('customer_group');
return{
"query": "erpnext.selling.report.payment_terms_status_for_sales_order.payment_terms_status_for_sales_order.get_customers_or_items",
"filters": [
['Customer', 'disabled', '=', '0'],
['Customer Group','name', '=', customer_group]
]
}
if(frappe.query_report.get_filter_value("customer_group") != "") {
filters['customer_group'] = frappe.query_report.get_filter_value("customer_group");
}
return { 'filters': filters };
}
},
{
@ -61,11 +56,6 @@ function get_filters() {
"fieldtype": "Link",
"width": 100,
"options": "Item Group",
"get_query": () => {
return {
filters: { 'is_group': 0 }
}
}
},
{
@ -75,13 +65,14 @@ function get_filters() {
"width": 100,
"options": "Item",
"get_query": () => {
filters = {
'disabled': 0
var item_group = frappe.query_report.get_filter_value('item_group');
return{
"query": "erpnext.selling.report.payment_terms_status_for_sales_order.payment_terms_status_for_sales_order.get_customers_or_items",
"filters": [
['Item', 'disabled', '=', '0'],
['Item Group','name', '=', item_group]
]
}
if(frappe.query_report.get_filter_value("item_group") != "") {
filters['item_group'] = frappe.query_report.get_filter_value("item_group");
}
return { 'filters': filters };
}
}
]

View File

@ -73,6 +73,55 @@ def get_columns():
return columns
def get_descendants_of(doctype, group_name):
group_doc = qb.DocType(doctype)
# get lft and rgt of group node
lft, rgt = (
qb.from_(group_doc).select(group_doc.lft, group_doc.rgt).where(group_doc.name == group_name)
).run()[0]
# get all children of group node
query = (
qb.from_(group_doc).select(group_doc.name).where((group_doc.lft >= lft) & (group_doc.rgt <= rgt))
)
child_nodes = []
for x in query.run():
child_nodes.append(x[0])
return child_nodes
@frappe.whitelist()
@frappe.validate_and_sanitize_search_inputs
def get_customers_or_items(doctype, txt, searchfield, start, page_len, filters):
filter_list = []
if isinstance(filters, list):
for item in filters:
if item[0] == doctype:
filter_list.append(item)
elif item[0] == "Customer Group":
if item[3] != "":
filter_list.append(
[doctype, "customer_group", "in", get_descendants_of("Customer Group", item[3])]
)
elif item[0] == "Item Group":
if item[3] != "":
filter_list.append([doctype, "item_group", "in", get_descendants_of("Item Group", item[3])])
if searchfield and txt:
filter_list.append([doctype, searchfield, "like", "%%%s%%" % txt])
return frappe.desk.reportview.execute(
doctype,
filters=filter_list,
fields=["name", "customer_group"] if doctype == "Customer" else ["name", "item_group"],
limit_start=start,
limit_page_length=page_len,
as_list=True,
)
def get_conditions(filters):
"""
Convert filter options to conditions used in query