@@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json | |||||
from .exceptions import * | from .exceptions import * | ||||
from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template | 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" | __title__ = "Frappe Framework" | ||||
local = Local() | local = Local() | ||||
@@ -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() | |||||
]); | |||||
}); |
@@ -68,15 +68,22 @@ frappe.ui.form.GridRow = Class.extend({ | |||||
this.hide_form(); | 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 { | } else { | ||||
this.grid.df.data = this.grid.df.data.filter(function(d) { | this.grid.df.data = this.grid.df.data.filter(function(d) { | ||||
return d.name !== me.doc.name; | return d.name !== me.doc.name; | ||||
@@ -720,6 +720,14 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error, resolve) | |||||
resolve(); | resolve(); | ||||
}; | }; | ||||
var fail = () => { | |||||
btn && $(btn).prop("disabled", false); | |||||
if(on_error) { | |||||
on_error(); | |||||
} | |||||
resolve(); | |||||
}; | |||||
if(save_action != "Update") { | if(save_action != "Update") { | ||||
// validate | // validate | ||||
frappe.validated = true; | 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"), | () => this.script_manager.trigger("before_save"), | ||||
() => { | () => { | ||||
if(!frappe.validated) { | if(!frappe.validated) { | ||||
btn && $(btn).prop("disabled", false); | |||||
if(on_error) { | |||||
on_error(); | |||||
} | |||||
resolve(); | |||||
fail(); | |||||
return; | return; | ||||
} | } | ||||
frappe.ui.form.save(me, save_action, after_save, btn); | frappe.ui.form.save(me, save_action, after_save, btn); | ||||
} | } | ||||
]); | |||||
]).catch(fail); | |||||
} else { | } else { | ||||
frappe.ui.form.save(me, save_action, after_save, btn); | frappe.ui.form.save(me, save_action, after_save, btn); | ||||
} | } | ||||
@@ -8,4 +8,5 @@ frappe/tests/ui/test_kanban/test_kanban_view.js | |||||
frappe/tests/ui/test_kanban/test_kanban_filters.js | frappe/tests/ui/test_kanban/test_kanban_filters.js | ||||
frappe/tests/ui/test_kanban/test_kanban_column.js | frappe/tests/ui/test_kanban/test_kanban_column.js | ||||
frappe/core/doctype/report/test_query_report.js | frappe/core/doctype/report/test_query_report.js | ||||
frappe/tests/ui/test_linked_with.js | |||||
frappe/tests/ui/test_linked_with.js | |||||
frappe/custom/doctype/customize_form/test_customize_form.js |