diff --git a/frappe/public/js/frappe/form/save.js b/frappe/public/js/frappe/form/save.js index a788ed79c7..fabfe4c0ef 100644 --- a/frappe/public/js/frappe/form/save.js +++ b/frappe/public/js/frappe/form/save.js @@ -114,6 +114,13 @@ frappe.ui.form.save = function(frm, action, callback, btn) { // btn: btn // } $(opts.btn).prop("disabled", true); + + if(frappe.ui.form.is_saving) { + msgprint(__("Already saving. Please wait a few moments.")); + throw "saving"; + } + frappe.ui.form.is_saving = true; + return frappe.call({ freeze: true, method: opts.method, @@ -121,6 +128,9 @@ frappe.ui.form.save = function(frm, action, callback, btn) { callback: function(r) { $(opts.btn).prop("disabled", false); opts.callback && opts.callback(r); + }, + always: function() { + frappe.ui.form.is_saving = false; } }) }; diff --git a/frappe/public/js/frappe/request.js b/frappe/public/js/frappe/request.js index 87aee102f5..1618d213e5 100644 --- a/frappe/public/js/frappe/request.js +++ b/frappe/public/js/frappe/request.js @@ -29,6 +29,7 @@ frappe.call = function(opts) { args: args, success: opts.callback, error: opts.error, + always: opts.always, btn: opts.btn, freeze: opts.freeze, show_spinner: !opts.no_spinner, @@ -124,6 +125,7 @@ frappe.request.call = function(opts) { data = JSON.parse(data.responseText); } frappe.request.cleanup(opts, data); + if(opts.always) opts.always(data); }) .done(function(data, textStatus, xhr) { var status_code_handler = statusCode[xhr.statusCode().status];