diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 8301a706183d..674624e184b4 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -404,7 +404,9 @@ def _changed(item): fields=["total_qty as qty", "avg_rate as rate"], )[0] + bundle_data.qty = abs(bundle_data.qty) self.calculate_difference_amount(item, bundle_data) + return True inventory_dimensions_dict = {} @@ -464,11 +466,16 @@ def _changed(item): frappe.msgprint(_("Removed items with no change in quantity or value.")) def calculate_difference_amount(self, item, item_dict): - self.difference_amount += flt(item.qty, item.precision("qty")) * flt( - item.valuation_rate or item_dict.get("rate"), item.precision("valuation_rate") - ) - flt(item_dict.get("qty"), item.precision("qty")) * flt( - item_dict.get("rate"), item.precision("valuation_rate") - ) + qty_precision = item.precision("qty") + val_precision = item.precision("valuation_rate") + + new_qty = flt(item.qty, qty_precision) + new_valuation_rate = flt(item.valuation_rate or item_dict.get("rate"), val_precision) + + current_qty = flt(item_dict.get("qty"), qty_precision) + current_valuation_rate = flt(item_dict.get("rate"), val_precision) + + self.difference_amount += (new_qty * new_valuation_rate) - (current_qty * current_valuation_rate) def validate_data(self): def _get_msg(row_num, msg): diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 8845bdbb753c..a41db6cf611e 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -1109,6 +1109,7 @@ def test_not_reconcile_all_batch(self): ) sr.reload() + self.assertEqual(sr.difference_amount, 98900.0) self.assertTrue(sr.items[0].current_valuation_rate) current_sabb = sr.items[0].current_serial_and_batch_bundle