diff --git a/frappe/desk/page/form_builder/form_builder.js b/frappe/desk/page/form_builder/form_builder.js index cc29084b69..d2c6c8f3ab 100644 --- a/frappe/desk/page/form_builder/form_builder.js +++ b/frappe/desk/page/form_builder/form_builder.js @@ -19,7 +19,10 @@ frappe.pages["form-builder"].on_page_show = function (wrapper) { function load_form_builder(wrapper) { let route = frappe.get_route(); route = route.filter((a) => a); - if (route.length > 1) { + + if (route.length > 1 && route[1] === "new-doctype") { + new_doctype(route[2]); + } else if (route.length > 1) { let doctype = route[1]; let is_customize_form = route[2] === "customize"; @@ -44,159 +47,165 @@ function load_form_builder(wrapper) { }); }); } else { - let d = new frappe.ui.Dialog({ - title: __("Select DocType"), - fields: [ - { - label: __("Select DocType"), - fieldname: "doctype", - fieldtype: "Link", - options: "DocType", - only_select: 1, - }, - { - label: __("Customize"), - fieldname: "customize", - fieldtype: "Check", - }, - ], - primary_action_label: __("Edit"), - primary_action({ doctype, customize }) { - if (customize) { - frappe.model.with_doctype(doctype).then(() => { - let meta = frappe.get_meta(doctype); - if (in_list(frappe.model.core_doctypes_list, this.doctype)) - frappe.throw(__("Core DocTypes cannot be customized.")); - - if (meta.issingle) - frappe.throw(__("Single DocTypes cannot be customized.")); - - if (meta.custom) - frappe.throw( - __( - "Only standard DocTypes are allowed to be customized from Customize Form." - ) - ); - frappe.set_route("form-builder", doctype, "customize"); - }); - } else { - frappe.set_route("form-builder", doctype); - } - }, - secondary_action_label: __("Create New DocType"), - secondary_action() { - let doctype = d.get_value("doctype") || ""; - let non_developer = - frappe.session.user !== "Administrator" || !frappe.boot.developer_mode; - d.hide(); - let new_d = new frappe.ui.Dialog({ - title: __("Create New DocType"), - fields: [ - { - label: __("DocType Name"), - fieldname: "doctype_name", - fieldtype: "Data", - default: doctype, - reqd: 1, - }, - { fieldtype: "Column Break" }, - { - label: __("Module"), - fieldname: "module", - fieldtype: "Link", - options: "Module Def", - reqd: 1, - }, - { fieldtype: "Section Break" }, - { - label: __("Is Submittable"), - fieldname: "is_submittable", - fieldtype: "Check", - description: __( - "Once submitted, submittable documents cannot be changed. They can only be Cancelled and Amended." - ), - depends_on: "eval:!doc.istable && !doc.issingle", - }, - { - label: __("Is Child Table"), - fieldname: "istable", - fieldtype: "Check", - description: __("Child Tables are shown as a Grid in other DocTypes"), - depends_on: "eval:!doc.is_submittable && !doc.issingle", - }, - { - label: __("Editable Grid"), - fieldname: "editable_grid", - fieldtype: "Check", - depends_on: "istable", - default: 1, - }, - { - label: __("Is Single"), - fieldname: "issingle", - fieldtype: "Check", - description: __( - "Single Types have only one record no tables associated. Values are stored in tabSingles" - ), - depends_on: "eval:!doc.istable && !doc.is_submittable", - }, - { - label: __("Custom?"), - fieldname: "custom", - fieldtype: "Check", - default: non_developer, - read_only: non_developer, - }, - ], - primary_action_label: __("Create & Continue"), - primary_action(values) { - if (!values.istable) values.editable_grid = 0; - frappe.db - .insert({ - doctype: "DocType", - name: values.doctype_name, - module: values.module, - istable: values.istable, - editable_grid: values.editable_grid, - issingle: values.issingle, - custom: values.custom, - is_submittable: values.is_submittable, - permissions: [ - { - create: 1, - delete: 1, - email: 1, - export: 1, - print: 1, - read: 1, - report: 1, - role: "System Manager", - share: 1, - write: 1, - }, - ], - fields: [ - { - label: "Title", - fieldname: "title", - fieldtype: "Data", - }, - ], - }) - .then((doc) => { - frappe.set_route("form-builder", doc.name); - }); - }, - secondary_action_label: __("Back"), - secondary_action() { - new_d.hide(); - d.show(); - }, - }); - new_d.show(); - }, - }); - - d.show(); + select_doctype(); } } + +function select_doctype() { + let d = new frappe.ui.Dialog({ + title: __("Select DocType"), + fields: [ + { + label: __("Select DocType"), + fieldname: "doctype", + fieldtype: "Link", + options: "DocType", + only_select: 1, + }, + { + label: __("Customize"), + fieldname: "customize", + fieldtype: "Check", + }, + ], + primary_action_label: __("Edit"), + primary_action({ doctype, customize }) { + if (customize) { + frappe.model.with_doctype(doctype).then(() => { + let meta = frappe.get_meta(doctype); + if (in_list(frappe.model.core_doctypes_list, this.doctype)) + frappe.throw(__("Core DocTypes cannot be customized.")); + + if (meta.issingle) frappe.throw(__("Single DocTypes cannot be customized.")); + + if (meta.custom) + frappe.throw( + __( + "Only standard DocTypes are allowed to be customized from Customize Form." + ) + ); + frappe.set_route("form-builder", doctype, "customize"); + }); + } else { + frappe.set_route("form-builder", doctype); + } + }, + secondary_action_label: __("Create New DocType"), + secondary_action() { + let doctype = d.get_value("doctype") || ""; + d.hide(); + frappe.set_route("form-builder", "new-doctype", doctype); + }, + }); + + d.show(); +} + +function new_doctype(doctype) { + let non_developer = frappe.session.user !== "Administrator" || !frappe.boot.developer_mode; + let new_d = new frappe.ui.Dialog({ + title: __("Create New DocType"), + fields: [ + { + label: __("DocType Name"), + fieldname: "doctype_name", + fieldtype: "Data", + default: doctype, + reqd: 1, + }, + { fieldtype: "Column Break" }, + { + label: __("Module"), + fieldname: "module", + fieldtype: "Link", + options: "Module Def", + reqd: 1, + }, + { fieldtype: "Section Break" }, + { + label: __("Is Submittable"), + fieldname: "is_submittable", + fieldtype: "Check", + description: __( + "Once submitted, submittable documents cannot be changed. They can only be Cancelled and Amended." + ), + depends_on: "eval:!doc.istable && !doc.issingle", + }, + { + label: __("Is Child Table"), + fieldname: "istable", + fieldtype: "Check", + description: __("Child Tables are shown as a Grid in other DocTypes"), + depends_on: "eval:!doc.is_submittable && !doc.issingle", + }, + { + label: __("Editable Grid"), + fieldname: "editable_grid", + fieldtype: "Check", + depends_on: "istable", + default: 1, + }, + { + label: __("Is Single"), + fieldname: "issingle", + fieldtype: "Check", + description: __( + "Single Types have only one record no tables associated. Values are stored in tabSingles" + ), + depends_on: "eval:!doc.istable && !doc.is_submittable", + }, + { + label: __("Custom?"), + fieldname: "custom", + fieldtype: "Check", + default: non_developer, + read_only: non_developer, + }, + ], + primary_action_label: __("Create & Continue"), + primary_action(values) { + if (!values.istable) values.editable_grid = 0; + frappe.db + .insert({ + doctype: "DocType", + name: values.doctype_name, + module: values.module, + istable: values.istable, + editable_grid: values.editable_grid, + issingle: values.issingle, + custom: values.custom, + is_submittable: values.is_submittable, + permissions: [ + { + create: 1, + delete: 1, + email: 1, + export: 1, + print: 1, + read: 1, + report: 1, + role: "System Manager", + share: 1, + write: 1, + }, + ], + fields: [ + { + label: "Title", + fieldname: "title", + fieldtype: "Data", + }, + ], + }) + .then((doc) => { + frappe.set_route("form-builder", doc.name); + }); + }, + secondary_action_label: __("Back"), + secondary_action() { + new_d.hide(); + frappe.set_route("form-builder"); + }, + }); + new_d.show(); +}