211 lines
5.2 KiB
JavaScript
211 lines
5.2 KiB
JavaScript
frappe.pages["form-builder"].on_page_load = function (wrapper) {
|
|
frappe.ui.make_app_page({
|
|
parent: wrapper,
|
|
title: __("Form Builder"),
|
|
single_column: true,
|
|
});
|
|
|
|
// hot reload in development
|
|
if (frappe.boot.developer_mode) {
|
|
frappe.hot_update = frappe.hot_update || [];
|
|
frappe.hot_update.push(() => load_form_builder(wrapper));
|
|
}
|
|
};
|
|
|
|
frappe.pages["form-builder"].on_page_show = function (wrapper) {
|
|
load_form_builder(wrapper);
|
|
};
|
|
|
|
function load_form_builder(wrapper) {
|
|
let route = frappe.get_route();
|
|
route = route.filter((a) => a);
|
|
|
|
if (route.length > 1 && route[1] === "new-doctype") {
|
|
frappe.pages["form-builder"].new_doctype(route[2]);
|
|
} else if (route.length > 1) {
|
|
let doctype = route[1];
|
|
let is_customize_form = route[2] === "customize";
|
|
|
|
if (frappe.form_builder?.doctype) {
|
|
frappe.form_builder.doctype = frappe.form_builder.store.doctype = doctype;
|
|
frappe.form_builder.customize = frappe.form_builder.store.is_customize_form =
|
|
is_customize_form;
|
|
frappe.form_builder.init(true);
|
|
frappe.form_builder.store.fetch();
|
|
return;
|
|
}
|
|
|
|
let $parent = $(wrapper).find(".layout-main-section");
|
|
$parent.empty();
|
|
|
|
frappe.require("form_builder.bundle.js").then(() => {
|
|
frappe.form_builder = new frappe.ui.FormBuilder({
|
|
wrapper: $parent,
|
|
page: wrapper.page,
|
|
doctype: doctype,
|
|
customize: is_customize_form,
|
|
});
|
|
});
|
|
} else {
|
|
frappe.pages["form-builder"].select_doctype();
|
|
}
|
|
}
|
|
|
|
frappe.pages["form-builder"].select_doctype = function () {
|
|
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();
|
|
};
|
|
|
|
frappe.pages["form-builder"].new_doctype = function (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();
|
|
window.history.back();
|
|
},
|
|
});
|
|
new_d.show();
|
|
};
|