fix: remove supplier selection dialog when creating Purchase Order from Material Request (backport #53391) (#53476)

Co-authored-by: jeraldin2003 <jeraldin2003>
Co-authored-by: Nikhil Kothari <nik.kothari22@live.com>
Co-authored-by: Jeraldin P J <113301032+jeraldin2003@users.noreply.github.com>
Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
fix: remove supplier selection dialog when creating Purchase Order from Material Request (#53391)
This commit is contained in:
mergify[bot]
2026-03-16 04:33:36 +00:00
committed by GitHub
parent 9e40f87339
commit 36030483e5
2 changed files with 5 additions and 70 deletions

View File

@@ -410,33 +410,11 @@ frappe.ui.form.on("Material Request", {
}, },
make_purchase_order: function (frm) { make_purchase_order: function (frm) {
frappe.prompt( frappe.model.open_mapped_doc({
{ method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order",
label: __("For Default Supplier (Optional)"), frm: frm,
fieldname: "default_supplier", run_link_triggers: true,
fieldtype: "Link", });
options: "Supplier",
description: __(
"Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only."
),
get_query: () => {
return {
query: "erpnext.stock.doctype.material_request.material_request.get_default_supplier_query",
filters: { doc: frm.doc.name },
};
},
},
(values) => {
frappe.model.open_mapped_doc({
method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order",
frm: frm,
args: { default_supplier: values.default_supplier },
run_link_triggers: true,
});
},
__("Enter Supplier"),
__("Create")
);
}, },
make_request_for_quotation: function (frm) { make_request_for_quotation: function (frm) {

View File

@@ -18,7 +18,6 @@ from frappe.utils import cint, cstr, flt, get_link_to_form, getdate, new_line_se
from erpnext.buying.utils import check_on_hold_or_closed_status, validate_for_items from erpnext.buying.utils import check_on_hold_or_closed_status, validate_for_items
from erpnext.controllers.buying_controller import BuyingController from erpnext.controllers.buying_controller import BuyingController
from erpnext.manufacturing.doctype.work_order.work_order import get_item_details from erpnext.manufacturing.doctype.work_order.work_order import get_item_details
from erpnext.stock.doctype.item.item import get_item_defaults
from erpnext.stock.stock_balance import get_indented_qty, update_bin_qty from erpnext.stock.stock_balance import get_indented_qty, update_bin_qty
from erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom import ( from erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom import (
get_subcontracting_boms_for_finished_goods, get_subcontracting_boms_for_finished_goods,
@@ -501,17 +500,6 @@ def make_purchase_order(source_name, target_doc=None, args=None):
def postprocess(source, target_doc): def postprocess(source, target_doc):
target_doc.is_subcontracted = is_subcontracted target_doc.is_subcontracted = is_subcontracted
if frappe.flags.args and frappe.flags.args.default_supplier:
# items only for given default supplier
supplier_items = []
for d in target_doc.items:
if is_subcontracted and not d.item_code:
continue
default_supplier = get_item_defaults(d.item_code, target_doc.company).get("default_supplier")
if frappe.flags.args.default_supplier == default_supplier:
supplier_items.append(d)
target_doc.items = supplier_items
set_missing_values(source, target_doc) set_missing_values(source, target_doc)
def select_item(d): def select_item(d):
@@ -689,37 +677,6 @@ def get_material_requests_based_on_supplier(doctype, txt, searchfield, start, pa
return material_requests return material_requests
@frappe.whitelist()
@frappe.validate_and_sanitize_search_inputs
def get_default_supplier_query(doctype, txt, searchfield, start, page_len, filters):
doc = frappe.get_doc("Material Request", filters.get("doc"))
item_list = []
for d in doc.items:
item_list.append(d.item_code)
supplier = frappe.qb.DocType("Supplier")
item_default = frappe.qb.DocType("Item Default")
query = (
frappe.qb.from_(supplier)
.left_join(item_default)
.on(supplier.name == item_default.default_supplier)
.select(item_default.default_supplier)
.where(
(item_default.parent.isin(item_list))
& (item_default.default_supplier.notnull())
& (supplier[searchfield].like(f"%{txt}%"))
)
.offset(start)
.limit(page_len)
)
meta = frappe.get_meta("Supplier")
if meta.show_title_field_in_link and meta.title_field:
query = query.select(supplier[meta.title_field])
return query.run(as_dict=False)
@frappe.whitelist() @frappe.whitelist()
def make_supplier_quotation(source_name, target_doc=None): def make_supplier_quotation(source_name, target_doc=None):
def postprocess(source, target_doc): def postprocess(source, target_doc):