diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index 45a2ad43e7c1..309d321ba814 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -479,7 +479,7 @@ def get_rfq_containing_supplier(doctype, txt, searchfield, start, page_len, filt conditions += "and rfq.transaction_date = '{0}'".format(filters.get("transaction_date")) rfq_data = frappe.db.sql( - """ + f""" select distinct rfq.name, rfq.transaction_date, rfq.company @@ -487,15 +487,18 @@ def get_rfq_containing_supplier(doctype, txt, searchfield, start, page_len, filt `tabRequest for Quotation` rfq, `tabRequest for Quotation Supplier` rfq_supplier where rfq.name = rfq_supplier.parent - and rfq_supplier.supplier = '{0}' + and rfq_supplier.supplier = %(supplier)s and rfq.docstatus = 1 - and rfq.company = '{1}' - {2} + and rfq.company = %(company)s + {conditions} order by rfq.transaction_date ASC - limit %(page_len)s offset %(start)s """.format( - filters.get("supplier"), filters.get("company"), conditions - ), - {"page_len": page_len, "start": start}, + limit %(page_len)s offset %(start)s """, + { + "page_len": page_len, + "start": start, + "company": filters.get("company"), + "supplier": filters.get("supplier"), + }, as_dict=1, ) diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 3474ca0db683..c1201ef8f9ac 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -10,7 +10,7 @@ import frappe from frappe import _, msgprint from frappe.model.mapper import get_mapped_doc -from frappe.utils import cstr, flt, get_link_to_form, getdate, new_line_sep, nowdate +from frappe.utils import cint, cstr, flt, get_link_to_form, getdate, new_line_sep, nowdate from six import string_types from erpnext.buying.utils import check_on_hold_or_closed_status, validate_for_items @@ -504,13 +504,13 @@ def get_material_requests_based_on_supplier(doctype, txt, searchfield, start, pa and mr.per_ordered < 99.99 and mr.docstatus = 1 and mr.status != 'Stopped' - and mr.company = '{1}' - {2} + and mr.company = %s + {1} order by mr_item.item_code ASC - limit {3} offset {4} """.format( - ", ".join(["%s"] * len(supplier_items)), filters.get("company"), conditions, page_len, start + limit {2} offset {3} """.format( + ", ".join(["%s"] * len(supplier_items)), conditions, cint(page_len), cint(start) ), - tuple(supplier_items), + tuple(supplier_items) + (filters.get("company"),), as_dict=1, ) diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.py b/erpnext/stock/doctype/quality_inspection/quality_inspection.py index b9237bc4912b..9321c2c166b5 100644 --- a/erpnext/stock/doctype/quality_inspection/quality_inspection.py +++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.py @@ -6,7 +6,7 @@ from frappe import _ from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc -from frappe.utils import cint, flt +from frappe.utils import cint, cstr, flt from erpnext.stock.doctype.quality_inspection_template.quality_inspection_template import ( get_template_details, @@ -219,68 +219,71 @@ def calculate_mean(self, reading): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs def item_query(doctype, txt, searchfield, start, page_len, filters): - if filters.get("from"): - from frappe.desk.reportview import get_match_cond - - mcond = get_match_cond(filters["from"]) - cond, qi_condition = "", "and (quality_inspection is null or quality_inspection = '')" - - if filters.get("parent"): - if ( - filters.get("from") in ["Purchase Invoice Item", "Purchase Receipt Item"] - and filters.get("inspection_type") != "In Process" - ): - cond = """and item_code in (select name from `tabItem` where - inspection_required_before_purchase = 1)""" - elif ( - filters.get("from") in ["Sales Invoice Item", "Delivery Note Item"] - and filters.get("inspection_type") != "In Process" - ): - cond = """and item_code in (select name from `tabItem` where - inspection_required_before_delivery = 1)""" - elif filters.get("from") == "Stock Entry Detail": - cond = """and s_warehouse is null""" - - if filters.get("from") in ["Supplier Quotation Item"]: - qi_condition = "" - - return frappe.db.sql( - """ - SELECT item_code - FROM `tab{doc}` - WHERE parent=%(parent)s and docstatus < 2 and item_code like %(txt)s - {qi_condition} {cond} {mcond} - ORDER BY item_code limit {start}, {page_len} - """.format( - doc=filters.get("from"), - cond=cond, - mcond=mcond, - start=start, - page_len=page_len, - qi_condition=qi_condition, - ), - {"parent": filters.get("parent"), "txt": "%%%s%%" % txt}, - ) - - elif filters.get("reference_name"): - return frappe.db.sql( - """ - SELECT production_item - FROM `tab{doc}` - WHERE name = %(reference_name)s and docstatus < 2 and production_item like %(txt)s - {qi_condition} {cond} {mcond} - ORDER BY production_item - LIMIT {start}, {page_len} - """.format( - doc=filters.get("from"), - cond=cond, - mcond=mcond, - start=start, - page_len=page_len, - qi_condition=qi_condition, - ), - {"reference_name": filters.get("reference_name"), "txt": "%%%s%%" % txt}, - ) + from frappe.desk.reportview import get_match_cond + + from_doctype = cstr(filters.get("doctype")) + if not from_doctype or not frappe.db.exists("DocType", from_doctype): + return [] + + mcond = get_match_cond(from_doctype) + cond, qi_condition = "", "and (quality_inspection is null or quality_inspection = '')" + + if filters.get("parent"): + if ( + from_doctype in ["Purchase Invoice Item", "Purchase Receipt Item"] + and filters.get("inspection_type") != "In Process" + ): + cond = """and item_code in (select name from `tabItem` where + inspection_required_before_purchase = 1)""" + elif ( + from_doctype in ["Sales Invoice Item", "Delivery Note Item"] + and filters.get("inspection_type") != "In Process" + ): + cond = """and item_code in (select name from `tabItem` where + inspection_required_before_delivery = 1)""" + elif from_doctype == "Stock Entry Detail": + cond = """and s_warehouse is null""" + + if from_doctype in ["Supplier Quotation Item"]: + qi_condition = "" + + return frappe.db.sql( + """ + SELECT item_code + FROM `tab{doc}` + WHERE parent=%(parent)s and docstatus < 2 and item_code like %(txt)s + {qi_condition} {cond} {mcond} + ORDER BY item_code limit {page_len} offset {start} + """.format( + doc=from_doctype, + cond=cond, + mcond=mcond, + start=cint(start), + page_len=cint(page_len), + qi_condition=qi_condition, + ), + {"parent": filters.get("parent"), "txt": "%%%s%%" % txt}, + ) + + elif filters.get("reference_name"): + return frappe.db.sql( + """ + SELECT production_item + FROM `tab{doc}` + WHERE name = %(reference_name)s and docstatus < 2 and production_item like %(txt)s + {qi_condition} {cond} {mcond} + ORDER BY production_item + limit {page_len} offset {start} + """.format( + doc=from_doctype, + cond=cond, + mcond=mcond, + start=cint(start), + page_len=cint(page_len), + qi_condition=qi_condition, + ), + {"reference_name": filters.get("reference_name"), "txt": "%%%s%%" % txt}, + ) @frappe.whitelist()