fix: Modify depreciation schedule when increase_in_asset_life is not a multiple of frequency_of_depreciation)
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 2a57183..1e67ec8 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -132,7 +132,6 @@
 				}, __("Manage"));
 			}
 
-			frm.page.set_inner_btn_group_as_primary(__("Manage"));
 			frm.trigger("setup_chart");
 		}
 
diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json
index 421b9a6..8a0e3ad 100644
--- a/erpnext/assets/doctype/asset/asset.json
+++ b/erpnext/assets/doctype/asset/asset.json
@@ -23,6 +23,7 @@
   "asset_name",
   "asset_category",
   "location",
+  "asset_value",
   "custodian",
   "department",
   "disposal_date",
@@ -53,6 +54,8 @@
   "next_depreciation_date",
   "section_break_14",
   "schedules",
+  "to_date",
+  "edit_dates",
   "insurance_details",
   "policy_number",
   "insurer",
@@ -480,6 +483,24 @@
    "fieldname": "section_break_36",
    "fieldtype": "Section Break",
    "label": "Finance Books"
+  },
+  {
+   "fieldname": "asset_value",
+   "fieldtype": "Currency",
+   "label": "Asset Value",
+   "read_only": 1
+  },
+  {
+   "fieldname": "to_date",
+   "fieldtype": "Date",
+   "hidden": 1,
+   "label": "To Date"
+  },
+  {
+   "fieldname": "edit_dates",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "label": "Edit Dates"
   }
  ],
  "idx": 72,
@@ -502,7 +523,7 @@
    "link_fieldname": "asset"
   }
  ],
- "modified": "2021-01-22 12:38:59.091510",
+ "modified": "2021-05-21 12:05:29.424083",
  "modified_by": "Administrator",
  "module": "Assets",
  "name": "Asset",
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 456649f..e8cfe0a 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -96,6 +96,9 @@
 			finance_books = get_item_details(self.item_code, self.asset_category)
 			self.set('finance_books', finance_books)
 
+		if not(self.asset_value):
+			self.asset_value = self.gross_purchase_amount
+
 	def validate_asset_values(self):
 		if not self.asset_category:
 			self.asset_category = frappe.get_cached_value("Item", self.item_code, "asset_category")
@@ -168,15 +171,23 @@
 				d.precision("rate_of_depreciation"))
 
 	def make_depreciation_schedule(self):
-		if 'Manual' not in [d.depreciation_method for d in self.finance_books]:
+		if 'Manual' not in [d.depreciation_method for d in self.finance_books] and not self.schedules:
 			self.schedules = []
 
-		if self.get("schedules") or not self.available_for_use_date:
+		if not self.available_for_use_date:
 			return
 
 		for d in self.get('finance_books'):
 			self.validate_asset_finance_books(d)
 
+			start = 0
+			for n in range (len(self.schedules)):
+				if not self.schedules[n].journal_entry:
+					print("*"*100)
+					del self.schedules[n:]
+					start = n
+					break
+
 			value_after_depreciation = (flt(self.gross_purchase_amount) -
 				flt(self.opening_accumulated_depreciation))
 
@@ -189,9 +200,9 @@
 
 			if has_pro_rata:
 				number_of_pending_depreciations += 1
-
+			
 			skip_row = False
-			for n in range(number_of_pending_depreciations):
+			for n in range(start, number_of_pending_depreciations):
 				# If depreciation is already completed (for double declining balance)
 				if skip_row: continue
 
@@ -216,11 +227,12 @@
 
 				# For last row
 				elif has_pro_rata and n == cint(number_of_pending_depreciations) - 1:
-					to_date = add_months(self.available_for_use_date,
-						n * cint(d.frequency_of_depreciation))
+					if not self.edit_dates:
+						self.to_date = add_months(self.available_for_use_date,
+							n * cint(d.frequency_of_depreciation))
 
-					depreciation_amount, days, months = self.get_pro_rata_amt(d,
-						depreciation_amount, schedule_date, to_date)
+					depreciation_amount, days, months = get_pro_rata_amt(d,
+						depreciation_amount, schedule_date, self.to_date)
 
 					monthly_schedule_date = add_months(schedule_date, 1)
 
@@ -346,11 +358,12 @@
 			if d.finance_book_id not in finance_books:
 				accumulated_depreciation = flt(self.opening_accumulated_depreciation)
 				value_after_depreciation = flt(self.get_value_after_depreciation(d.finance_book_id))
-				finance_books.append(d.finance_book_id)
+				finance_books.append(int(d.finance_book_id))
 
 			depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount"))
 			value_after_depreciation -= flt(depreciation_amount)
 
+			# for the last row, if depreciation method = Straight Line
 			if straight_line_idx and i == max(straight_line_idx) - 1:
 				book = self.get('finance_books')[cint(d.finance_book_id) - 1]
 				depreciation_amount += flt(value_after_depreciation -
diff --git a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
index 70b8654..3830d11 100644
--- a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
+++ b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
@@ -30,7 +30,10 @@
 		if(!frm.is_new()) {
 			frm.trigger('make_dashboard');
 		}
+
+		frm.toggle_display(['stock_consumption_details_section'], frm.doc.stock_consumption)
 	},
+
 	make_dashboard: (frm) => {
 		if(!frm.is_new()) {
 			frappe.call({
diff --git a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.json b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.json
index c0c2566..da2fd75 100644
--- a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.json
+++ b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.json
@@ -12,13 +12,17 @@
   "column_break_3",
   "item_code",
   "item_name",
+  "stock_consumption",
   "section_break_6",
   "maintenance_team",
   "column_break_9",
   "maintenance_manager",
   "maintenance_manager_name",
   "section_break_8",
-  "asset_maintenance_tasks"
+  "asset_maintenance_tasks",
+  "stock_consumption_details_section",
+  "warehouse",
+  "stock_items"
  ],
  "fields": [
   {
@@ -100,10 +104,33 @@
    "label": "Maintenance Tasks",
    "options": "Asset Maintenance Task",
    "reqd": 1
+  },
+  {
+   "default": "0",
+   "fieldname": "stock_consumption",
+   "fieldtype": "Check",
+   "label": "Stock Consumed During Maintenance"
+  },
+  {
+   "fieldname": "stock_consumption_details_section",
+   "fieldtype": "Section Break",
+   "label": "Stock Consumption Details"
+  },
+  {
+   "fieldname": "warehouse",
+   "fieldtype": "Link",
+   "label": "Warehouse",
+   "options": "Warehouse"
+  },
+  {
+   "fieldname": "stock_items",
+   "fieldtype": "Table",
+   "label": "Stock Items",
+   "options": "Stock Item"
   }
  ],
  "links": [],
- "modified": "2020-05-28 20:28:32.993823",
+ "modified": "2021-05-13 05:24:58.480132",
  "modified_by": "Administrator",
  "module": "Assets",
  "name": "Asset Maintenance",
diff --git a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py
index a506dee..e3e654c 100644
--- a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py
+++ b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py
@@ -19,10 +19,45 @@
 			if not task.assign_to and self.docstatus == 0:
 				throw(_("Row #{}: Please asign task to a member.").format(task.idx))
 
+		if self.stock_consumption:
+			self.check_for_stock_items_and_warehouse()
+			self.increase_asset_value()
+			self.decrease_stock_quantity()
+
 	def on_update(self):
 		for task in self.get('asset_maintenance_tasks'):
 			assign_tasks(self.name, task.assign_to, task.maintenance_task, task.next_due_date)
-		self.sync_maintenance_tasks()
+		self.sync_maintenance_tasks()		
+
+	def check_for_stock_items_and_warehouse(self):
+		if self.stock_consumption:
+			if not self.stock_items:
+				frappe.throw(_("Please enter Stock Items consumed during Asset Maintenance."))
+			if not self.warehouse:
+				frappe.throw(_("Please enter Warehouse from which Stock Items consumed during Asset Maintenance were taken."))
+
+	def increase_asset_value(self):
+		asset_value = frappe.db.get_value('Asset', self.asset_name, 'asset_value')
+		for item in self.stock_items:
+			asset_value += item.total_value
+
+		frappe.db.set_value('Asset', self.asset_name, 'asset_value', asset_value)
+
+	def decrease_stock_quantity(self):
+		stock_entry = frappe.get_doc({
+			"doctype": "Stock Entry",
+			"stock_entry_type": "Material Issue"
+		})
+
+		for stock_item in self.stock_items:
+			stock_entry.append('items', {
+				"s_warehouse": self.warehouse,
+				"item_code": stock_item.item,
+				"qty": stock_item.consumed_quantity
+			})
+
+		stock_entry.insert()
+		stock_entry.submit()
 
 	def sync_maintenance_tasks(self):
 		tasks_names = []
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.js b/erpnext/assets/doctype/asset_repair/asset_repair.js
index f5eeeda..7633a59 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.js
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.js
@@ -3,7 +3,16 @@
 
 frappe.ui.form.on('Asset Repair', {
 	refresh: function(frm) {
-		frm.toggle_display(['completion_date', 'repair_status'], !(frm.doc.__islocal));
+		frm.toggle_display(['completion_date', 'repair_status', 'accounting_details', 'accounting_dimensions_section'], !(frm.doc.__islocal));
+	
+		if (frm.doc.docstatus) {
+			frm.add_custom_button("View General Ledger", function() {
+				frappe.route_options = {
+					"voucher_no": frm.doc.name
+				};
+				frappe.set_route("query-report", "General Ledger");
+			});
+		}
 	},
 
 	repair_status: (frm) => {
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.json b/erpnext/assets/doctype/asset_repair/asset_repair.json
index 4ed9916..522f287 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.json
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.json
@@ -13,20 +13,30 @@
   "asset_name",
   "section_break_5",
   "failure_date",
-  "assign_to",
-  "assign_to_name",
+  "repair_status",
   "column_break_6",
   "completion_date",
-  "repair_status",
-  "section_break_7",
+  "accounting_dimensions_section",
+  "cost_center",
+  "column_break_14",
+  "project",
+  "accounting_details",
   "repair_cost",
+  "capitalize_repair_cost",
+  "stock_consumption",
   "column_break_8",
-  "payable_account",
+  "total_repair_cost",
+  "purchase_invoice",
+  "stock_consumption_details_section",
+  "warehouse",
+  "stock_items",
+  "asset_depreciation_details_section",
+  "increase_in_asset_life",
   "section_break_9",
   "description",
   "column_break_9",
   "actions_performed",
-  "section_break_17",
+  "section_break_23",
   "downtime",
   "column_break_19",
   "amended_from"
@@ -56,20 +66,6 @@
    "reqd": 1
   },
   {
-   "allow_on_submit": 1,
-   "fieldname": "assign_to",
-   "fieldtype": "Link",
-   "label": "Assign To",
-   "options": "User"
-  },
-  {
-   "allow_on_submit": 1,
-   "fetch_from": "assign_to.full_name",
-   "fieldname": "assign_to_name",
-   "fieldtype": "Read Only",
-   "label": "Assign To Name"
-  },
-  {
    "fieldname": "column_break_6",
    "fieldtype": "Column Break"
   },
@@ -111,10 +107,6 @@
    "label": "Actions performed"
   },
   {
-   "fieldname": "section_break_17",
-   "fieldtype": "Section Break"
-  },
-  {
    "allow_on_submit": 1,
    "fieldname": "downtime",
    "fieldtype": "Data",
@@ -151,30 +143,103 @@
    "reqd": 1
   },
   {
+   "fetch_from": "asset.asset_name",
    "fieldname": "asset_name",
    "fieldtype": "Read Only",
    "label": "Asset Name"
   },
   {
-   "fieldname": "payable_account",
-   "fieldtype": "Link",
-   "label": "Payable Account",
-   "options": "Account"
+   "fieldname": "column_break_8",
+   "fieldtype": "Column Break"
   },
   {
-   "fieldname": "section_break_7",
+   "default": "0",
+   "fieldname": "capitalize_repair_cost",
+   "fieldtype": "Check",
+   "label": "Capitalize Repair Cost"
+  },
+  {
+   "fieldname": "accounting_details",
    "fieldtype": "Section Break",
    "label": "Accounting Details"
   },
   {
-   "fieldname": "column_break_8",
+   "fieldname": "stock_items",
+   "fieldtype": "Table",
+   "label": "Stock Items",
+   "options": "Stock Item"
+  },
+  {
+   "fieldname": "section_break_23",
+   "fieldtype": "Section Break"
+  },
+  {
+   "fieldname": "accounting_dimensions_section",
+   "fieldtype": "Section Break",
+   "label": "Accounting Dimensions"
+  },
+  {
+   "fieldname": "cost_center",
+   "fieldtype": "Link",
+   "label": "Cost Center",
+   "options": "Cost Center"
+  },
+  {
+   "fieldname": "project",
+   "fieldtype": "Link",
+   "label": "Project",
+   "options": "Project"
+  },
+  {
+   "fieldname": "column_break_14",
    "fieldtype": "Column Break"
+  },
+  {
+   "default": "0",
+   "fieldname": "stock_consumption",
+   "fieldtype": "Check",
+   "label": "Stock Consumed During Repair"
+  },
+  {
+   "depends_on": "stock_consumption",
+   "fieldname": "stock_consumption_details_section",
+   "fieldtype": "Section Break",
+   "label": "Stock Consumption Details"
+  },
+  {
+   "depends_on": "stock_consumption",
+   "fieldname": "total_repair_cost",
+   "fieldtype": "Currency",
+   "label": "Total Repair Cost"
+  },
+  {
+   "fieldname": "warehouse",
+   "fieldtype": "Link",
+   "label": "Warehouse",
+   "options": "Warehouse"
+  },
+  {
+   "depends_on": "capitalize_repair_cost",
+   "fieldname": "asset_depreciation_details_section",
+   "fieldtype": "Section Break",
+   "label": "Asset Depreciation Details"
+  },
+  {
+   "fieldname": "increase_in_asset_life",
+   "fieldtype": "Int",
+   "label": "Increase In Asset Life(Months)"
+  },
+  {
+   "fieldname": "purchase_invoice",
+   "fieldtype": "Link",
+   "label": "Purchase Invoice",
+   "options": "Purchase Invoice"
   }
  ],
  "index_web_pages_for_search": 1,
  "is_submittable": 1,
  "links": [],
- "modified": "2021-05-11 05:11:58.330860",
+ "modified": "2021-05-21 10:37:35.002238",
  "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 884dc19..8fd019f 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -5,19 +5,172 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _
-from frappe.utils import time_diff_in_hours
+from frappe.utils import time_diff_in_hours, getdate, add_days, date_diff, add_months, flt, cint
 from frappe.model.document import Document
+from erpnext.accounts.general_ledger import make_gl_entries
 
 class AssetRepair(Document):
 	def validate(self):
 		if self.repair_status == "Completed" and not self.completion_date:
 			frappe.throw(_("Please select Completion Date for Completed Repair"))
 
+		self.update_status()
+		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:
-			frappe.db.set_value('Asset', self.asset, 'status', 'Submitted')
+			asset = frappe.get_doc('Asset', self.asset)
+			asset.set_status()
 
+	def set_total_value(self):
+		for item in self.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:
+				self.total_repair_cost += item.total_value
+
+	def on_submit(self):
+		self.check_repair_status()
+		self.check_for_cost_center()
+
+		if self.stock_consumption or self.capitalize_repair_cost:
+			self.increase_asset_value()
+		if self.stock_consumption:
+			self.check_for_stock_items_and_warehouse()
+			self.decrease_stock_quantity()
+		if self.capitalize_repair_cost:
+			self.check_for_purchase_invoice()
+			self.make_gl_entries()
+			self.modify_depreciation_schedule()
+
+	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:
+			frappe.throw(_("Please enter Stock Items consumed during Asset Repair."))
+		if not self.warehouse:
+			frappe.throw(_("Please enter Warehouse from which Stock Items consumed during Asset Repair were taken."))
+
+	def check_for_cost_center(self):
+		if not self.cost_center:
+			frappe.throw(_("Please enter Cost Center."))
+
+	def increase_asset_value(self):
+		asset_value = frappe.db.get_value('Asset', self.asset, 'asset_value')
+		for item in self.stock_items:
+			asset_value += item.total_value
+
+		if self.capitalize_repair_cost:
+			asset_value += self.repair_cost
+		frappe.db.set_value('Asset', self.asset, 'asset_value', asset_value)
+		
+	def decrease_stock_quantity(self):
+		stock_entry = frappe.get_doc({
+			"doctype": "Stock Entry",
+			"stock_entry_type": "Material Issue"
+		})
+
+		for stock_item in self.stock_items:
+			stock_entry.append('items', {
+				"s_warehouse": self.warehouse,
+				"item_code": stock_item.item,
+				"qty": stock_item.consumed_quantity
+			})
+
+		stock_entry.insert()
+		stock_entry.submit()
+
+	def check_for_purchase_invoice(self):
+		if not self.purchase_invoice:
+			frappe.throw(_("Please link Purchase Invoice."))
+
+	def on_cancel(self):
+		self.make_gl_entries(cancel=True)
+
+	def make_gl_entries(self, cancel=False):
+		if flt(self.repair_cost) > 0:
+			gl_entries = self.get_gl_entries()
+			make_gl_entries(gl_entries, cancel)
+
+	def get_gl_entries(self):
+		gl_entry = []
+		company = frappe.db.get_value('Asset', self.asset, 'company')
+		repair_and_maintenance_account = frappe.db.get_value('Company', company, 'repair_and_maintenance_account')
+		fixed_asset_account = self.get_fixed_asset_account()
+		expense_account = frappe.get_doc('Purchase Invoice', self.purchase_invoice).items[0].expense_account	
+
+		gl_entry = frappe.get_doc({
+			"doctype": "GL Entry",
+			"account": expense_account,
+			"credit": self.total_repair_cost,
+			"credit_in_account_currency": self.total_repair_cost,
+			"against": repair_and_maintenance_account,
+			"voucher_type": self.doctype,		
+			"voucher_no": self.name,
+			"cost_center": self.cost_center,
+			"posting_date": getdate()
+		})
+		gl_entry.insert()
+		gl_entry = frappe.get_doc({
+			"doctype": "GL Entry",
+			"account": fixed_asset_account,
+			"debit": self.total_repair_cost,
+			"debit_in_account_currency": self.total_repair_cost,
+			"against": expense_account,
+			"voucher_type": self.doctype,
+			"voucher_no": self.name,
+			"cost_center": self.cost_center,
+			"posting_date": getdate(),
+			"against_voucher_type": "Purchase Invoice",
+			"against_voucher": self.purchase_invoice
+		})
+		gl_entry.insert()
+
+	def get_fixed_asset_account(self):
+		asset_category = frappe.get_doc('Asset Category', frappe.db.get_value('Asset', self.asset, 'asset_category'))
+		company = frappe.db.get_value('Asset', self.asset, 'company')
+		for account in asset_category.accounts:
+			if account.company_name == company:
+				return account.fixed_asset_account
+
+	def modify_depreciation_schedule(self):
+		if self.increase_in_asset_life:
+			asset = frappe.get_doc('Asset', self.asset)
+			asset.flags.ignore_validate_update_after_submit = True
+			for row in asset.finance_books:
+				row.total_number_of_depreciations += self.increase_in_asset_life/row.frequency_of_depreciation
+
+				asset.edit_dates = ""
+				extra_months = self.increase_in_asset_life % row.frequency_of_depreciation
+				if extra_months != 0:
+					self.calculate_last_schedule_date(asset, row, extra_months)
+					# fix depreciation amount
+
+			asset.prepare_depreciation_data()
+			asset.save()
+
+	# 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):
+		asset.edit_dates = "Don't Edit"
+		number_of_pending_depreciations = cint(row.total_number_of_depreciations) - \
+			cint(asset.number_of_depreciations_booked)
+		last_schedule_date = asset.schedules[len(asset.schedules)-1].schedule_date
+		asset.to_date = add_months(last_schedule_date, extra_months)
+		schedule_date = add_months(row.depreciation_start_date,
+			number_of_pending_depreciations * cint(row.frequency_of_depreciation))
+
+		if asset.to_date > schedule_date:
+			row.total_number_of_depreciations += 1
+
+			
 @frappe.whitelist()
 def get_downtime(failure_date, completion_date):
 	downtime = time_diff_in_hours(completion_date, failure_date)
diff --git a/erpnext/assets/doctype/stock_item/__init__.py b/erpnext/assets/doctype/stock_item/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/assets/doctype/stock_item/__init__.py
diff --git a/erpnext/assets/doctype/stock_item/stock_item.json b/erpnext/assets/doctype/stock_item/stock_item.json
new file mode 100644
index 0000000..b1f05db
--- /dev/null
+++ b/erpnext/assets/doctype/stock_item/stock_item.json
@@ -0,0 +1,55 @@
+{
+ "actions": [],
+ "creation": "2021-05-12 02:41:54.161024",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "item",
+  "valuation_rate",
+  "consumed_quantity",
+  "total_value"
+ ],
+ "fields": [
+  {
+   "fieldname": "item",
+   "fieldtype": "Link",
+   "in_list_view": 1,
+   "label": "Item",
+   "options": "Item"
+  },
+  {
+   "fetch_from": "item.valuation_rate",
+   "fieldname": "valuation_rate",
+   "fieldtype": "Currency",
+   "in_list_view": 1,
+   "label": "Valuation Rate",
+   "read_only": 1
+  },
+  {
+   "fieldname": "consumed_quantity",
+   "fieldtype": "Data",
+   "in_list_view": 1,
+   "label": "Consumed Quantity"
+  },
+  {
+   "fieldname": "total_value",
+   "fieldtype": "Currency",
+   "in_list_view": 1,
+   "label": "Total Value",
+   "read_only": 1
+  }
+ ],
+ "index_web_pages_for_search": 1,
+ "istable": 1,
+ "links": [],
+ "modified": "2021-05-12 03:19:55.006300",
+ "modified_by": "Administrator",
+ "module": "Assets",
+ "name": "Stock Item",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
+}
\ No newline at end of file
diff --git a/erpnext/assets/doctype/stock_item/stock_item.py b/erpnext/assets/doctype/stock_item/stock_item.py
new file mode 100644
index 0000000..0e3cc3f
--- /dev/null
+++ b/erpnext/assets/doctype/stock_item/stock_item.py
@@ -0,0 +1,8 @@
+# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+# import frappe
+from frappe.model.document import Document
+
+class StockItem(Document):
+	pass
diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json
index 2d2f336..e6ec496 100644
--- a/erpnext/setup/doctype/company/company.json
+++ b/erpnext/setup/doctype/company/company.json
@@ -83,6 +83,7 @@
   "disposal_account",
   "depreciation_cost_center",
   "capital_work_in_progress_account",
+  "repair_and_maintenance_account",
   "asset_received_but_not_billed",
   "budget_detail",
   "exception_budget_approver_role",
@@ -734,6 +735,12 @@
    "fieldname": "fixed_asset_defaults",
    "fieldtype": "Section Break",
    "label": "Fixed Asset Defaults"
+  },
+  {
+   "fieldname": "repair_and_maintenance_account",
+   "fieldtype": "Link",
+   "label": "Repair and Maintenance Account",
+   "options": "Account"
   }
  ],
  "icon": "fa fa-building",
@@ -741,7 +748,7 @@
  "image_field": "company_logo",
  "is_tree": 1,
  "links": [],
- "modified": "2021-05-11 21:45:22.803065",
+ "modified": "2021-05-12 16:51:08.187233",
  "modified_by": "Administrator",
  "module": "Setup",
  "name": "Company",