diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.json b/erpnext/assets/doctype/asset_repair/asset_repair.json
index a0fe632..6bcddbf 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.json
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.json
@@ -263,7 +263,7 @@
  "index_web_pages_for_search": 1,
  "is_submittable": 1,
  "links": [],
- "modified": "2021-06-19 15:20:24.056706",
+ "modified": "2021-06-20 17:35:51.075537",
  "modified_by": "Administrator",
  "module": "Assets",
  "name": "Asset Repair",
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py
index c074cc9..5fccfb7 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -6,74 +6,72 @@
 import frappe
 from frappe import _
 from frappe.utils import time_diff_in_hours, getdate, add_months, flt, cint
-from frappe.model.document import Document
 from erpnext.accounts.general_ledger import make_gl_entries
 from erpnext.assets.doctype.asset.asset import get_asset_account
 from erpnext.controllers.accounts_controller import AccountsController
 
 class AssetRepair(AccountsController):
 	def validate(self):
-		if self.repair_status == "Completed" and not self.completion_date:
-			frappe.throw(_("Please select Completion Date for Completed Repair"))
-
+		self.asset_doc = frappe.get_doc('Asset', self.asset)
 		self.update_status()
-		self.set_total_value()		# change later
+		if self.get('stock_items'):
+			self.set_total_value()		# change later
 		self.calculate_total_repair_cost()
 		
 	def update_status(self):
 		if self.repair_status == 'Pending':
 			frappe.db.set_value('Asset', self.asset, 'status', 'Out of Order')
 		else:
-			asset = frappe.get_doc('Asset', self.asset)
-			asset.set_status()
+			self.asset_doc.set_status()
 
 	def set_total_value(self):
-		for item in self.stock_items:
+		for item in self.get('stock_items'):
 			item.total_value = flt(item.valuation_rate) * flt(item.consumed_quantity)
 
 	def calculate_total_repair_cost(self):
 		self.total_repair_cost = self.repair_cost
-		if self.stock_consumption:
-			for item in self.stock_items:
+		if self.get('stock_items'):
+			for item in self.get('stock_items'):
 				self.total_repair_cost += item.total_value
 
 	def on_submit(self):
 		self.check_repair_status()
 
-		if self.stock_consumption or self.capitalize_repair_cost:
+		if self.get('stock_consumption') or self.get('capitalize_repair_cost'):
 			self.increase_asset_value()
-		if self.stock_consumption:
+		if self.get('stock_consumption'):
 			self.check_for_stock_items_and_warehouse()
 			self.decrease_stock_quantity()
-		if self.capitalize_repair_cost:
+		if self.get('capitalize_repair_cost'):
 			self.make_gl_entries()
 			if frappe.db.get_value('Asset', self.asset, 'calculate_depreciation') and self.increase_in_asset_life:
 				self.modify_depreciation_schedule()
 
+		self.asset_doc.flags.ignore_validate_update_after_submit = True
+		self.asset_doc.save()
+
 	def check_repair_status(self):
 		if self.repair_status == "Pending":
 			frappe.throw(_("Please update Repair Status."))
 
 	def check_for_stock_items_and_warehouse(self):
-		if not self.stock_items:
+		if not self.get('stock_items'):
 			frappe.throw(_("Please enter Stock Items consumed during the Repair."), title=_("Missing Items"))
 		if not self.warehouse:
 			frappe.throw(_("Please enter Warehouse from which Stock Items consumed during the Repair were taken."), title=_("Missing Warehouse"))
 
 	def increase_asset_value(self):
 		total_value_of_stock_consumed = 0
-		for item in self.stock_items:
-			total_value_of_stock_consumed += item.total_value
+		if self.get('stock_consumption'):
+			for item in self.get('stock_items'):
+				total_value_of_stock_consumed += item.total_value
 
-		asset = frappe.get_doc('Asset', self.asset)
-		asset.flags.ignore_validate_update_after_submit = True
-		if asset.calculate_depreciation:
-			for row in asset.finance_books:
+		if self.asset_doc.calculate_depreciation:
+			for row in self.asset_doc.finance_books:
 				row.value_after_depreciation += total_value_of_stock_consumed
 
 				if self.capitalize_repair_cost:
 					row.value_after_depreciation += self.repair_cost
-		asset.save()
 
 	def decrease_stock_quantity(self):
 		stock_entry = frappe.get_doc({
@@ -82,7 +80,7 @@
 			"company": self.company
 		})
 
-		for stock_item in self.stock_items:
+		for stock_item in self.get('stock_items'):
 			stock_entry.append('items', {
 				"s_warehouse": self.warehouse,
 				"item_code": stock_item.item,
@@ -122,7 +120,7 @@
 			}, item=self)
 		)
 
-		if self.stock_consumption:
+		if self.get('stock_consumption'):
 			# creating GL Entries for each row in Stock Items based on the Stock Entry created for it
 			stock_entry = frappe.get_doc('Stock Entry', self.stock_entry)
 			for item in stock_entry.items:
@@ -159,18 +157,13 @@
 		return gl_entries
 
 	def modify_depreciation_schedule(self):
-		asset = frappe.get_doc('Asset', self.asset)
-		asset.flags.ignore_validate_update_after_submit = True
-		for row in asset.finance_books:
+		for row in self.asset_doc.finance_books:
 			row.total_number_of_depreciations += self.increase_in_asset_life/row.frequency_of_depreciation
 
-			asset.flags.increase_in_asset_life = False
+			self.asset_doc.flags.increase_in_asset_life = False
 			extra_months = self.increase_in_asset_life % row.frequency_of_depreciation
 			if extra_months != 0:
-				self.calculate_last_schedule_date(asset, row, extra_months)
-
-		asset.prepare_depreciation_data()
-		asset.save()
+				self.calculate_last_schedule_date(self.asset_doc, row, extra_months)
 
 	# to help modify depreciation schedule when increase_in_asset_life is not a multiple of frequency_of_depreciation
 	def calculate_last_schedule_date(self, asset, row, extra_months):
diff --git a/erpnext/assets/doctype/asset_repair/test_asset_repair.py b/erpnext/assets/doctype/asset_repair/test_asset_repair.py
index 9c9dd44..d1b417f 100644
--- a/erpnext/assets/doctype/asset_repair/test_asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/test_asset_repair.py
@@ -105,7 +105,9 @@
 		initial_num_of_depreciations = num_of_depreciations(asset)
 		create_asset_repair(asset= asset, capitalize_repair_cost = 1, submit = 1)
 		asset.reload()
+	
 		self.assertEqual((initial_num_of_depreciations + 1), num_of_depreciations(asset))
+		self.assertEqual(asset.schedules[-1].accumulated_depreciation_amount, asset.finance_books[0].value_after_depreciation)
 
 def num_of_depreciations(asset):
 	return asset.finance_books[0].total_number_of_depreciations
@@ -126,7 +128,8 @@
 		"asset_name": asset.asset_name,
 		"failure_date": nowdate(),
 		"description": "Test Description",
-		"repair_cost": 0
+		"repair_cost": 0,
+		"company": asset.company
 	})
 
 	if args.stock_consumption:
@@ -142,7 +145,7 @@
 		asset_repair.save()
 	except frappe.DuplicateEntryError:
 		pass
-
+	
 	if args.submit:
 		asset_repair.repair_status = "Completed"
 		asset_repair.cost_center = "_Test Cost Center - _TC"
