import frappe from frappe.utils import cint def execute(): frappe.reload_doc("e_commerce", "doctype", "e_commerce_settings") frappe.reload_doc("portal", "doctype", "website_filter_field") frappe.reload_doc("portal", "doctype", "website_attribute") products_settings_fields = [ "hide_variants", "products_per_page", "enable_attribute_filters", "enable_field_filters", ] shopping_cart_settings_fields = [ "enabled", "show_attachments", "show_price", "show_stock_availability", "enable_variants", "show_contact_us_button", "show_quantity_in_website", "show_apply_coupon_code_in_website", "allow_items_not_in_stock", "company", "price_list", "default_customer_group", "quotation_series", "enable_checkout", "payment_success_url", "payment_gateway_account", "save_quotations_as_draft", ] settings = frappe.get_doc("E Commerce Settings") def map_into_e_commerce_settings(doctype, fields): singles = frappe.qb.DocType("Singles") query = ( frappe.qb.from_(singles) .select(singles["field"], singles.value) .where((singles.doctype == doctype) & (singles["field"].isin(fields))) ) data = query.run(as_dict=True) # {'enable_attribute_filters': '1', ...} mapper = {row.field: row.value for row in data} for key, value in mapper.items(): value = cint(value) if (value and value.isdigit()) else value settings.update({key: value}) settings.save() # shift data to E Commerce Settings map_into_e_commerce_settings("Products Settings", products_settings_fields) map_into_e_commerce_settings("Shopping Cart Settings", shopping_cart_settings_fields) # move filters and attributes tables to E Commerce Settings from Products Settings for doctype in ("Website Filter Field", "Website Attribute"): frappe.db.set_value( doctype, {"parent": "Products Settings"}, {"parenttype": "E Commerce Settings", "parent": "E Commerce Settings"}, update_modified=False, )