9541354ec7
- 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)
|