Merge branch 'develop' into web-form-list-empty-state
This commit is contained in:
commit
d5b62d4d2d
12 changed files with 31 additions and 30 deletions
|
|
@ -253,8 +253,8 @@ class User(Document):
|
|||
self.email_new_password(new_password)
|
||||
|
||||
except frappe.OutgoingEmailError:
|
||||
print(frappe.get_traceback())
|
||||
pass # email server not set, don't send email
|
||||
# email server not set, don't send email
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
|
||||
@Document.hook
|
||||
def validate_reset_password(self):
|
||||
|
|
|
|||
|
|
@ -44,8 +44,9 @@ frappe.ui.form.on('User Permission', {
|
|||
|
||||
set_applicable_for_constraint: frm => {
|
||||
frm.toggle_reqd('applicable_for', !frm.doc.apply_to_all_doctypes);
|
||||
|
||||
if (frm.doc.apply_to_all_doctypes && frm.doc.applicable_for) {
|
||||
frm.set_value('applicable_for', null);
|
||||
frm.set_value('applicable_for', null, null, true);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ frappe.ui.form.on("Customize Form", {
|
|||
},
|
||||
|
||||
onload: function(frm) {
|
||||
frm.disable_save();
|
||||
frm.set_query("doc_type", function() {
|
||||
return {
|
||||
translate_values: false,
|
||||
|
|
@ -110,7 +109,7 @@ frappe.ui.form.on("Customize Form", {
|
|||
},
|
||||
|
||||
refresh: function(frm) {
|
||||
frm.disable_save();
|
||||
frm.disable_save(true);
|
||||
frm.page.clear_icons();
|
||||
|
||||
if (frm.doc.doc_type) {
|
||||
|
|
@ -169,7 +168,7 @@ frappe.ui.form.on("Customize Form", {
|
|||
doc_type = localStorage.getItem("customize_doctype");
|
||||
}
|
||||
if (doc_type) {
|
||||
setTimeout(() => frm.set_value("doc_type", doc_type), 1000);
|
||||
setTimeout(() => frm.set_value("doc_type", doc_type, false, true), 1000);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -341,11 +340,11 @@ frappe.customize_form.confirm = function(msg, frm) {
|
|||
}
|
||||
|
||||
frappe.customize_form.clear_locals_and_refresh = function(frm) {
|
||||
delete frm.doc.__unsaved;
|
||||
// clear doctype from locals
|
||||
frappe.model.clear_doc("DocType", frm.doc.doc_type);
|
||||
delete frappe.meta.docfield_copy[frm.doc.doc_type];
|
||||
|
||||
frm.refresh();
|
||||
}
|
||||
};
|
||||
|
||||
extend_cscript(cur_frm.cscript, new frappe.model.DocTypeController({frm: cur_frm}));
|
||||
|
|
|
|||
|
|
@ -246,10 +246,12 @@ frappe.ui.form.Form = class FrappeForm {
|
|||
var me = this;
|
||||
|
||||
// on main doc
|
||||
frappe.model.on(me.doctype, "*", function(fieldname, value, doc) {
|
||||
frappe.model.on(me.doctype, "*", function(fieldname, value, doc, skip_dirty_trigger=false) {
|
||||
// set input
|
||||
if (cstr(doc.name) === me.docname) {
|
||||
me.dirty();
|
||||
if (!skip_dirty_trigger) {
|
||||
me.dirty();
|
||||
}
|
||||
|
||||
let field = me.fields_dict[fieldname];
|
||||
field && field.refresh(fieldname);
|
||||
|
|
@ -953,10 +955,12 @@ frappe.ui.form.Form = class FrappeForm {
|
|||
this.toolbar.set_primary_action();
|
||||
}
|
||||
|
||||
disable_save() {
|
||||
disable_save(set_dirty=false) {
|
||||
// IMPORTANT: this function should be called in refresh event
|
||||
this.save_disabled = true;
|
||||
this.toolbar.current_status = null;
|
||||
// field changes should make form dirty
|
||||
this.set_dirty = set_dirty;
|
||||
this.page.clear_primary_action();
|
||||
}
|
||||
|
||||
|
|
@ -1447,7 +1451,7 @@ frappe.ui.form.Form = class FrappeForm {
|
|||
return doc;
|
||||
}
|
||||
|
||||
set_value(field, value, if_missing) {
|
||||
set_value(field, value, if_missing, skip_dirty_trigger=false) {
|
||||
var me = this;
|
||||
var _set = function(f, v) {
|
||||
var fieldobj = me.fields_dict[f];
|
||||
|
|
@ -1467,7 +1471,7 @@ frappe.ui.form.Form = class FrappeForm {
|
|||
me.refresh_field(f);
|
||||
return Promise.resolve();
|
||||
} else {
|
||||
return frappe.model.set_value(me.doctype, me.doc.name, f, v);
|
||||
return frappe.model.set_value(me.doctype, me.doc.name, f, v, me.fieldtype, skip_dirty_trigger);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -534,14 +534,14 @@ frappe.ui.form.Toolbar = class Toolbar {
|
|||
});
|
||||
}
|
||||
show_title_as_dirty() {
|
||||
if(this.frm.save_disabled)
|
||||
if (this.frm.save_disabled && !this.frm.set_dirty)
|
||||
return;
|
||||
|
||||
if(this.frm.doc.__unsaved) {
|
||||
if (this.frm.is_dirty()) {
|
||||
this.page.set_indicator(__("Not Saved"), "orange");
|
||||
}
|
||||
|
||||
$(this.frm.wrapper).attr("data-state", this.frm.doc.__unsaved ? "dirty" : "clean");
|
||||
$(this.frm.wrapper).attr("data-state", this.frm.is_dirty() ? "dirty" : "clean");
|
||||
}
|
||||
|
||||
show_jump_to_field_dialog() {
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@ export default class ListSettings {
|
|||
let me = this;
|
||||
|
||||
if (me.removed_fields) {
|
||||
me.removed_fields.concat(fields);
|
||||
me.removed_fields = me.removed_fields.concat(fields);
|
||||
} else {
|
||||
me.removed_fields = fields;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -412,7 +412,7 @@ $.extend(frappe.model, {
|
|||
}
|
||||
},
|
||||
|
||||
set_value: function(doctype, docname, fieldname, value, fieldtype) {
|
||||
set_value: function(doctype, docname, fieldname, value, fieldtype, skip_dirty_trigger=false) {
|
||||
/* help: Set a value locally (if changed) and execute triggers */
|
||||
|
||||
var doc;
|
||||
|
|
@ -438,11 +438,11 @@ $.extend(frappe.model, {
|
|||
}
|
||||
|
||||
doc[key] = value;
|
||||
tasks.push(() => frappe.model.trigger(key, value, doc));
|
||||
tasks.push(() => frappe.model.trigger(key, value, doc, skip_dirty_trigger));
|
||||
} else {
|
||||
// execute link triggers (want to reselect to execute triggers)
|
||||
if(in_list(["Link", "Dynamic Link"], fieldtype) && doc) {
|
||||
tasks.push(() => frappe.model.trigger(key, value, doc));
|
||||
tasks.push(() => frappe.model.trigger(key, value, doc, skip_dirty_trigger));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -467,7 +467,7 @@ $.extend(frappe.model, {
|
|||
frappe.model.events[doctype][fieldname].push(fn);
|
||||
},
|
||||
|
||||
trigger: function(fieldname, value, doc) {
|
||||
trigger: function(fieldname, value, doc, skip_dirty_trigger=false) {
|
||||
const tasks = [];
|
||||
|
||||
function enqueue_events(events) {
|
||||
|
|
@ -477,7 +477,7 @@ $.extend(frappe.model, {
|
|||
if (!fn) continue;
|
||||
|
||||
tasks.push(() => {
|
||||
const return_value = fn(fieldname, value, doc);
|
||||
const return_value = fn(fieldname, value, doc, skip_dirty_trigger);
|
||||
|
||||
// if the trigger returns a promise, return it,
|
||||
// or use the default promise frappe.after_ajax
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ Object.assign(frappe.utils, {
|
|||
if (tt && (tt.substr(0, 1)===">" || tt.substr(0, 4)===">")) {
|
||||
part.push(t);
|
||||
} else {
|
||||
out.concat(part);
|
||||
out = out.concat(part);
|
||||
out.push(t);
|
||||
part = [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1026,7 +1026,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView {
|
|||
}
|
||||
if (!docfield || docfield.report_hide) return;
|
||||
|
||||
let title = __(docfield ? docfield.label : toTitle(fieldname));
|
||||
let title = __(docfield.label);
|
||||
if (doctype !== this.doctype) {
|
||||
title += ` (${__(doctype)})`;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -650,8 +650,6 @@ def extract_messages_from_code(code):
|
|||
if isinstance(e, InvalidIncludePath):
|
||||
frappe.clear_last_message()
|
||||
|
||||
pass
|
||||
|
||||
messages = []
|
||||
pattern = r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,\s*(.)*?\s*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)"
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import click
|
|||
|
||||
# imports - module imports
|
||||
import frappe
|
||||
from frappe import _, conf
|
||||
from frappe import conf
|
||||
from frappe.utils import get_file_size, get_url, now, now_datetime, cint
|
||||
from frappe.utils.password import get_encryption_key
|
||||
|
||||
|
|
@ -505,7 +505,7 @@ download only after 24 hours.""" % {
|
|||
datetime_str.strftime("%d/%m/%Y %H:%M:%S") + """ - Backup ready to be downloaded"""
|
||||
)
|
||||
|
||||
frappe.sendmail(recipients=recipient_list, msg=msg, subject=subject)
|
||||
frappe.sendmail(recipients=recipient_list, message=msg, subject=subject)
|
||||
return recipient_list
|
||||
|
||||
|
||||
|
|
@ -779,7 +779,7 @@ if __name__ == "__main__":
|
|||
db_type=db_type,
|
||||
db_port=db_port,
|
||||
)
|
||||
odb.send_email("abc.sql.gz")
|
||||
odb.send_email()
|
||||
|
||||
if cmd == "delete_temp_backups":
|
||||
delete_temp_backups()
|
||||
|
|
|
|||
|
|
@ -227,7 +227,6 @@ class NestedSet(Document):
|
|||
update_nsm(self)
|
||||
except frappe.DoesNotExistError:
|
||||
if self.flags.on_rollback:
|
||||
pass
|
||||
frappe.message_log.pop()
|
||||
else:
|
||||
raise
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue