Merge pull request #51904 from frappe/mergify/bp/version-15-hotfix/pr-51900

fix: validation to check at-least one raw material for manufacture entry (backport #51900)
This commit is contained in:
rohitwaghchaure
2026-01-25 10:45:52 +05:30
committed by GitHub
2 changed files with 43 additions and 0 deletions

View File

@@ -243,6 +243,27 @@ class StockEntry(StockController):
self.reset_default_field_value("to_warehouse", "items", "t_warehouse")
self.validate_same_source_target_warehouse_during_material_transfer()
self.validate_raw_materials_exists()
def validate_raw_materials_exists(self):
if self.purpose not in ["Manufacture", "Repack", "Disassemble"]:
return
if frappe.db.get_single_value("Manufacturing Settings", "material_consumption"):
return
raw_materials = []
for row in self.items:
if row.s_warehouse:
raw_materials.append(row.item_code)
if not raw_materials:
frappe.throw(
_(
"At least one raw material item must be present in the stock entry for the type {0}"
).format(bold(self.purpose)),
title=_("Raw Materials Missing"),
)
def set_serial_batch_for_disassembly(self):
if self.purpose != "Disassemble":

View File

@@ -2232,6 +2232,28 @@ class TestStockEntry(FrappeTestCase):
se.save()
se.submit()
def test_raw_material_missing_validation(self):
original_value = frappe.db.get_single_value("Manufacturing Settings", "material_consumption")
frappe.db.set_single_value("Manufacturing Settings", "material_consumption", 0)
stock_entry = make_stock_entry(
item_code="_Test Item",
qty=1,
target="_Test Warehouse - _TC",
do_not_save=True,
)
stock_entry.purpose = "Manufacture"
stock_entry.stock_entry_type = "Manufacture"
stock_entry.items[0].is_finished_item = 1
self.assertRaises(
frappe.ValidationError,
stock_entry.save,
)
frappe.db.set_single_value("Manufacturing Settings", "material_consumption", original_value)
def make_serialized_item(**args):
args = frappe._dict(args)