32 lines
		
	
	
		
			901 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			901 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| import frappe
 | |
| from frappe.utils import getdate, nowdate
 | |
| 
 | |
| 
 | |
| def execute():
 | |
| 	frappe.reload_doc("stock", "doctype", "serial_no")
 | |
| 
 | |
| 	serial_no_list = frappe.db.sql(
 | |
| 		"""select name, delivery_document_type, warranty_expiry_date, warehouse from `tabSerial No`
 | |
| 		where (status is NULL OR status='')""",
 | |
| 		as_dict=1,
 | |
| 	)
 | |
| 	if len(serial_no_list) > 20000:
 | |
| 		frappe.db.auto_commit_on_many_writes = True
 | |
| 
 | |
| 	for serial_no in serial_no_list:
 | |
| 		if serial_no.get("delivery_document_type"):
 | |
| 			status = "Delivered"
 | |
| 		elif serial_no.get("warranty_expiry_date") and getdate(
 | |
| 			serial_no.get("warranty_expiry_date")
 | |
| 		) <= getdate(nowdate()):
 | |
| 			status = "Expired"
 | |
| 		elif not serial_no.get("warehouse"):
 | |
| 			status = "Inactive"
 | |
| 		else:
 | |
| 			status = "Active"
 | |
| 
 | |
| 		frappe.db.set_value("Serial No", serial_no.get("name"), "status", status)
 | |
| 
 | |
| 	if frappe.db.auto_commit_on_many_writes:
 | |
| 		frappe.db.auto_commit_on_many_writes = False
 |