From eb2c725dba85c2a3a977cf3c13a8bb0c6bcf80bf Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 2 Aug 2017 17:53:28 +0530 Subject: [PATCH 1/2] [fix] stop action if trigger fails for validate and before_, fixes frappe/erpnext#10200 (#3842) * [fix] stop action if trigger fails for validate and before_, fixes frappe/erpnext#10200 * [fix] stop action if trigger fails for validate and before_, fixes frappe/erpnext#10200 * [fix] codacy * [fix] add test to tests.txt --- .../customize_form/test_customize_form.js | 31 +++++++++++++++++++ frappe/public/js/frappe/form/grid_row.js | 25 +++++++++------ frappe/public/js/legacy/form.js | 16 ++++++---- frappe/tests/ui/tests.txt | 3 +- 4 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 frappe/custom/doctype/customize_form/test_customize_form.js diff --git a/frappe/custom/doctype/customize_form/test_customize_form.js b/frappe/custom/doctype/customize_form/test_customize_form.js new file mode 100644 index 0000000000..144d11a9ae --- /dev/null +++ b/frappe/custom/doctype/customize_form/test_customize_form.js @@ -0,0 +1,31 @@ +// try and delete a standard row, it should fail + +QUnit.module('Customize Form'); + +QUnit.test("test customize form", function(assert) { + assert.expect(2); + let done = assert.async(); + frappe.run_serially([ + () => frappe.set_route('Form', 'Customize Form'), + () => cur_frm.set_value('doc_type', 'ToDo'), + + () => frappe.timeout(2), + + () => assert.equal(cur_frm.doc.fields[1].fieldname, 'status'), + + // open "status" row + () => cur_frm.fields_dict.fields.grid.grid_rows[1].toggle_view(), + () => frappe.timeout(0.5), + + // try deleting it + () => $('.grid-delete-row:visible').click(), + + () => frappe.timeout(0.5), + () => frappe.hide_msgprint(), + () => frappe.timeout(0.5), + + // status still exists + () => assert.equal(cur_frm.doc.fields[1].fieldname, 'status'), + () => done() + ]); +}); diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 3ff9f85198..9326c03da7 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -68,15 +68,22 @@ frappe.ui.form.GridRow = Class.extend({ this.hide_form(); } - this.frm.script_manager.trigger("before_" + this.grid.df.fieldname + "_remove", - this.doc.doctype, this.doc.name); - - //this.wrapper.toggle(false); - frappe.model.clear_doc(this.doc.doctype, this.doc.name); - - this.frm.script_manager.trigger(this.grid.df.fieldname + "_remove", - this.doc.doctype, this.doc.name); - this.frm.dirty(); + frappe.run_serially([ + () => { + return this.frm.script_manager.trigger("before_" + this.grid.df.fieldname + "_remove", + this.doc.doctype, this.doc.name); + }, + () => { + frappe.model.clear_doc(this.doc.doctype, this.doc.name); + + this.frm.script_manager.trigger(this.grid.df.fieldname + "_remove", + this.doc.doctype, this.doc.name); + this.frm.dirty(); + } + ]).catch((e) => { + // aborted + console.trace(e); // eslint-disable-line + }); } else { this.grid.df.data = this.grid.df.data.filter(function(d) { return d.name !== me.doc.name; diff --git a/frappe/public/js/legacy/form.js b/frappe/public/js/legacy/form.js index b9f0d1538d..b431446fd3 100644 --- a/frappe/public/js/legacy/form.js +++ b/frappe/public/js/legacy/form.js @@ -720,6 +720,14 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error, resolve) resolve(); }; + var fail = () => { + btn && $(btn).prop("disabled", false); + if(on_error) { + on_error(); + } + resolve(); + }; + if(save_action != "Update") { // validate frappe.validated = true; @@ -728,17 +736,13 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error, resolve) () => this.script_manager.trigger("before_save"), () => { if(!frappe.validated) { - btn && $(btn).prop("disabled", false); - if(on_error) { - on_error(); - } - resolve(); + fail(); return; } frappe.ui.form.save(me, save_action, after_save, btn); } - ]); + ]).catch(fail); } else { frappe.ui.form.save(me, save_action, after_save, btn); } diff --git a/frappe/tests/ui/tests.txt b/frappe/tests/ui/tests.txt index b94f64aa63..7c3c630da6 100644 --- a/frappe/tests/ui/tests.txt +++ b/frappe/tests/ui/tests.txt @@ -3,4 +3,5 @@ frappe/tests/ui/test_list/test_list_filter.js frappe/tests/ui/test_list/test_list_paging.js frappe/tests/ui/test_module_view.js frappe/tests/ui/test_calendar_view.js -frappe/tests/ui/test_linked_with.js \ No newline at end of file +frappe/tests/ui/test_linked_with.js +frappe/custom/doctype/customize_form/test_customize_form.js \ No newline at end of file From 3f854301e4c69e087b1370ca3b7c834a55a651ea Mon Sep 17 00:00:00 2001 From: mbauskar Date: Wed, 2 Aug 2017 18:38:03 +0600 Subject: [PATCH 2/2] bumped to version 8.6.5 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 3b99b44b9e..70d9b692a7 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '8.6.4' +__version__ = '8.6.5' __title__ = "Frappe Framework" local = Local()