32 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2020, Frappe and Contributors
 | |
| # License: GNU General Public License v3. See license.txt
 | |
| 
 | |
| 
 | |
| import frappe
 | |
| 
 | |
| 
 | |
| def execute():
 | |
| 	for document in ["bom", "bom_item", "bom_explosion_item"]:
 | |
| 		frappe.reload_doc('manufacturing', 'doctype', document)
 | |
| 
 | |
| 	frappe.db.sql(" update `tabBOM` set bom_level = 0 where docstatus = 1")
 | |
| 
 | |
| 	bom_list = frappe.db.sql_list("""select name from `tabBOM` bom
 | |
| 		where docstatus=1 and is_active=1 and not exists(select bom_no from `tabBOM Item`
 | |
| 		where parent=bom.name and ifnull(bom_no, '')!='')""")
 | |
| 
 | |
| 	count = 0
 | |
| 	while(count < len(bom_list)):
 | |
| 		for parent_bom in get_parent_boms(bom_list[count]):
 | |
| 			bom_doc = frappe.get_cached_doc("BOM", parent_bom)
 | |
| 			bom_doc.set_bom_level(update=True)
 | |
| 			bom_list.append(parent_bom)
 | |
| 		count += 1
 | |
| 
 | |
| def get_parent_boms(bom_no):
 | |
| 	return frappe.db.sql_list("""
 | |
| 		select distinct bom_item.parent from `tabBOM Item` bom_item
 | |
| 		where bom_item.bom_no = %s and bom_item.docstatus=1 and bom_item.parenttype='BOM'
 | |
| 			and exists(select bom.name from `tabBOM` bom where bom.name=bom_item.parent and bom.is_active=1)
 | |
| 	""", bom_no)
 |