diff --git a/frappe/client.py b/frappe/client.py index 4f02ff78be..80c5a885bb 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -185,7 +185,9 @@ def save(doc): if isinstance(doc, string_types): doc = json.loads(doc) - doc = frappe.get_doc(doc).save() + doc = frappe.get_doc(doc) + doc.save() + return doc.as_dict() @frappe.whitelist() diff --git a/frappe/public/js/frappe/chat.js b/frappe/public/js/frappe/chat.js index 9877930052..16907f52c2 100644 --- a/frappe/public/js/frappe/chat.js +++ b/frappe/public/js/frappe/chat.js @@ -178,11 +178,57 @@ frappe.datetime.compare = (a, b) => { } // frappe.quick_edit -frappe.quick_edit = (doctype, docname) => { - const dialog = new frappe.ui.Dialog({ - title: __(`Edit ${doctype}`) +frappe.quick_edit = (doctype, docname, fn) => { + return new Promise(resolve => { + frappe.model.with_doctype(doctype, () => { + frappe.db.get_doc(doctype, docname).then(doc => { + const meta = frappe.get_meta(doctype) + const fields = meta.fields + const required = fields.filter(f => f.reqd || f.bold && !f.read_only) + + const dialog = new frappe.ui.Dialog({ + title: __(`Edit ${doctype} (${docname})`), + fields: required, + action: { + primary: { + label: __("Save"), + onsubmit: (values) => { + frappe.call('frappe.client.save', + { doc: { doctype: doctype, docname: docname, ...doc, ...values } }) + .then(r => { + if ( fn ) + fn(r.message) + + resolve(r.message) + }) + + dialog.hide() + } + }, + secondary: { + label: __("Discard") + } + } + }) + dialog.set_values(doc) + + const $element = $(dialog.body) + $element.append(` +