From a6c9b23471feb5a6327ce3f8748c6a97e1e080db Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Sun, 20 Mar 2022 02:05:02 +0100 Subject: [PATCH 1/4] refactor: use local method refresh_field --- frappe/public/js/frappe/form/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 7ec6677c7f..2e33e5c8ac 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1707,7 +1707,7 @@ frappe.ui.form.Form = class FrappeForm { for(var i = 0; i < cl.length; i++){ if(!cl[i][fieldname]) cl[i][fieldname] = value; } - refresh_field("items"); + this.refresh_field("items"); } get_sum(table_fieldname, fieldname) { From 2718685368f89cbc62c0d56a53806e1f613fd53c Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Sun, 20 Mar 2022 17:37:42 +0100 Subject: [PATCH 2/4] refactor: update_in_all_rows --- frappe/public/js/frappe/form/form.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 2e33e5c8ac..2c7a1e3543 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1701,13 +1701,17 @@ frappe.ui.form.Form = class FrappeForm { } update_in_all_rows(table_fieldname, fieldname, value) { - // update the child value in all tables where it is missing - if(!value) return; - var cl = this.doc[table_fieldname] || []; - for(var i = 0; i < cl.length; i++){ - if(!cl[i][fieldname]) cl[i][fieldname] = value; - } - this.refresh_field("items"); + // Update the `value` of the field named `fieldname` in all rows of the + // child table named `table_fieldname`. + // Do not overwrite existing values. + if (!value) return; + + frappe.model + .get_children(this.doc, table_fieldname) + .filter(child => !child[fieldname]) + .forEach(child => + frappe.model.set_value(child.doctype, child.name, fieldname, value) + ); } get_sum(table_fieldname, fieldname) { From 12f69fb39996e10a3c8c264ba3ec3c4f0cfa386d Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Mon, 21 Mar 2022 13:15:37 +0100 Subject: [PATCH 3/4] fix: allow falsy values Co-authored-by: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> --- frappe/public/js/frappe/form/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 2c7a1e3543..46054dd91b 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1704,7 +1704,7 @@ frappe.ui.form.Form = class FrappeForm { // Update the `value` of the field named `fieldname` in all rows of the // child table named `table_fieldname`. // Do not overwrite existing values. - if (!value) return; + if (value === undefined) return; frappe.model .get_children(this.doc, table_fieldname) From 118d9286289f51447e2c812b8382bd3c201a8e26 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Tue, 22 Mar 2022 16:26:46 +0100 Subject: [PATCH 4/4] refactor: use frappe.model.has_value to determine if field is empty --- frappe/public/js/frappe/form/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 46054dd91b..6191e35073 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1708,7 +1708,7 @@ frappe.ui.form.Form = class FrappeForm { frappe.model .get_children(this.doc, table_fieldname) - .filter(child => !child[fieldname]) + .filter(child => !frappe.model.has_value(child.doctype, child.name, fieldname)) .forEach(child => frappe.model.set_value(child.doctype, child.name, fieldname, value) );