fix: timeout error while reposting
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 6f4c910..a2f9978 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -5,7 +5,7 @@
 import frappe
 from frappe.permissions import add_user_permission, remove_user_permission
 from frappe.tests.utils import FrappeTestCase, change_settings
-from frappe.utils import flt, nowdate, nowtime
+from frappe.utils import add_days, flt, nowdate, nowtime
 
 from erpnext.accounts.doctype.account.test_account import get_inventory_account
 from erpnext.stock.doctype.item.test_item import (
@@ -1457,6 +1457,138 @@
 		self.assertEqual(se.items[0].item_name, item.item_name)
 		self.assertEqual(se.items[0].stock_uom, item.stock_uom)
 
+	def test_reposting_for_depedent_warehouse(self):
+		from erpnext.stock.doctype.repost_item_valuation.repost_item_valuation import repost_sl_entries
+		from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
+
+		# Inward at WH1 warehouse (Component)
+		# 1st Repack (Component (WH1) - Subcomponent (WH2))
+		# 2nd Repack (Subcomponent (WH2) - FG Item (WH3))
+		# Material Transfer of FG Item -> WH 3 -> WH2 -> Wh1 (Two transfer entries)
+		# Backdated transction which should update valuation rate in repack as well trasfer entries
+
+		for item_code in ["FG Item 1", "Sub Component 1", "Component 1"]:
+			create_item(item_code)
+
+		for warehouse in ["WH 1", "WH 2", "WH 3"]:
+			create_warehouse(warehouse)
+
+		make_stock_entry(
+			item_code="Component 1",
+			rate=100,
+			purpose="Material Receipt",
+			qty=10,
+			to_warehouse="WH 1 - _TC",
+			posting_date=add_days(nowdate(), -10),
+		)
+
+		repack1 = make_stock_entry(
+			item_code="Component 1",
+			purpose="Repack",
+			do_not_save=True,
+			qty=10,
+			from_warehouse="WH 1 - _TC",
+			posting_date=add_days(nowdate(), -9),
+		)
+
+		repack1.append(
+			"items",
+			{
+				"item_code": "Sub Component 1",
+				"qty": 10,
+				"t_warehouse": "WH 2 - _TC",
+				"transfer_qty": 10,
+				"uom": "Nos",
+				"stock_uom": "Nos",
+				"conversion_factor": 1.0,
+			},
+		)
+
+		repack1.save()
+		repack1.submit()
+
+		self.assertEqual(repack1.items[1].basic_rate, 100)
+		self.assertEqual(repack1.items[1].amount, 1000)
+
+		repack2 = make_stock_entry(
+			item_code="Sub Component 1",
+			purpose="Repack",
+			do_not_save=True,
+			qty=10,
+			from_warehouse="WH 2 - _TC",
+			posting_date=add_days(nowdate(), -8),
+		)
+
+		repack2.append(
+			"items",
+			{
+				"item_code": "FG Item 1",
+				"qty": 10,
+				"t_warehouse": "WH 3 - _TC",
+				"transfer_qty": 10,
+				"uom": "Nos",
+				"stock_uom": "Nos",
+				"conversion_factor": 1.0,
+			},
+		)
+
+		repack2.save()
+		repack2.submit()
+
+		self.assertEqual(repack2.items[1].basic_rate, 100)
+		self.assertEqual(repack2.items[1].amount, 1000)
+
+		transfer1 = make_stock_entry(
+			item_code="FG Item 1",
+			purpose="Material Transfer",
+			qty=10,
+			from_warehouse="WH 3 - _TC",
+			to_warehouse="WH 2 - _TC",
+			posting_date=add_days(nowdate(), -7),
+		)
+
+		self.assertEqual(transfer1.items[0].basic_rate, 100)
+		self.assertEqual(transfer1.items[0].amount, 1000)
+
+		transfer2 = make_stock_entry(
+			item_code="FG Item 1",
+			purpose="Material Transfer",
+			qty=10,
+			from_warehouse="WH 2 - _TC",
+			to_warehouse="WH 1 - _TC",
+			posting_date=add_days(nowdate(), -6),
+		)
+
+		self.assertEqual(transfer2.items[0].basic_rate, 100)
+		self.assertEqual(transfer2.items[0].amount, 1000)
+
+		# Backdated transaction
+		receipt2 = make_stock_entry(
+			item_code="Component 1",
+			rate=200,
+			purpose="Material Receipt",
+			qty=10,
+			to_warehouse="WH 1 - _TC",
+			posting_date=add_days(nowdate(), -15),
+		)
+
+		self.assertEqual(receipt2.items[0].basic_rate, 200)
+		self.assertEqual(receipt2.items[0].amount, 2000)
+
+		repost_name = frappe.db.get_value(
+			"Repost Item Valuation", {"voucher_no": receipt2.name, "docstatus": 1}, "name"
+		)
+
+		doc = frappe.get_doc("Repost Item Valuation", repost_name)
+		repost_sl_entries(doc)
+
+		for obj in [repack1, repack2, transfer1, transfer2]:
+			obj.load_from_db()
+
+			index = 1 if obj.purpose == "Repack" else 0
+			self.assertEqual(obj.items[index].basic_rate, 200)
+			self.assertEqual(obj.items[index].basic_amount, 2000)
+
 
 def make_serialized_item(**args):
 	args = frappe._dict(args)
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index ba2d3c1..01c5aa9 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -250,16 +250,11 @@
 				data.sle_changed = False
 		i += 1
 
-		if doc and i % 2 == 0:
+		if doc:
 			update_args_in_repost_item_valuation(
 				doc, i, args, distinct_item_warehouses, affected_transactions
 			)
 
-	if doc and args:
-		update_args_in_repost_item_valuation(
-			doc, i, args, distinct_item_warehouses, affected_transactions
-		)
-
 
 def validate_item_warehouse(args):
 	for field in ["item_code", "warehouse", "posting_date", "posting_time"]:
@@ -501,7 +496,8 @@
 		elif dependant_sle.item_code == self.item_code and dependant_sle.warehouse in self.data:
 			return entries_to_fix
 		else:
-			return self.append_future_sle_for_dependant(dependant_sle, entries_to_fix)
+			self.append_future_sle_for_dependant(dependant_sle, entries_to_fix)
+			return entries_to_fix
 
 	def update_distinct_item_warehouses(self, dependant_sle):
 		key = (dependant_sle.item_code, dependant_sle.warehouse)
@@ -520,14 +516,11 @@
 
 	def append_future_sle_for_dependant(self, dependant_sle, entries_to_fix):
 		self.initialize_previous_data(dependant_sle)
-
-		args = self.data[dependant_sle.warehouse].previous_sle or frappe._dict(
-			{"item_code": self.item_code, "warehouse": dependant_sle.warehouse}
+		self.distinct_item_warehouses[(self.item_code, dependant_sle.warehouse)] = frappe._dict(
+			{"sle": dependant_sle}
 		)
-		future_sle_for_dependant = list(self.get_sle_after_datetime(args))
 
-		entries_to_fix.extend(future_sle_for_dependant)
-		return sorted(entries_to_fix, key=lambda k: k["timestamp"])
+		self.new_items_found = True
 
 	def process_sle(self, sle):
 		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos