refactor: batch no filter handling
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 884cb1e..244f3e2 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -7,7 +7,16 @@
import frappe
from frappe import ValidationError, _
from frappe.model.naming import make_autoname
-from frappe.utils import add_days, cint, cstr, flt, get_link_to_form, getdate, nowdate
+from frappe.utils import (
+ add_days,
+ cint,
+ cstr,
+ flt,
+ get_link_to_form,
+ getdate,
+ nowdate,
+ safe_json_loads,
+)
from erpnext.controllers.stock_controller import StockController
from erpnext.stock.get_item_details import get_reserved_qty_for_so
@@ -566,7 +575,8 @@
@frappe.whitelist()
def auto_fetch_serial_number(qty, item_code, warehouse,
posting_date=None, batch_nos=None, for_doctype=None, exclude_sr_nos=None):
- filters = { "item_code": item_code, "warehouse": warehouse }
+
+ filters = frappe._dict({"item_code": item_code, "warehouse": warehouse})
if exclude_sr_nos is None:
exclude_sr_nos = []
@@ -574,13 +584,14 @@
exclude_sr_nos = get_serial_nos(clean_serial_no_string("\n".join(exclude_sr_nos)))
if batch_nos:
- try:
- filters["batch_no"] = json.loads(batch_nos) if (type(json.loads(batch_nos)) == list) else [json.loads(batch_nos)]
- except Exception:
- filters["batch_no"] = [batch_nos]
+ batch_nos = safe_json_loads(batch_nos)
+ if isinstance(batch_nos, list):
+ filters.batch_no = batch_nos
+ elif isinstance(batch_nos, str):
+ filters.batch_no = [batch_nos]
if posting_date:
- filters["expiry_date"] = posting_date
+ filters.expiry_date = posting_date
serial_numbers = []
if for_doctype == 'POS Invoice':