Client script for exporting Custom Fields to py create_custom_fields format - ashish-greycube/help GitHub Wiki

  • create client script (list view) with below code
  • add the output to after migrate > create_custom_fields in py file
const remove_nulls = function (obj) {
  return Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null && v != 0 && v != ""));
};

const fields = [
        "dt",
    "label",
    "fieldname",
    "insert_after",
    "length",
    "fieldtype",
    "precision",
    "options",
    "fetch_from",
    "fetch_if_empty",
    "collapsible",
    "collapsible_depends_on",
    "default",
    "depends_on",
    "mandatory_depends_on",
    "read_only_depends_on",
    "reqd",
    "unique",
    "read_only",
    "ignore_user_permissions",
    "hidden",
    "allow_on_submit",
    "in_list_view",
    "in_standard_filter",
    "allow_in_quick_entry",
    "translatable",
    "description",
    "columns"
    ]
    
const get_custom_fields = function (arr) {
  let out = {};
  for (const itr of arr) {
      let dt = itr["dt"];
    if (!out[dt]) {
      out[dt] = [];
    }
    delete itr["dt"];
    out[dt].push(remove_nulls(itr));
  }
  return out;
};    

frappe.listview_settings["Custom Field"] = {
  onload: function (listview) {
    listview.page.add_menu_item(__("Export Fields"), function () {
      let items = listview.get_checked_items(true);
      frappe.db
        .get_list("Custom Field", {
          filters: { name: ["in", items] },
          order_by: "idx",
          fields: fields,
        })
        .then((r) => {
          let out = get_custom_fields(r);
          frappe.utils.copy_to_clipboard(JSON.stringify(out));
          console.log(JSON.stringify(out));
        });
    });
  },
};