Merge pull request #30461 from nextchamp-saqib/fix-asset-warehouse-validation
fix(asset): do not validate warehouse on asset purchase
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 57bc0a7..e6a46d0 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -249,8 +249,9 @@
def validate_warehouse(self, for_validate=True):
if self.update_stock and for_validate:
+ stock_items = self.get_stock_items()
for d in self.get("items"):
- if not d.warehouse:
+ if not d.warehouse and d.item_code in stock_items:
frappe.throw(
_(
"Row No {0}: Warehouse is required. Please set a Default Warehouse for Item {1} and Company {2}"
diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py
index f681b34..e759ad0 100644
--- a/erpnext/assets/doctype/asset/test_asset.py
+++ b/erpnext/assets/doctype/asset/test_asset.py
@@ -68,7 +68,7 @@
def test_item_exists(self):
asset = create_asset(item_code="MacBook", do_not_save=1)
- self.assertRaises(frappe.DoesNotExistError, asset.save)
+ self.assertRaises(frappe.ValidationError, asset.save)
def test_validate_item(self):
asset = create_asset(item_code="MacBook Pro", do_not_save=1)
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 72ac1b3..3a20d3f 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -1267,17 +1267,9 @@
stock_items = []
item_codes = list(set(item.item_code for item in self.get("items")))
if item_codes:
- stock_items = [
- r[0]
- for r in frappe.db.sql(
- """
- select name from `tabItem`
- where name in (%s) and is_stock_item=1
- """
- % (", ".join(["%s"] * len(item_codes)),),
- item_codes,
- )
- ]
+ stock_items = frappe.db.get_values(
+ "Item", {"name": ["in", item_codes], "is_stock_item": 1}, pluck="name", cache=True
+ )
return stock_items