[Enhancement] Allow Sidebar Menu record search using text from Item Name of a record (#10324)
* Search Record in Sidebar Menu Using Item Name for Order Page
* Test Case to create 2 Quotations with different Items
diff --git a/erpnext/controllers/website_list_for_contact.py b/erpnext/controllers/website_list_for_contact.py
index 04d1bc5..73badc2 100644
--- a/erpnext/controllers/website_list_for_contact.py
+++ b/erpnext/controllers/website_list_for_contact.py
@@ -18,8 +18,8 @@
"get_list": get_transaction_list
}
+
def get_transaction_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by="modified"):
- from frappe.www.list import get_list
user = frappe.session.user
key = None
@@ -45,16 +45,41 @@
filters.append((doctype, key, "in", parties))
if key:
- return post_process(doctype, get_list(doctype, txt,
- filters=filters, fields = "name",
- limit_start=limit_start, limit_page_length=limit_page_length,
- ignore_permissions=True,
- order_by = "modified desc"))
+ return post_process(doctype, get_list_for_transactions(doctype, txt,
+ filters=filters, fields="name",limit_start=limit_start,
+ limit_page_length=limit_page_length,ignore_permissions=True,
+ order_by="modified desc"))
else:
return []
- return post_process(doctype, get_list(doctype, txt, filters, limit_start, limit_page_length,
- fields="name", order_by = "modified desc"))
+ return post_process(doctype, get_list_for_transactions(doctype, txt, filters, limit_start, limit_page_length,
+ fields="name", order_by="modified desc"))
+
+def get_list_for_transactions(doctype, txt, filters, limit_start, limit_page_length=20, ignore_permissions=False,fields=None, order_by=None):
+ from frappe.www.list import get_list
+ meta = frappe.get_meta(doctype)
+ data = []
+ or_filters = []
+
+ for d in get_list(doctype, txt, filters=filters, fields="name", limit_start=limit_start,
+ limit_page_length=limit_page_length, ignore_permissions=True, order_by="modified desc"):
+ data.append(d)
+
+ if txt:
+ if meta.get_field('items'):
+ if meta.get_field('items').options:
+ child_doctype = meta.get_field('items').options
+ for item in frappe.get_all(child_doctype, {"item_name": ['like', "%" + txt + "%"]}):
+ child = frappe.get_doc(child_doctype, item.name)
+ or_filters.append([doctype, "name", "=", child.parent])
+
+ if or_filters:
+ for r in frappe.get_list(doctype, fields=fields,filters=filters, or_filters=or_filters, limit_start=limit_start,
+ limit_page_length=limit_page_length, ignore_permissions=ignore_permissions,
+ order_by=order_by):
+ data.append(r)
+
+ return data
def get_party_details(customers, suppliers):
if customers:
diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py
index c642c47..d7d84c7 100644
--- a/erpnext/selling/doctype/quotation/test_quotation.py
+++ b/erpnext/selling/doctype/quotation/test_quotation.py
@@ -84,6 +84,43 @@
self.assertEquals(quotation.get("items")[0].rate, rate_with_margin)
si.save()
+ def test_create_two_quotations(self):
+ from erpnext.stock.doctype.item.test_item import make_item
+
+ first_item = make_item("_Test Laptop",
+ {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC",
+ "cost_center": "_Test Cost Center - _TC"})
+
+ second_item = make_item("_Test CPU",
+ {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC",
+ "cost_center": "_Test Cost Center - _TC"})
+
+ qo_item1 = [
+ {
+ "item_code": first_item.item_code,
+ "warehouse": "",
+ "qty": 2,
+ "rate": 400,
+ "delivered_by_supplier": 1,
+ "supplier": '_Test Supplier'
+ }
+ ]
+
+ qo_item2 = [
+ {
+ "item_code": second_item.item_code,
+ "warehouse": "_Test Warehouse - _TC",
+ "qty": 2,
+ "rate": 300,
+ "conversion_factor": 1.0
+ }
+ ]
+
+ first_qo = make_quotation(item_list=qo_item1, do_not_submit=True)
+ first_qo.submit()
+ sec_qo = make_quotation(item_list=qo_item2, do_not_submit=True)
+ sec_qo.submit()
+
test_records = frappe.get_test_records('Quotation')
def get_quotation_dict(customer=None, item_code=None):
@@ -103,3 +140,41 @@
}
]
}
+
+
+def make_quotation(**args):
+ qo = frappe.new_doc("Quotation")
+ args = frappe._dict(args)
+ if args.transaction_date:
+ qo.transaction_date = args.transaction_date
+
+ qo.company = args.company or "_Test Company"
+ qo.customer = args.customer or "_Test Customer"
+ qo.currency = args.currency or "INR"
+ if args.selling_price_list:
+ qo.selling_price_list = args.selling_price_list
+
+ if "warehouse" not in args:
+ args.warehouse = "_Test Warehouse - _TC"
+
+ if args.item_list:
+ for item in args.item_list:
+ qo.append("items", item)
+
+ else:
+ qo.append("items", {
+ "item_code": args.item or args.item_code or "_Test Item",
+ "warehouse": args.warehouse,
+ "qty": args.qty or 10,
+ "uom": args.uom or None,
+ "rate": args.rate or 100
+ })
+
+ qo.delivery_date = add_days(qo.transaction_date, 10)
+
+ if not args.do_not_save:
+ qo.insert()
+ if not args.do_not_submit:
+ qo.submit()
+
+ return qo