diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index ebfa7269912..d601dc093b8 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -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 ) diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index ea231ff466c..79a353ace30 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -2729,6 +2729,28 @@ class TestStockEntry(FrappeTestCase): # delete naming rule frappe.delete_doc("Document Naming Rule", qc_naming_rule.name) + 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(**args): args = frappe._dict(args)