66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 | |
| # License: GNU General Public License v3. See license.txt
 | |
| 
 | |
| from __future__ import unicode_literals
 | |
| import frappe
 | |
| 
 | |
| def execute():
 | |
| 	frappe.db.sql("update tabItem set has_batch_no = 0 where ifnull(has_batch_no, '') = ''")
 | |
| 	frappe.db.sql("update tabItem set has_serial_no = 0 where ifnull(has_serial_no, '') = ''")
 | |
| 
 | |
| 	item_list = frappe.db.sql("""select name, has_batch_no, has_serial_no from tabItem
 | |
| 		where is_stock_item = 1""", as_dict=1)
 | |
| 
 | |
| 	sle_count = get_sle_count()
 | |
| 	sle_with_batch = get_sle_with_batch()
 | |
| 	sle_with_serial = get_sle_with_serial()
 | |
| 
 | |
| 	batch_items = get_items_with_batch()
 | |
| 	serialized_items = get_items_with_serial()
 | |
| 
 | |
| 	for d in item_list:
 | |
| 		if d.has_batch_no == 1:
 | |
| 			if d.name not in batch_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_batch.get(d.name):
 | |
| 					frappe.db.set_value("Item", d.name, "has_batch_no", 0)
 | |
| 		else:
 | |
| 			if d.name in batch_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_batch.get(d.name)):
 | |
| 				frappe.db.set_value("Item", d.name, "has_batch_no", 1)
 | |
| 
 | |
| 		if d.has_serial_no == 1:
 | |
| 			if d.name not in serialized_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_serial.get(d.name):
 | |
| 				frappe.db.set_value("Item", d.name, "has_serial_no", 0)
 | |
| 		else:
 | |
| 			if d.name in serialized_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_serial.get(d.name)):
 | |
| 				frappe.db.set_value("Item", d.name, "has_serial_no", 1)
 | |
| 
 | |
| 
 | |
| def get_sle_count():
 | |
| 	sle_count = {}
 | |
| 	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry` group by item_code""", as_dict=1):
 | |
| 		sle_count.setdefault(d.item_code, d.cnt)
 | |
| 
 | |
| 	return sle_count
 | |
| 
 | |
| def get_sle_with_batch():
 | |
| 	sle_with_batch = {}
 | |
| 	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
 | |
| 		where ifnull(batch_no, '') != '' group by item_code""", as_dict=1):
 | |
| 			sle_with_batch.setdefault(d.item_code, d.cnt)
 | |
| 
 | |
| 	return sle_with_batch
 | |
| 
 | |
| 
 | |
| def get_sle_with_serial():
 | |
| 	sle_with_serial = {}
 | |
| 	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
 | |
| 		where ifnull(serial_no, '') != '' group by item_code""", as_dict=1):
 | |
| 			sle_with_serial.setdefault(d.item_code, d.cnt)
 | |
| 
 | |
| 	return sle_with_serial
 | |
| 
 | |
| def get_items_with_batch():
 | |
| 	return frappe.db.sql_list("select item from tabBatch")
 | |
| 
 | |
| def get_items_with_serial():
 | |
| 	return frappe.db.sql_list("select item_code from `tabSerial No`")
 |