浏览代码

Merge branch 'develop' into web-form-list-empty-state

version-14
Jannat Patel 3 年前
committed by GitHub
父节点
当前提交
d5b62d4d2d
找不到此签名对应的密钥 GPG 密钥 ID: 4AEE18F83AFDEB23
共有 12 个文件被更改,包括 31 次插入30 次删除
  1. +2
    -2
      frappe/core/doctype/user/user.py
  2. +2
    -1
      frappe/core/doctype/user_permission/user_permission.js
  3. +4
    -5
      frappe/custom/doctype/customize_form/customize_form.js
  4. +9
    -5
      frappe/public/js/frappe/form/form.js
  5. +3
    -3
      frappe/public/js/frappe/form/toolbar.js
  6. +1
    -1
      frappe/public/js/frappe/list/list_settings.js
  7. +5
    -5
      frappe/public/js/frappe/model/model.js
  8. +1
    -1
      frappe/public/js/frappe/utils/utils.js
  9. +1
    -1
      frappe/public/js/frappe/views/reports/report_view.js
  10. +0
    -2
      frappe/translate.py
  11. +3
    -3
      frappe/utils/backups.py
  12. +0
    -1
      frappe/utils/nestedset.py

+ 2
- 2
frappe/core/doctype/user/user.py 查看文件

@@ -253,8 +253,8 @@ class User(Document):
self.email_new_password(new_password) self.email_new_password(new_password)


except frappe.OutgoingEmailError: 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 @Document.hook
def validate_reset_password(self): def validate_reset_password(self):


+ 2
- 1
frappe/core/doctype/user_permission/user_permission.js 查看文件

@@ -44,8 +44,9 @@ frappe.ui.form.on('User Permission', {


set_applicable_for_constraint: frm => { set_applicable_for_constraint: frm => {
frm.toggle_reqd('applicable_for', !frm.doc.apply_to_all_doctypes); frm.toggle_reqd('applicable_for', !frm.doc.apply_to_all_doctypes);

if (frm.doc.apply_to_all_doctypes && frm.doc.applicable_for) { 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);
} }
}, },




+ 4
- 5
frappe/custom/doctype/customize_form/customize_form.js 查看文件

@@ -14,7 +14,6 @@ frappe.ui.form.on("Customize Form", {
}, },


onload: function(frm) { onload: function(frm) {
frm.disable_save();
frm.set_query("doc_type", function() { frm.set_query("doc_type", function() {
return { return {
translate_values: false, translate_values: false,
@@ -110,7 +109,7 @@ frappe.ui.form.on("Customize Form", {
}, },


refresh: function(frm) { refresh: function(frm) {
frm.disable_save();
frm.disable_save(true);
frm.page.clear_icons(); frm.page.clear_icons();


if (frm.doc.doc_type) { if (frm.doc.doc_type) {
@@ -169,7 +168,7 @@ frappe.ui.form.on("Customize Form", {
doc_type = localStorage.getItem("customize_doctype"); doc_type = localStorage.getItem("customize_doctype");
} }
if (doc_type) { 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) { frappe.customize_form.clear_locals_and_refresh = function(frm) {
delete frm.doc.__unsaved;
// clear doctype from locals // clear doctype from locals
frappe.model.clear_doc("DocType", frm.doc.doc_type); frappe.model.clear_doc("DocType", frm.doc.doc_type);
delete frappe.meta.docfield_copy[frm.doc.doc_type]; delete frappe.meta.docfield_copy[frm.doc.doc_type];

frm.refresh(); frm.refresh();
}
};


extend_cscript(cur_frm.cscript, new frappe.model.DocTypeController({frm: cur_frm})); extend_cscript(cur_frm.cscript, new frappe.model.DocTypeController({frm: cur_frm}));

+ 9
- 5
frappe/public/js/frappe/form/form.js 查看文件

@@ -246,10 +246,12 @@ frappe.ui.form.Form = class FrappeForm {
var me = this; var me = this;


// on main doc // 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 // set input
if (cstr(doc.name) === me.docname) { if (cstr(doc.name) === me.docname) {
me.dirty();
if (!skip_dirty_trigger) {
me.dirty();
}


let field = me.fields_dict[fieldname]; let field = me.fields_dict[fieldname];
field && field.refresh(fieldname); field && field.refresh(fieldname);
@@ -953,10 +955,12 @@ frappe.ui.form.Form = class FrappeForm {
this.toolbar.set_primary_action(); this.toolbar.set_primary_action();
} }


disable_save() {
disable_save(set_dirty=false) {
// IMPORTANT: this function should be called in refresh event // IMPORTANT: this function should be called in refresh event
this.save_disabled = true; this.save_disabled = true;
this.toolbar.current_status = null; this.toolbar.current_status = null;
// field changes should make form dirty
this.set_dirty = set_dirty;
this.page.clear_primary_action(); this.page.clear_primary_action();
} }


@@ -1447,7 +1451,7 @@ frappe.ui.form.Form = class FrappeForm {
return doc; return doc;
} }


set_value(field, value, if_missing) {
set_value(field, value, if_missing, skip_dirty_trigger=false) {
var me = this; var me = this;
var _set = function(f, v) { var _set = function(f, v) {
var fieldobj = me.fields_dict[f]; var fieldobj = me.fields_dict[f];
@@ -1467,7 +1471,7 @@ frappe.ui.form.Form = class FrappeForm {
me.refresh_field(f); me.refresh_field(f);
return Promise.resolve(); return Promise.resolve();
} else { } 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 { } else {


+ 3
- 3
frappe/public/js/frappe/form/toolbar.js 查看文件

@@ -534,14 +534,14 @@ frappe.ui.form.Toolbar = class Toolbar {
}); });
} }
show_title_as_dirty() { show_title_as_dirty() {
if(this.frm.save_disabled)
if (this.frm.save_disabled && !this.frm.set_dirty)
return; return;


if(this.frm.doc.__unsaved) {
if (this.frm.is_dirty()) {
this.page.set_indicator(__("Not Saved"), "orange"); 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() { show_jump_to_field_dialog() {


+ 1
- 1
frappe/public/js/frappe/list/list_settings.js 查看文件

@@ -375,7 +375,7 @@ export default class ListSettings {
let me = this; let me = this;


if (me.removed_fields) { if (me.removed_fields) {
me.removed_fields.concat(fields);
me.removed_fields = me.removed_fields.concat(fields);
} else { } else {
me.removed_fields = fields; me.removed_fields = fields;
} }


+ 5
- 5
frappe/public/js/frappe/model/model.js 查看文件

@@ -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 */ /* help: Set a value locally (if changed) and execute triggers */


var doc; var doc;
@@ -438,11 +438,11 @@ $.extend(frappe.model, {
} }


doc[key] = value; doc[key] = value;
tasks.push(() => frappe.model.trigger(key, value, doc));
tasks.push(() => frappe.model.trigger(key, value, doc, skip_dirty_trigger));
} else { } else {
// execute link triggers (want to reselect to execute triggers) // execute link triggers (want to reselect to execute triggers)
if(in_list(["Link", "Dynamic Link"], fieldtype) && doc) { 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); frappe.model.events[doctype][fieldname].push(fn);
}, },


trigger: function(fieldname, value, doc) {
trigger: function(fieldname, value, doc, skip_dirty_trigger=false) {
const tasks = []; const tasks = [];


function enqueue_events(events) { function enqueue_events(events) {
@@ -477,7 +477,7 @@ $.extend(frappe.model, {
if (!fn) continue; if (!fn) continue;


tasks.push(() => { 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, // if the trigger returns a promise, return it,
// or use the default promise frappe.after_ajax // or use the default promise frappe.after_ajax


+ 1
- 1
frappe/public/js/frappe/utils/utils.js 查看文件

@@ -231,7 +231,7 @@ Object.assign(frappe.utils, {
if (tt && (tt.substr(0, 1)===">" || tt.substr(0, 4)===">")) { if (tt && (tt.substr(0, 1)===">" || tt.substr(0, 4)===">")) {
part.push(t); part.push(t);
} else { } else {
out.concat(part);
out = out.concat(part);
out.push(t); out.push(t);
part = []; part = [];
} }


+ 1
- 1
frappe/public/js/frappe/views/reports/report_view.js 查看文件

@@ -1026,7 +1026,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView {
} }
if (!docfield || docfield.report_hide) return; if (!docfield || docfield.report_hide) return;


let title = __(docfield ? docfield.label : toTitle(fieldname));
let title = __(docfield.label);
if (doctype !== this.doctype) { if (doctype !== this.doctype) {
title += ` (${__(doctype)})`; title += ` (${__(doctype)})`;
} }


+ 0
- 2
frappe/translate.py 查看文件

@@ -650,8 +650,6 @@ def extract_messages_from_code(code):
if isinstance(e, InvalidIncludePath): if isinstance(e, InvalidIncludePath):
frappe.clear_last_message() frappe.clear_last_message()


pass

messages = [] 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)*)*\)" 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)*)*\)"




+ 3
- 3
frappe/utils/backups.py 查看文件

@@ -15,7 +15,7 @@ import click


# imports - module imports # imports - module imports
import frappe 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 import get_file_size, get_url, now, now_datetime, cint
from frappe.utils.password import get_encryption_key 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""" 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 return recipient_list




@@ -779,7 +779,7 @@ if __name__ == "__main__":
db_type=db_type, db_type=db_type,
db_port=db_port, db_port=db_port,
) )
odb.send_email("abc.sql.gz")
odb.send_email()


if cmd == "delete_temp_backups": if cmd == "delete_temp_backups":
delete_temp_backups() delete_temp_backups()

+ 0
- 1
frappe/utils/nestedset.py 查看文件

@@ -227,7 +227,6 @@ class NestedSet(Document):
update_nsm(self) update_nsm(self)
except frappe.DoesNotExistError: except frappe.DoesNotExistError:
if self.flags.on_rollback: if self.flags.on_rollback:
pass
frappe.message_log.pop() frappe.message_log.pop()
else: else:
raise raise


正在加载...
取消
保存