Merge branch 'hotfix'

This commit is contained in:
Nabin Hait 2018-03-26 14:42:50 +05:30
commit d58c1c88e2
3 changed files with 34 additions and 19 deletions

View file

@ -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()

View file

@ -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];

View file

@ -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