From e1dbbb8e11a9c4486e46277828eda322f189891b 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 --- erpnext/controllers/queries.py | 31 ++++++++++++++++++- erpnext/public/js/controllers/transaction.js | 13 ++++++++ .../stock_settings/stock_settings.json | 16 +++++++++- .../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 f6ac30e940f..6af4b76ee25 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -798,7 +798,7 @@ def get_tax_template(doctype, txt, searchfield, start, page_len, filters): company = filters.get("company") taxes = item_doc.taxes or [] - while not taxes and item_group: # @dokos + while not taxes and item_group: # @dokos item_group_doc = frappe.get_cached_doc("Item Group", item_group) taxes += item_group_doc.taxes or [] item_group = item_group_doc.parent_item_group @@ -928,3 +928,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 17bd982ecbc..34dd64da52f 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -158,6 +158,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 5e09b2f1ba8..86f47b654e7 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": "uil uil-setting", @@ -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,6 +539,7 @@ } ], "quick_entry": 1, + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "ASC", "states": [], diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index 52969e09e40..8986887b677 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.py +++ b/erpnext/stock/doctype/stock_settings/stock_settings.py @@ -32,6 +32,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 -- GitLab From ea42d588fc32b150fea59aa6f83309ccb791f5ac Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Tue, 8 Apr 2025 08:24:26 +0200 Subject: [PATCH 2/2] fix: keep Dokos logic --- erpnext/public/js/controllers/transaction.js | 14 +------------- .../doctype/stock_settings/stock_settings.json | 5 +++-- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 34dd64da52f..acee914c40c 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -163,7 +163,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe let row = locals[cdt][cdn]; return { - query: "erpnext.controllers.queries.get_item_uom_query", + query: "erpnext.controllers.queries.get_uoms", // @dokos filters: { "item_code": row.item_code } @@ -259,18 +259,6 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe }); } - // @dokos - if (this.frm.fields_dict["items"].grid.get_field("uom")) { - this.frm.set_query("uom", "items", function(doc, cdt, cdn) { - const row = locals[cdt][cdn]; - return { - query: "erpnext.controllers.queries.get_uoms", - filters: { - "item_code": row.item_code - } - }; - }); - } } set_fields_onload_for_line_item() { diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.json b/erpnext/stock/doctype/stock_settings/stock_settings.json index 86f47b654e7..a2f8b289c4b 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.json +++ b/erpnext/stock/doctype/stock_settings/stock_settings.json @@ -506,11 +506,12 @@ "fieldtype": "Section Break" }, { - "default": "0", + "default": "1", "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" + "label": "Allow UOM with Conversion Rate Defined in Item", + "hidden": 1 } ], "icon": "uil uil-setting", -- GitLab