From ce7497bd189f83322f5e262c53a1cdea24312efe Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 26 Mar 2018 14:41:52 +0530 Subject: [PATCH 1/2] Sync childtables data, handle submin/cancel fail and fixed incorrect form dirty (#5277) * Sync childtables data, handle submin/cancel fail and fixed incorrect form dirty * minor fix --- frappe/public/js/frappe/model/sync.js | 8 ++++- frappe/public/js/legacy/form.js | 43 ++++++++++++++++----------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/frappe/public/js/frappe/model/sync.js b/frappe/public/js/frappe/model/sync.js index 440b139964..3d9bacaa2a 100644 --- a/frappe/public/js/frappe/model/sync.js +++ b/frappe/public/js/frappe/model/sync.js @@ -103,11 +103,17 @@ $.extend(frappe.model, { // update values in the existing local doc instead of replacing let local_doc = locals[doc.doctype][doc.name]; for (let fieldname in doc) { - if (local_doc[fieldname] instanceof Array) { + let df = frappe.meta.get_field(doc.doctype, fieldname); + if (df && df.fieldtype === 'Table') { // table if (!(doc[fieldname] instanceof Array)) { doc[fieldname] = []; } + + if (!(local_doc[fieldname] instanceof Array)) { + local_doc[fieldname] = []; + } + // child table, override each row and append new rows if required for (let i=0; i < doc[fieldname].length; i++ ) { let d = doc[fieldname][i]; diff --git a/frappe/public/js/legacy/form.js b/frappe/public/js/legacy/form.js index 96b2513f97..696ab4f01f 100644 --- a/frappe/public/js/legacy/form.js +++ b/frappe/public/js/legacy/form.js @@ -195,12 +195,14 @@ _f.Frm.prototype.watch_model_updates = function() { frappe.model.on(me.doctype, "*", function(fieldname, value, doc) { // set input if(doc.name===me.docname) { - if ((value==='' || value===null) && !doc[value]) { + if ((value==='' || value===null) && !doc[fieldname]) { // both the incoming and outgoing values are falsy // the texteditor, summernote, changes nulls to empty strings on render, // so ignore those changes } else { - me.dirty(); + if (value != doc[fieldname]) { + me.dirty(); + } } me.fields_dict[fieldname] && me.fields_dict[fieldname].refresh(fieldname); @@ -761,53 +763,60 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error, resolve) _f.Frm.prototype.savesubmit = function(btn, callback, on_error) { var me = this; + let handle_fail = () => { + $(btn).prop('disabled', false); + if (on_error) { + on_error(); + } + } + return new Promise(resolve => { this.validate_form_action("Submit"); frappe.confirm(__("Permanently Submit {0}?", [this.docname]), function() { frappe.validated = true; me.script_manager.trigger("before_submit").then(function() { if(!frappe.validated) { - if(on_error) { - on_error(); - } + handle_fail(); return; } me.save('Submit', function(r) { if(r.exc) { - if (on_error) { - on_error(); - } + handle_fail(); } else { frappe.utils.play_sound("submit"); callback && callback(); me.script_manager.trigger("on_submit") .then(() => resolve(me)); } - }, btn, on_error, resolve); + }, btn, () => handle_fail(), resolve); }); - }, on_error); + }, () => handle_fail() ); }); }; _f.Frm.prototype.savecancel = function(btn, callback, on_error) { var me = this; + + let handle_fail = () => { + $(btn).prop('disabled', false); + if (on_error) { + on_error(); + } + } + this.validate_form_action('Cancel'); frappe.confirm(__("Permanently Cancel {0}?", [this.docname]), function() { frappe.validated = true; me.script_manager.trigger("before_cancel").then(function() { if(!frappe.validated) { - if(on_error) { - on_error(); - } + handle_fail(); return; } var after_cancel = function(r) { if(r.exc) { - if (on_error) { - on_error(); - } + handle_fail(); } else { frappe.utils.play_sound("cancel"); me.refresh(); @@ -817,7 +826,7 @@ _f.Frm.prototype.savecancel = function(btn, callback, on_error) { }; frappe.ui.form.save(me, "cancel", after_cancel, btn); }); - }, on_error); + }, () => handle_fail()); }; // delete the record From 6bf29f5025db2edce992fee5c25fa2cf926ddeee Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 26 Mar 2018 15:12:50 +0600 Subject: [PATCH 2/2] bumped to version 10.1.10 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 67d45baa71..e13442b94b 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__ = '10.1.9' +__version__ = '10.1.10' __title__ = "Frappe Framework" local = Local()