Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: search queries #33004

Merged
merged 1 commit into from
Nov 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -478,23 +478,26 @@ 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
from
`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,
)

Expand Down
12 changes: 6 additions & 6 deletions erpnext/stock/doctype/material_request/material_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 erpnext.buying.utils import check_on_hold_or_closed_status, validate_for_items
from erpnext.controllers.buying_controller import BuyingController
Expand Down Expand Up @@ -500,13 +500,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,
)

Expand Down
129 changes: 66 additions & 63 deletions erpnext/stock/doctype/quality_inspection/quality_inspection.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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 {page_len} offset {start}
""".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 {page_len} offset {start}
""".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.exist("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()
Expand Down