From e24ab72c0d8cb568f28226f9490f8537fbefe6d6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 11:55:46 +0530 Subject: [PATCH] fix: copy project from first row to new rows (backport #53295) (#54620) fix: copy project to new item row from parent (cherry picked from commit 68cc5184975d0beb9786999e53c111da954544f4) Co-authored-by: ravibharathi656 --- .../purchase_invoice/purchase_invoice.js | 15 ++++++++------- .../doctype/sales_invoice/sales_invoice.js | 14 ++++++++------ .../doctype/purchase_order/purchase_order.js | 18 +++++++++++++----- .../selling/doctype/sales_order/sales_order.js | 18 ++++++++++++++++++ .../doctype/delivery_note/delivery_note.js | 9 +++++++++ .../purchase_receipt/purchase_receipt.js | 12 +++++++----- 6 files changed, 63 insertions(+), 23 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index e214d2f4416..ec7e56ad3dd 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -443,13 +443,14 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying. } items_add(doc, cdt, cdn) { - var row = frappe.get_doc(cdt, cdn); - this.frm.script_manager.copy_from_first_row("items", row, [ - "expense_account", - "discount_account", - "cost_center", - "project", - ]); + const row = frappe.get_doc(cdt, cdn); + const field_copy = ["expense_account", "discount_account", "cost_center"]; + if (doc.project) { + frappe.model.set_value(cdt, cdn, "project", doc.project); + } else { + field_copy.push("project"); + } + this.frm.script_manager.copy_from_first_row("items", row, field_copy); } on_submit() { diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 90c0da74f26..aa457f811f1 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -552,12 +552,14 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends ( } items_add(doc, cdt, cdn) { - var row = frappe.get_doc(cdt, cdn); - this.frm.script_manager.copy_from_first_row("items", row, [ - "income_account", - "discount_account", - "cost_center", - ]); + const row = frappe.get_doc(cdt, cdn); + const field_copy = ["income_account", "discount_account", "cost_center"]; + if (doc.project) { + frappe.model.set_value(cdt, cdn, "project", doc.project); + } else { + field_copy.push("project"); + } + this.frm.script_manager.copy_from_first_row("items", row, field_copy); } set_dynamic_labels() { diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index bda926b4040..78d9d34c940 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -660,12 +660,20 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends ( } items_add(doc, cdt, cdn) { - var row = frappe.get_doc(cdt, cdn); - if (doc.schedule_date) { - row.schedule_date = doc.schedule_date; - refresh_field("schedule_date", cdn, "items"); + const row = frappe.get_doc(cdt, cdn); + const field_copy = []; + if (doc.project) { + frappe.model.set_value(cdt, cdn, "project", doc.project); } else { - this.frm.script_manager.copy_from_first_row("items", row, ["schedule_date"]); + field_copy.push("project"); + } + if (doc.schedule_date) { + frappe.model.set_value(cdt, cdn, "schedule_date", doc.schedule_date); + } else { + field_copy.push("schedule_date"); + } + if (field_copy.length) { + this.frm.script_manager.copy_from_first_row("items", row, field_copy); } } diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index c557ea33d6f..b41f9885a61 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -1218,6 +1218,24 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex this.order_type(doc); } + items_add(doc, cdt, cdn) { + const row = frappe.get_doc(cdt, cdn); + const field_copy = []; + if (doc.project) { + frappe.model.set_value(cdt, cdn, "project", doc.project); + } else { + field_copy.push("project"); + } + if (doc.delivery_date) { + frappe.model.set_value(cdt, cdn, "delivery_date", doc.delivery_date); + } else { + field_copy.push("delivery_date"); + } + if (field_copy.length) { + this.frm.script_manager.copy_from_first_row("items", row, field_copy); + } + } + create_pick_list() { frappe.model.open_mapped_doc({ method: "erpnext.selling.doctype.sales_order.sales_order.create_pick_list", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index cdb219180ad..1b7f147f30c 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -372,6 +372,15 @@ erpnext.stock.DeliveryNoteController = class DeliveryNoteController extends ( }); } + items_add(doc, cdt, cdn) { + const row = frappe.get_doc(cdt, cdn); + if (doc.project) { + frappe.model.set_value(cdt, cdn, "project", doc.project); + } else { + this.frm.script_manager.copy_from_first_row("items", row, ["project"]); + } + } + make_sales_invoice() { frappe.model.open_mapped_doc({ method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index 65a8717047a..2fead68d5e4 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -368,11 +368,13 @@ erpnext.stock.PurchaseReceiptController = class PurchaseReceiptController extend items_add(doc, cdt, cdn) { const row = frappe.get_doc(cdt, cdn); - this.frm.script_manager.copy_from_first_row("items", row, [ - "expense_account", - "cost_center", - "project", - ]); + const field_copy = ["expense_account", "cost_center"]; + if (doc.project) { + frappe.model.set_value(cdt, cdn, "project", doc.project); + } else { + field_copy.push("project"); + } + this.frm.script_manager.copy_from_first_row("items", row, field_copy); } };