From 288aad6f5dbd6865da6d58cc6c66032e6347edc6 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 31 Mar 2025 15:53:55 +0530 Subject: [PATCH 1/2] feat: allow UOMs to select for which converstion rate defined in item master (cherry picked from commit b1dfbbe85e05db3e6e093aa8fb62880cc749d94b) # Conflicts: # erpnext/stock/doctype/stock_settings/stock_settings.json --- erpnext/controllers/queries.py | 29 +++++++++++++++++++ erpnext/public/js/controllers/transaction.js | 13 +++++++++ .../stock_settings/stock_settings.json | 22 ++++++++++++++ .../doctype/stock_settings/stock_settings.py | 1 + 4 files changed, 65 insertions(+) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index e9177f84fcc..670d46453f9 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -898,3 +898,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 6423fd78fe9..8b7487c612e 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 1987bc8642d..b416bb83aed 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", @@ -490,6 +492,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", @@ -497,7 +510,11 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], +<<<<<<< HEAD "modified": "2025-02-28 16:08:35.938840", +======= + "modified": "2025-03-31 15:34:20.752065", +>>>>>>> b1dfbbe85e (feat: allow UOMs to select for which converstion rate defined in item master) "modified_by": "Administrator", "module": "Stock", "name": "Stock Settings", @@ -518,7 +535,12 @@ } ], "quick_entry": 1, +<<<<<<< HEAD "sort_field": "modified", +======= + "row_format": "Dynamic", + "sort_field": "creation", +>>>>>>> b1dfbbe85e (feat: allow UOMs to select for which converstion rate defined in item master) "sort_order": "ASC", "states": [], "track_changes": 1 diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index 8589004c8bf..4de8057a006 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 From 2b854377b15a2a701480baf5ec85010cd5ef0061 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 31 Mar 2025 20:43:34 +0530 Subject: [PATCH 2/2] chore: fix conflicts --- erpnext/stock/doctype/stock_settings/stock_settings.json | 9 --------- 1 file changed, 9 deletions(-) diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.json b/erpnext/stock/doctype/stock_settings/stock_settings.json index b416bb83aed..551104688a2 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.json +++ b/erpnext/stock/doctype/stock_settings/stock_settings.json @@ -510,11 +510,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], -<<<<<<< HEAD - "modified": "2025-02-28 16:08:35.938840", -======= "modified": "2025-03-31 15:34:20.752065", ->>>>>>> b1dfbbe85e (feat: allow UOMs to select for which converstion rate defined in item master) "modified_by": "Administrator", "module": "Stock", "name": "Stock Settings", @@ -535,12 +531,7 @@ } ], "quick_entry": 1, -<<<<<<< HEAD - "sort_field": "modified", -======= - "row_format": "Dynamic", "sort_field": "creation", ->>>>>>> b1dfbbe85e (feat: allow UOMs to select for which converstion rate defined in item master) "sort_order": "ASC", "states": [], "track_changes": 1