diff --git a/av_tools/av_tools_hooks/trade_in.py b/av_tools/av_tools_hooks/trade_in.py
index 6800e00..6f40cb5 100644
--- a/av_tools/av_tools_hooks/trade_in.py
+++ b/av_tools/av_tools_hooks/trade_in.py
@@ -39,7 +39,7 @@ def validate_trade_in_serial_no_and_batch(doc, method):
)
)
else:
- serial_numbers = row.custom_trade_in_serial_no.split("\n")
+ serial_numbers = [s.strip() for s in row.custom_trade_in_serial_no.split("\n") if s.strip()]
if len(serial_numbers) != row.custom_trade_in_qty:
error_messages.append(
_(
@@ -52,6 +52,20 @@ def validate_trade_in_serial_no_and_batch(doc, method):
row.idx,
)
)
+ else:
+ for sn in serial_numbers:
+ existing_sn = frappe.db.get_value(
+ "Serial No", sn, ["name", "warehouse", "status"], as_dict=True
+ )
+ if existing_sn and (
+ existing_sn.get("warehouse") or existing_sn.get("status") == "Active"
+ ):
+ wh = existing_sn.get("warehouse") or "Active Stock"
+ error_messages.append(
+ _(
+ "Row {0} ({1}): Serial No {2} is already present in warehouse stock ({3})."
+ ).format(row.idx, row.custom_trade_in_item, sn, wh)
+ )
if error_messages:
frappe.throw(
title=_("Validation Errors"),