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)