fix: sync process loss percentage when fg qty changes

(cherry picked from commit beeffee8f9)

# Conflicts:
#	erpnext/stock/doctype/stock_entry/test_stock_entry.py
This commit is contained in:
Shllokkk
2026-07-21 15:04:42 +05:30
committed by Mergify
parent 1b992b85bb
commit f0e24e2f53
2 changed files with 54 additions and 1 deletions

View File

@@ -2648,7 +2648,7 @@ class StockEntry(StockController):
self.process_loss_qty = flt(
(flt(self.fg_completed_qty) * flt(self.process_loss_percentage)) / 100
)
elif self.process_loss_qty and not self.process_loss_percentage:
elif self.process_loss_qty and self.fg_completed_qty:
self.process_loss_percentage = flt(
(flt(self.process_loss_qty) / flt(self.fg_completed_qty)) * 100
)

View File

@@ -2730,7 +2730,60 @@ class TestStockEntry(FrappeTestCase):
frappe.delete_doc("Document Naming Rule", qc_naming_rule.name)
<<<<<<< HEAD
def make_serialized_item(**args):
=======
frappe.set_value("UOM", "Nos", "must_be_whole_number", 0)
fg_item = make_item("FG Item", properties={"is_stock_item": 1}).name
rm_item = make_item("RM Item", properties={"is_stock_item": 1}).name
scrap_item = make_item("Scrap Item", properties={"is_stock_item": 1}).name
warehouse = "_Test Warehouse - _TC"
make_stock_entry(item_code=rm_item, target=warehouse, qty=5, rate=10, purpose="Material Receipt")
bom_no = make_bom(
item=fg_item, raw_materials=[rm_item], scrap_items=[scrap_item], process_loss_percentage=10
).name
se = make_stock_entry(item_code=fg_item, qty=5, purpose="Manufacture", do_not_save=True)
se.from_bom = 1
se.bom_no = bom_no
se.fg_completed_qty = 5
se.from_warehouse = warehouse
se.to_warehouse = "_Test Warehouse 1 - _TC"
se.get_items()
se.save()
se.reload()
self.assertEqual(se.items[1].qty, 4.5)
self.assertEqual(se.items[1].amount, 45)
self.assertEqual(se.items[2].qty, 4.5)
self.assertEqual(se.items[2].amount, 5)
def test_process_loss_percentage_resyncs_from_qty(self):
# changing fg qty recomputes process_loss_qty
se = frappe.new_doc("Stock Entry")
se.purpose = "Manufacture"
se.fg_completed_qty = 200
se.process_loss_qty = 100
se.process_loss_percentage = 80
se.set_process_loss_qty()
self.assertEqual(se.process_loss_percentage, 50)
def test_process_loss_qty_derived_from_percentage_when_qty_blank(self):
se = frappe.new_doc("Stock Entry")
se.purpose = "Manufacture"
se.fg_completed_qty = 200
se.process_loss_percentage = 25
se.set_process_loss_qty()
self.assertEqual(se.process_loss_qty, 50)
def make_serialized_item(self, **args):
>>>>>>> beeffee8f9 (fix: sync process loss percentage when fg qty changes)
args = frappe._dict(args)
se = frappe.copy_doc(test_records[0])