From d4700e5560d912504fc894d8a0730d4519759392 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 15:50:04 +0530 Subject: [PATCH] feat: add price list field to material request (backport #48425) (#48429) * feat: add price list field to material request Co-authored-by: Mihir Kandoi --- erpnext/public/js/controllers/buying.js | 3 ++- .../doctype/material_request/material_request.js | 12 +++++++++++- .../doctype/material_request/material_request.json | 12 ++++++++++-- .../doctype/material_request/material_request.py | 5 +++++ erpnext/stock/doctype/packed_item/packed_item.py | 7 +++---- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index 2b854d649d8..2162c000221 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -581,7 +581,8 @@ erpnext.buying.get_items_from_product_bundle = function(frm) { transaction_date: frm.doc.transaction_date || frm.doc.posting_date, ignore_pricing_rule: frm.doc.ignore_pricing_rule, doctype: frm.doc.doctype - } + }, + price_list: frm.doc.price_list, }, freeze: true, callback: function(r) { diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 18d8919a668..23b42b98b36 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -42,6 +42,15 @@ frappe.ui.form.on("Material Request", { }, }; }); + + frm.set_query("price_list", () => { + return { + filters: { + buying: 1, + enabled: 1, + }, + }; + }); }, onload: function (frm) { @@ -70,6 +79,7 @@ frappe.ui.form.on("Material Request", { }); erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); + frm.doc.price_list = frappe.defaults.get_default("buying_price_list"); }, company: function (frm) { @@ -245,7 +255,7 @@ frappe.ui.form.on("Material Request", { from_warehouse: item.from_warehouse, warehouse: item.warehouse, doctype: frm.doc.doctype, - buying_price_list: frappe.defaults.get_default("buying_price_list"), + buying_price_list: frm.doc.price_list, currency: frappe.defaults.get_default("Currency"), name: frm.doc.name, qty: item.qty || 1, diff --git a/erpnext/stock/doctype/material_request/material_request.json b/erpnext/stock/doctype/material_request/material_request.json index 8df61fe7fb8..4079288009a 100644 --- a/erpnext/stock/doctype/material_request/material_request.json +++ b/erpnext/stock/doctype/material_request/material_request.json @@ -16,6 +16,7 @@ "column_break_2", "transaction_date", "schedule_date", + "price_list", "amended_from", "warehouse_section", "scan_barcode", @@ -351,13 +352,19 @@ { "fieldname": "column_break_13", "fieldtype": "Column Break" + }, + { + "fieldname": "price_list", + "fieldtype": "Link", + "label": "Price List", + "options": "Price List" } ], "icon": "fa fa-ticket", "idx": 70, "is_submittable": 1, "links": [], - "modified": "2025-04-21 18:36:04.827917", + "modified": "2025-07-07 13:15:28.615984", "modified_by": "Administrator", "module": "Stock", "name": "Material Request", @@ -425,10 +432,11 @@ } ], "quick_entry": 1, + "row_format": "Dynamic", "search_fields": "status,transaction_date", "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", "states": [], "title_field": "title" -} \ No newline at end of file +} diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 73eac8f2d1a..8c80f907093 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -8,6 +8,7 @@ import json import frappe +import frappe.defaults from frappe import _, msgprint from frappe.model.mapper import get_mapped_doc from frappe.query_builder.functions import Sum @@ -45,6 +46,7 @@ class MaterialRequest(BuyingController): naming_series: DF.Literal["MAT-MR-.YYYY.-"] per_ordered: DF.Percent per_received: DF.Percent + price_list: DF.Link | None scan_barcode: DF.Data | None schedule_date: DF.Date | None select_print_heading: DF.Link | None @@ -151,6 +153,9 @@ class MaterialRequest(BuyingController): self.reset_default_field_value("set_warehouse", "items", "warehouse") self.reset_default_field_value("set_from_warehouse", "items", "from_warehouse") + if not self.price_list: + self.price_list = frappe.defaults.get_defaults().buying_price_list + def before_update_after_submit(self): self.validate_schedule_date() diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py index 85badeea5ff..3d3bfc7e010 100644 --- a/erpnext/stock/doctype/packed_item/packed_item.py +++ b/erpnext/stock/doctype/packed_item/packed_item.py @@ -340,9 +340,8 @@ def on_doctype_update(): @frappe.whitelist() -def get_items_from_product_bundle(row): +def get_items_from_product_bundle(row, price_list): row, items = json.loads(row), [] - defaults = frappe.defaults.get_defaults() bundled_items = get_product_bundle_items(row["item_code"]) for item in bundled_items: @@ -351,8 +350,8 @@ def get_items_from_product_bundle(row): "item_code": item.item_code, "qty": flt(row["quantity"]) * flt(item.qty), "conversion_rate": 1, - "price_list": defaults.buying_price_list, - "currency": defaults.currency, + "price_list": price_list, + "currency": frappe.defaults.get_defaults().currency, } ) items.append(get_item_details(row))