updating serial no status from scheduler #9061 (#9066)

diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index af4dd3b..d64409d 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -178,7 +178,8 @@
 		"erpnext.hr.doctype.employee.employee.send_birthday_reminders",
 		"erpnext.projects.doctype.task.task.set_tasks_as_overdue",
 		"erpnext.accounts.doctype.asset.depreciation.post_depreciation_entries",
-		'erpnext.hr.doctype.daily_work_summary_settings.daily_work_summary_settings.send_summary'
+		"erpnext.hr.doctype.daily_work_summary_settings.daily_work_summary_settings.send_summary",
+		"erpnext.stock.doctype.serial_no.serial_no.update_maintenance_status"
 	]
 }
 
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index bc9b893..03d4d73 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -324,3 +324,12 @@
 						update_rejected_serial_nos = False
 						if accepted_serial_nos_updated:
 							break
+
+def update_maintenance_status():
+	serial_nos = frappe.db.sql('''select name from `tabSerial No` where (amc_expiry_date<%s or
+		warranty_expiry_date<%s) and maintenance_status not in ('Out of Warranty', 'Out of AMC')''',
+		(nowdate(), nowdate()))
+	for serial_no in serial_nos:
+		doc = frappe.get_doc("Serial No", serial_no[0])
+		doc.set_maintenance_status()
+		frappe.db.set_value('Serial No', doc.name, 'maintenance_status', doc.maintenance_status)