From d92f9330fac5b842230317eb963d53403b9e3ae9 Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Thu, 23 Jan 2025 14:32:39 +0100 Subject: [PATCH] fix: get default stock uom (#45384) Co-authored-by: Sagar Vora --- .../opening_invoice_creation_tool.py | 3 ++- erpnext/regional/italy/utils.py | 3 ++- erpnext/stock/utils.py | 23 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py index e71d322084ee..77d58ea0c214 100644 --- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py +++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py @@ -11,6 +11,7 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( get_accounting_dimensions, ) +from erpnext.stock.utils import get_default_stock_uom class OpeningInvoiceCreationTool(Document): @@ -172,7 +173,7 @@ def get_item_dict(): income_expense_account_field = ( "income_account" if row.party_type == "Customer" else "expense_account" ) - default_uom = frappe.db.get_single_value("Stock Settings", "stock_uom") or "Nos" + default_uom = get_default_stock_uom() rate = flt(row.outstanding_amount) / flt(row.qty) item_dict = frappe._dict( diff --git a/erpnext/regional/italy/utils.py b/erpnext/regional/italy/utils.py index a7ccaf44e7f3..6a0963e5b30a 100644 --- a/erpnext/regional/italy/utils.py +++ b/erpnext/regional/italy/utils.py @@ -8,6 +8,7 @@ from erpnext.controllers.taxes_and_totals import ItemWiseTaxDetail, get_itemised_tax from erpnext.regional.italy import state_codes +from erpnext.stock.utils import get_default_stock_uom def update_itemised_tax_data(doc): @@ -159,7 +160,7 @@ def get_invoice_summary(items, taxes): rate=reference_row.tax_amount, qty=1.0, amount=reference_row.tax_amount, - stock_uom=frappe.db.get_single_value("Stock Settings", "stock_uom") or "Nos", + stock_uom=get_default_stock_uom(), tax_rate=tax.rate, tax_amount=(reference_row.tax_amount * tax.rate) / 100, net_amount=reference_row.tax_amount, diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index c8e520d2c2ba..23b828226d12 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -658,3 +658,26 @@ def get_combine_datetime(posting_date, posting_time): posting_time = (datetime.datetime.min + posting_time).time() return datetime.datetime.combine(posting_date, posting_time).replace(microsecond=0) + + +@frappe.request_cache +def get_default_stock_uom() -> str | None: + if default_uom := frappe.get_cached_value("Stock Settings", None, "stock_uom"): + return default_uom + + acceptable_default_uoms = dict.fromkeys( + ( + "Nos", + # In the past, we used to create translated UOMs during initial setup. + # These could either be in the system language... + _("Nos", frappe.get_system_settings("language")), + # or the current user's language + _("Nos"), + ) + ) + + available_default_uoms = frappe.db.get_values( + "UOM", {"name": ("in", tuple(acceptable_default_uoms))}, pluck="name" + ) + + return next((uom for uom in acceptable_default_uoms if uom in available_default_uoms), None)