From b1dfbbe85e05db3e6e093aa8fb62880cc749d94b Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 31 Mar 2025 15:53:55 +0530 Subject: [PATCH] feat: allow UOMs to select for which converstion rate defined in item master --- erpnext/controllers/queries.py | 29 +++++++++++++++++++ erpnext/public/js/controllers/transaction.js | 13 +++++++++ .../stock_settings/stock_settings.json | 18 ++++++++++-- .../doctype/stock_settings/stock_settings.py | 1 + 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index d2563aadf15..aea2ac2b9f5 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -905,3 +905,32 @@ def get_filtered_child_rows(doctype, txt, searchfield, start, page_len, filters) ) return query.run(as_dict=False) + + +@frappe.whitelist() +@frappe.validate_and_sanitize_search_inputs +def get_item_uom_query(doctype, txt, searchfield, start, page_len, filters): + if frappe.db.get_single_value("Stock Settings", "allow_uom_with_conversion_rate_defined_in_item"): + query_filters = {"parent": filters.get("item_code")} + + if txt: + query_filters["uom"] = ["like", f"%{txt}%"] + + return frappe.get_all( + "UOM Conversion Detail", + filters=query_filters, + fields=["uom", "conversion_factor"], + limit_start=start, + limit_page_length=page_len, + order_by="idx", + as_list=1, + ) + + return frappe.get_all( + "UOM", + filters={"name": ["like", f"%{txt}%"]}, + fields=["name"], + limit_start=start, + limit_page_length=page_len, + as_list=1, + ) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 443503e19db..6003b893ef0 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -150,6 +150,19 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe }); } + if (this.frm.fields_dict["items"].grid.get_field("uom")) { + this.frm.set_query("uom", "items", function(doc, cdt, cdn) { + let row = locals[cdt][cdn]; + + return { + query: "erpnext.controllers.queries.get_item_uom_query", + filters: { + "item_code": row.item_code + } + }; + }); + } + if( this.frm.docstatus < 2 && this.frm.fields_dict["payment_terms_template"] diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.json b/erpnext/stock/doctype/stock_settings/stock_settings.json index 3f2e8bab4aa..306456ecc45 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.json +++ b/erpnext/stock/doctype/stock_settings/stock_settings.json @@ -22,6 +22,8 @@ "allow_to_edit_stock_uom_qty_for_sales", "column_break_lznj", "allow_to_edit_stock_uom_qty_for_purchase", + "section_break_ylhd", + "allow_uom_with_conversion_rate_defined_in_item", "stock_validations_tab", "section_break_9", "over_delivery_receipt_allowance", @@ -498,6 +500,17 @@ { "fieldname": "column_break_wslv", "fieldtype": "Column Break" + }, + { + "fieldname": "section_break_ylhd", + "fieldtype": "Section Break" + }, + { + "default": "0", + "description": "If enabled, the system will allow selecting UOMs in sales and purchase transactions only if the conversion rate is set in the item master.", + "fieldname": "allow_uom_with_conversion_rate_defined_in_item", + "fieldtype": "Check", + "label": "Allow UOM with Conversion Rate Defined in Item" } ], "icon": "icon-cog", @@ -505,7 +518,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2025-02-28 15:08:35.938840", + "modified": "2025-03-31 15:34:20.752065", "modified_by": "Administrator", "module": "Stock", "name": "Stock Settings", @@ -526,8 +539,9 @@ } ], "quick_entry": 1, + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "ASC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index 850b4fa14a7..55ecdb1992f 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.py +++ b/erpnext/stock/doctype/stock_settings/stock_settings.py @@ -33,6 +33,7 @@ class StockSettings(Document): allow_partial_reservation: DF.Check allow_to_edit_stock_uom_qty_for_purchase: DF.Check allow_to_edit_stock_uom_qty_for_sales: DF.Check + allow_uom_with_conversion_rate_defined_in_item: DF.Check auto_create_serial_and_batch_bundle_for_outward: DF.Check auto_indent: DF.Check auto_insert_price_list_rate_if_missing: DF.Check