fix: Calculate depreciation_left accurately
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 8ff4f97..7861c7e 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -221,7 +221,7 @@
 				# If depreciation is already completed (for double declining balance)
 				if skip_row: continue
 
-				depreciation_amount = get_depreciation_amount(self, value_after_depreciation, d)
+				depreciation_amount = get_depreciation_amount(self, value_after_depreciation, d, date_of_sale)
 
 				if not has_pro_rata or n < cint(number_of_pending_depreciations) - 1:
 					schedule_date = add_months(d.depreciation_start_date,
@@ -835,8 +835,8 @@
 	return date_diff(date, period_start_date)
 
 @erpnext.allow_regional
-def get_depreciation_amount(asset, depreciable_value, row):
-	depreciation_left = flt(row.total_number_of_depreciations) - flt(asset.number_of_depreciations_booked)
+def get_depreciation_amount(asset, depreciable_value, row, date_of_sale=None):
+	depreciation_left = get_depreciation_left(asset, row, date_of_sale)
 
 	if row.depreciation_method in ("Straight Line", "Manual"):
 		# if the Depreciation Schedule is being prepared for the first time
@@ -852,3 +852,17 @@
 		depreciation_amount = flt(depreciable_value * (flt(row.rate_of_depreciation) / 100))
 
 	return depreciation_amount
+
+def get_depreciation_left(asset, row, date_of_sale):
+	if not date_of_sale:
+		return flt(row.total_number_of_depreciations) - flt(asset.number_of_depreciations_booked)
+	else:
+		if len(asset.finance_books) == 1:
+			return (flt(row.total_number_of_depreciations) - flt(asset.number_of_depreciations_booked)) - len(asset.schedules)
+		else:
+			depreciation_left = flt(row.total_number_of_depreciations) - flt(asset.number_of_depreciations_booked)
+			for schedule in asset.get('schedules'):
+				if schedule.finance_book == row.finance_book:
+					depreciation_left -= 1
+
+			return depreciation_left
diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py
index 903168d..b1cbe70 100644
--- a/erpnext/regional/india/utils.py
+++ b/erpnext/regional/india/utils.py
@@ -14,6 +14,7 @@
 from erpnext.hr.utils import get_salary_assignment
 from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
 from erpnext.regional.india import number_state_mapping, state_numbers, states
+from erpnext.assets.doctype.asset.asset import get_depreciation_left
 
 GST_INVOICE_NUMBER_FORMAT = re.compile(r"^[a-zA-Z0-9\-/]+$")   #alphanumeric and - /
 GSTIN_FORMAT = re.compile("^[0-9]{2}[A-Z]{4}[0-9A-Z]{1}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}[1-9A-Z]{1}[0-9A-Z]{1}$")
@@ -842,8 +843,8 @@
 		diff = additional_taxes - total_charges
 		doc.get('items')[item_count - 1].taxable_value += diff
 
-def get_depreciation_amount(asset, depreciable_value, row):
-	depreciation_left = flt(row.total_number_of_depreciations) - flt(asset.number_of_depreciations_booked)
+def get_depreciation_amount(asset, depreciable_value, row, date_of_sale=None):
+	depreciation_left = get_depreciation_left(asset, row, date_of_sale)
 
 	if row.depreciation_method in ("Straight Line", "Manual"):
 		# if the Depreciation Schedule is being prepared for the first time