- Delete Image field and set `website_image` as form's image field for uploads - Remove instances of `image` field access via Website Item - Item -> Web Item via Desk: Map Item's `image` to Web Item's `website_image` - Item -> Web Item via patch: `website_image` will be mapped with thumbnail - Remove magic that auto-sets `website_image` from `image` in Website Item
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import frappe
 | |
| 
 | |
| from erpnext.e_commerce.doctype.website_item.website_item import make_website_item
 | |
| 
 | |
| 
 | |
| def execute():
 | |
| 	frappe.reload_doc("e_commerce", "doctype", "website_item")
 | |
| 	frappe.reload_doc("e_commerce", "doctype", "website_item_tabbed_section")
 | |
| 	frappe.reload_doc("e_commerce", "doctype", "website_offer")
 | |
| 	frappe.reload_doc("e_commerce", "doctype", "recommended_items")
 | |
| 	frappe.reload_doc("e_commerce", "doctype", "e_commerce_settings")
 | |
| 	frappe.reload_doc("stock", "doctype", "item")
 | |
| 
 | |
| 	item_fields = [
 | |
| 		"item_code",
 | |
| 		"item_name",
 | |
| 		"item_group",
 | |
| 		"stock_uom",
 | |
| 		"brand",
 | |
| 		"has_variants",
 | |
| 		"variant_of",
 | |
| 		"description",
 | |
| 		"weightage",
 | |
| 	]
 | |
| 	web_fields_to_map = [
 | |
| 		"route",
 | |
| 		"slideshow",
 | |
| 		"website_image_alt",
 | |
| 		"website_warehouse",
 | |
| 		"web_long_description",
 | |
| 		"website_content",
 | |
| 		"website_image",
 | |
| 		"thumbnail",
 | |
| 	]
 | |
| 
 | |
| 	# get all valid columns (fields) from Item master DB schema
 | |
| 	item_table_fields = frappe.db.sql("desc `tabItem`", as_dict=1)  # nosemgrep
 | |
| 	item_table_fields = [d.get("Field") for d in item_table_fields]
 | |
| 
 | |
| 	# prepare fields to query from Item, check if the web field exists in Item master
 | |
| 	web_query_fields = []
 | |
| 	for web_field in web_fields_to_map:
 | |
| 		if web_field in item_table_fields:
 | |
| 			web_query_fields.append(web_field)
 | |
| 			item_fields.append(web_field)
 | |
| 
 | |
| 	# check if the filter fields exist in Item master
 | |
| 	or_filters = {}
 | |
| 	for field in ["show_in_website", "show_variant_in_website"]:
 | |
| 		if field in item_table_fields:
 | |
| 			or_filters[field] = 1
 | |
| 
 | |
| 	if not web_query_fields or not or_filters:
 | |
| 		# web fields to map are not present in Item master schema
 | |
| 		# most likely a fresh installation that doesnt need this patch
 | |
| 		return
 | |
| 
 | |
| 	items = frappe.db.get_all("Item", fields=item_fields, or_filters=or_filters)
 | |
| 	total_count = len(items)
 | |
| 
 | |
| 	for count, item in enumerate(items, start=1):
 | |
| 		if frappe.db.exists("Website Item", {"item_code": item.item_code}):
 | |
| 			continue
 | |
| 
 | |
| 		# make new website item from item (publish item)
 | |
| 		website_item = make_website_item(item, save=False)
 | |
| 		website_item.ranking = item.get("weightage")
 | |
| 
 | |
| 		for field in web_fields_to_map:
 | |
| 			website_item.update({field: item.get(field)})
 | |
| 
 | |
| 		website_item.save()
 | |
| 
 | |
| 		# move Website Item Group & Website Specification table to Website Item
 | |
| 		for doctype in ("Website Item Group", "Item Website Specification"):
 | |
| 			frappe.db.set_value(
 | |
| 				doctype,
 | |
| 				{"parenttype": "Item", "parent": item.item_code},  # filters
 | |
| 				{"parenttype": "Website Item", "parent": website_item.name},  # value dict
 | |
| 			)
 | |
| 
 | |
| 		if count % 20 == 0:  # commit after every 20 items
 | |
| 			frappe.db.commit()
 | |
| 
 | |
| 		frappe.utils.update_progress_bar("Creating Website Items", count, total_count)
 |