diff --git a/frappe/core/doctype/access_log/access_log.py b/frappe/core/doctype/access_log/access_log.py index 5a6b304e9e..b7127b3a44 100644 --- a/frappe/core/doctype/access_log/access_log.py +++ b/frappe/core/doctype/access_log/access_log.py @@ -76,6 +76,7 @@ def _make_access_log( if frappe.flags.read_only: access_log.deferred_insert() + return else: access_log.db_insert() diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index a01b414a0c..cf976fba00 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -191,12 +191,14 @@ frappe.ui.form.Layout = class Layout { replace_field(fieldname, df, render) { df.fieldname = fieldname; // change of fieldname is avoided if (this.fields_dict[fieldname] && this.fields_dict[fieldname].df) { - const fieldobj = this.init_field(df, render); - this.fields_dict[fieldname].$wrapper.remove(); - this.fields_list.splice(this.fields_dict[fieldname], 1, fieldobj); + const prev_fieldobj = this.fields_dict[fieldname]; + const fieldobj = this.init_field(df, prev_fieldobj.parent, render); + prev_fieldobj.$wrapper.replaceWith(fieldobj.$wrapper); + const idx = this.fields_list.findIndex((e) => e == prev_fieldobj); + this.fields_list.splice(idx, 1, fieldobj); this.fields_dict[fieldname] = fieldobj; - this.section.fields_list.splice(this.section.fields_dict[fieldname], 1, fieldobj); - this.section.fields_dict[fieldname] = fieldobj; + this.sections.forEach((section) => section.replace_field(fieldname, fieldobj)); + prev_fieldobj.tab?.replace_field(fieldobj); this.refresh_fields([df]); } } @@ -205,7 +207,8 @@ frappe.ui.form.Layout = class Layout { !this.section && this.make_section(); !this.column && this.make_column(); - const fieldobj = this.init_field(df, render); + const parent = this.column.form.get(0); + const fieldobj = this.init_field(df, parent, render); this.fields_list.push(fieldobj); this.fields_dict[df.fieldname] = fieldobj; @@ -217,11 +220,11 @@ frappe.ui.form.Layout = class Layout { } } - init_field(df, render = false) { + init_field(df, parent, render = false) { const fieldobj = frappe.ui.form.make_control({ df: df, doctype: this.doctype, - parent: this.column.form.get(0), + parent: parent, frm: this.frm, render_input: render, doc: this.doc, diff --git a/frappe/public/js/frappe/form/section.js b/frappe/public/js/frappe/form/section.js index 5acae84f46..28db1c16cf 100644 --- a/frappe/public/js/frappe/form/section.js +++ b/frappe/public/js/frappe/form/section.js @@ -82,6 +82,16 @@ export default class Section { } } + replace_field(fieldname, fieldobj) { + if (this.fields_dict[fieldname]?.df) { + const olfldobj = this.fields_dict[fieldname]; + const idx = this.fields_list.findIndex((e) => e == olfldobj); + this.fields_list.splice(idx, 1, fieldobj); + this.fields_dict[fieldname] = fieldobj; + fieldobj.section = this; + } + } + add_field(fieldobj) { this.fields_list.push(fieldobj); this.fields_dict[fieldobj.df.fieldname] = fieldobj; diff --git a/frappe/public/js/frappe/form/tab.js b/frappe/public/js/frappe/form/tab.js index 7ededcdd28..c81985b13a 100644 --- a/frappe/public/js/frappe/form/tab.js +++ b/frappe/public/js/frappe/form/tab.js @@ -76,6 +76,9 @@ export default class Tab { add_field(fieldobj) { fieldobj.tab = this; } + replace_field(fieldobj) { + fieldobj.tab = this; + } set_active() { this.tab_link.find(".nav-link").tab("show");