diff --git a/frappe/public/js/frappe/web_form/web_form.js b/frappe/public/js/frappe/web_form/web_form.js
index fb0f11bb13..5ee2c22128 100644
--- a/frappe/public/js/frappe/web_form/web_form.js
+++ b/frappe/public/js/frappe/web_form/web_form.js
@@ -30,6 +30,8 @@ export default class WebForm extends frappe.ui.FieldGroup {
this.setup_discard_action();
}
+ this.setup_delete_action();
+
this.setup_previous_next_button();
this.toggle_section();
@@ -174,6 +176,10 @@ export default class WebForm extends frappe.ui.FieldGroup {
$(".web-form-footer .discard-btn").on("click", () => this.discard_form());
}
+ setup_delete_action() {
+ $(".web-form-footer .delete-btn").on("click", () => this.delete_form());
+ }
+
discard_form() {
let path = window.location.href;
// remove new or edit after last / from url
@@ -192,6 +198,24 @@ export default class WebForm extends frappe.ui.FieldGroup {
return false;
}
+ delete_form() {
+ const path = window.location.href;
+ frappe.confirm(__("Are you sure you want to delete this record?"), () => {
+ frappe.call({
+ method: "frappe.website.doctype.web_form.web_form.delete",
+ args: {
+ web_form_name: this.name,
+ docname: this.doc.name,
+ },
+ callback: () => {
+ frappe.msgprint(__("Deleted!"));
+ window.location.href = path.substring(0, path.lastIndexOf("/"));
+ },
+ });
+ });
+ return false;
+ }
+
validate_section() {
if (this.allow_incomplete) return true;
diff --git a/frappe/website/doctype/web_form/templates/web_form.html b/frappe/website/doctype/web_form/templates/web_form.html
index 876e3d280b..e3dff6f815 100644
--- a/frappe/website/doctype/web_form/templates/web_form.html
+++ b/frappe/website/doctype/web_form/templates/web_form.html
@@ -46,6 +46,13 @@
{% endif %}
+ {% if has_delete_permission %}
+
+
+ {% endif %}
+
{% endblock %}
{% endmacro %}
diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py
index 490d96771c..4c714c86cd 100644
--- a/frappe/website/doctype/web_form/web_form.py
+++ b/frappe/website/doctype/web_form/web_form.py
@@ -152,6 +152,9 @@ def get_context(context):
else:
context.template = "website/doctype/web_form/templates/web_form.html"
+ # By default, assume no delete permissions
+ context.has_delete_permission = False
+
# check permissions
if frappe.form_dict.name:
assert isinstance(frappe.form_dict.name, str | int)
@@ -172,6 +175,10 @@ def get_context(context):
_("You don't have the permissions to access this document"), frappe.PermissionError
)
+ context.has_delete_permission = frappe.has_permission(
+ self.doc_type, "delete", frappe.form_dict.name
+ )
+
if frappe.local.path == self.route:
path = f"/{self.route}/list" if self.show_list else f"/{self.route}/new"
frappe.redirect(path)