From 74c4ca68e565d308c8dbddaf3320c38be3e8529b Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Wed, 16 Jul 2025 14:46:37 +0530 Subject: [PATCH 01/10] feat: consider process less when calculating pending qty in work order --- .../doctype/work_order/work_order.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index 5eef9217bbb..d03633d2c76 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -444,7 +444,7 @@ frappe.ui.form.on("Work Order", { frm.doc.material_transferred_for_manufacturing - frm.doc.produced_qty - frm.doc.process_loss_qty; - if (pending_complete) { + if (pending_complete > 0) { var width = (pending_complete / frm.doc.qty) * 100 - added_min; title = __("{0} items in progress", [pending_complete]); bars.push({ @@ -896,6 +896,19 @@ erpnext.work_order = { description: __("Max: {0}", [max]), default: max, }, + { + fieldtype: "Check", + label: __("Consider Process Loss"), + fieldname: "consider_process_loss", + default: 0, + onchange: function () { + if (this.value) { + frm.qty_prompt.set_value("qty", max - frm.doc.process_loss_qty); + } else { + frm.qty_prompt.set_value("qty", max); + } + }, + }, ]; if (purpose === "Disassemble") { @@ -917,7 +930,7 @@ erpnext.work_order = { } return new Promise((resolve, reject) => { - frappe.prompt( + frm.qty_prompt = frappe.prompt( fields, (data) => { max += (frm.doc.qty * (frm.doc.__onload.overproduction_percentage || 0.0)) / 100; From 2b87de10002377e076cc269f023e007eec786c0d Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Thu, 17 Jul 2025 17:23:19 +0530 Subject: [PATCH 02/10] fix: pos invoice fetch commission_rate from sales_partner doctype on empty --- erpnext/accounts/doctype/pos_invoice/pos_invoice.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json index 5750d51fdff..d7e22aa6351 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json @@ -1416,6 +1416,8 @@ "width": "50%" }, { + "fetch_from": "sales_partner.commission_rate", + "fetch_if_empty": 1, "fieldname": "commission_rate", "fieldtype": "Float", "label": "Commission Rate (%)", @@ -1573,7 +1575,7 @@ "icon": "fa fa-file-text", "is_submittable": 1, "links": [], - "modified": "2025-06-24 12:13:28.242649", + "modified": "2025-07-17 16:51:40.886083", "modified_by": "Administrator", "module": "Accounts", "name": "POS Invoice", From 2245731fc8265664e3ba044bbaa6ee65524d1ce9 Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Thu, 17 Jul 2025 17:27:18 +0530 Subject: [PATCH 03/10] fix: prepare sales partner commission report from pos invoice and sales invoice --- .../sales_partners_commission.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json b/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json index 9dd4e437f7f..00928ceb35f 100644 --- a/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json +++ b/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json @@ -1,21 +1,22 @@ { "add_total_row": 0, + "add_translate_data": 0, "columns": [], "creation": "2013-05-06 12:28:23", - "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, "doctype": "Report", "filters": [], - "idx": 3, + "idx": 6, "is_standard": "Yes", - "modified": "2021-10-06 06:26:07.881340", + "letterhead": null, + "modified": "2025-07-17 16:47:20.596297", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Partners Commission", "owner": "Administrator", "prepared_report": 0, - "query": "SELECT\n sales_partner as \"Sales Partner:Link/Sales Partner:220\",\n\tsum(base_net_total) as \"Invoiced Amount (Excl. Tax):Currency:220\",\n\tsum(amount_eligible_for_commission) as \"Amount Eligible for Commission:Currency:220\",\n\tsum(total_commission) as \"Total Commission:Currency:170\",\n\tsum(total_commission)*100/sum(amount_eligible_for_commission) as \"Average Commission Rate:Percent:220\"\nFROM\n\t`tabSales Invoice`\nWHERE\n\tdocstatus = 1 and ifnull(base_net_total, 0) > 0 and ifnull(total_commission, 0) > 0\nGROUP BY\n\tsales_partner\nORDER BY\n\t\"Total Commission:Currency:120\"", + "query": "SELECT\n sales_partner as \"Sales Partner:Link / Sales Partner:220\",\n sum(base_net_total) as \"Invoiced Amount (Excl. Tax):Currency:220\",\n sum(amount_eligible_for_commission) as \"Amount Eligible for Commission:Currency:220\",\n sum(total_commission) as \"Total Commission:Currency:170\",\n sum(total_commission)*100 / sum(amount_eligible_for_commission) as \"Average Commission Rate:Percent:220\"\nFROM\n (\n SELECT\n sales_partner,\n base_net_total,\n total_commission,\n amount_eligible_for_commission\n FROM\n `tabSales Invoice` \n WHERE\n docstatus = 1\n AND NOT (is_consolidated = 1 AND is_created_using_pos = 0)\n AND IFNULL(base_net_total, 0) > 0\n AND IFNULL(total_commission, 0) > 0\n\n UNION ALL\n\n SELECT\n sales_partner,\n base_net_total,\n total_commission,\n amount_eligible_for_commission\n FROM\n `tabPOS Invoice`\n WHERE\n docstatus = 1\n AND IFNULL(base_net_total, 0) > 0\n AND IFNULL(total_commission, 0) > 0\n ) AS sub\nGROUP BY\n sales_partner\nORDER BY\n \"Total Commission:Currency:120\"", "ref_doctype": "Sales Invoice", "report_name": "Sales Partners Commission", "report_type": "Query Report", @@ -26,5 +27,6 @@ { "role": "Accounts User" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} From 4fb1202c309253fc69cfd66ec1591805c560e3fa Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Thu, 17 Jul 2025 17:45:37 +0530 Subject: [PATCH 04/10] fix: added POS Invoice option on sales partner related reports --- .../sales_partner_commission_summary.js | 2 +- .../sales_partner_target_variance_based_on_item_group.js | 2 +- .../sales_partner_transaction_summary.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js index 4a1ebabbccf..1150de86b80 100644 --- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js +++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js @@ -13,7 +13,7 @@ frappe.query_reports["Sales Partner Commission Summary"] = { fieldname: "doctype", label: __("Document Type"), fieldtype: "Select", - options: "Sales Order\nDelivery Note\nSales Invoice", + options: "Sales Order\nDelivery Note\nSales Invoice\nPOS Invoice", default: "Sales Order", }, { diff --git a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js index 6809b38c7ed..8373e886ce5 100644 --- a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js +++ b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js @@ -21,7 +21,7 @@ frappe.query_reports["Sales Partner Target Variance based on Item Group"] = { fieldname: "doctype", label: __("Document Type"), fieldtype: "Select", - options: "Sales Order\nDelivery Note\nSales Invoice", + options: "Sales Order\nDelivery Note\nSales Invoice\nPOS Invoice", default: "Sales Order", }, { diff --git a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js index b7bca8ae5fa..f6f7c3f3cf3 100644 --- a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js +++ b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js @@ -13,7 +13,7 @@ frappe.query_reports["Sales Partner Transaction Summary"] = { fieldname: "doctype", label: __("Document Type"), fieldtype: "Select", - options: "Sales Order\nDelivery Note\nSales Invoice", + options: "Sales Order\nDelivery Note\nSales Invoice\nPOS Invoice", default: "Sales Order", }, { From e70416c78cc4eeb3007ce79d28fda96be17bcd43 Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Thu, 17 Jul 2025 17:47:03 +0530 Subject: [PATCH 05/10] fix: fixed the query for sales invoice in sale partner related reports --- .../sales_partner_commission_summary.py | 3 +++ .../item_group_wise_sales_target_variance.py | 3 +++ .../sales_partner_transaction_summary.py | 3 +++ 3 files changed, 9 insertions(+) diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py index 844aa86b52e..a314c9054de 100644 --- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py +++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py @@ -106,4 +106,7 @@ def get_conditions(filters, date_field): if filters.get("to_date"): conditions += f" and {date_field} <= %(to_date)s" + if filters.get("doctype") == "Sales Invoice": + conditions += " and not (is_consolidated = 1 and is_created_using_pos = 0)" + return conditions diff --git a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py index b837d67e1c0..53c297aaea9 100644 --- a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py +++ b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py @@ -248,6 +248,9 @@ def get_actual_data(filters, sales_users_or_territory_data, date_field, sales_fi net_amount = child_doc.base_net_amount sales_field_col = parent_doc[sales_field] + if filters.get("doctype") == "Sales Invoice": + query = query.where(~((parent_doc.is_consolidated == 0) & (parent_doc.is_created_using_pos == 1))) + query = query.select( child_doc.item_group, parent_doc[date_field], diff --git a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py index 216adde18fd..5e62a72db36 100644 --- a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py +++ b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py @@ -137,6 +137,9 @@ def get_conditions(filters, date_field): if filters.get("brand"): conditions += " and dt_item.brand = %(brand)s" + if filters.get("doctype") == "Sales Invoice": + conditions += " and not (is_consolidated = 1 and is_created_using_pos = 0)" + if filters.get("item_group"): lft, rgt = frappe.get_cached_value("Item Group", filters.get("item_group"), ["lft", "rgt"]) From 84b9a2aefb860221d6510ba46d57ae4196e94c03 Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Thu, 17 Jul 2025 18:09:11 +0530 Subject: [PATCH 06/10] fix: unset commission and sales partner on consolidated sales invoice --- .../doctype/pos_invoice_merge_log/pos_invoice_merge_log.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py index 74c6845755e..96136a74f37 100644 --- a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py +++ b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py @@ -338,6 +338,11 @@ class POSInvoiceMergeLog(Document): invoice.flags.ignore_pos_profile = True invoice.pos_profile = "" + # Unset Commission Section + invoice.set("sales_partner", None) + invoice.set("commission_rate", 0) + invoice.set("total_commission", 0) + return invoice def get_new_sales_invoice(self): From 9dc583ffcb5b60506ed0f6da3ec3ad97babe3f87 Mon Sep 17 00:00:00 2001 From: Diptanil Saha Date: Fri, 18 Jul 2025 00:30:04 +0530 Subject: [PATCH 07/10] fix: remove incorrect report conditions and unset sales partner on consolidated sales invoice (#48669) * fix: undo query changes for sales partner related reports * fix: patch to remove sales partner from consolidated sales invoice --- .../sales_partners_commission.json | 4 ++-- erpnext/patches.txt | 3 ++- ...partner_from_consolidated_sales_invoice.py | 19 +++++++++++++++++++ .../sales_partner_commission_summary.py | 3 --- .../item_group_wise_sales_target_variance.py | 3 --- .../sales_partner_transaction_summary.py | 3 --- 6 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 erpnext/patches/v15_0/remove_sales_partner_from_consolidated_sales_invoice.py diff --git a/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json b/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json index 00928ceb35f..9a1131e069b 100644 --- a/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json +++ b/erpnext/accounts/report/sales_partners_commission/sales_partners_commission.json @@ -10,13 +10,13 @@ "idx": 6, "is_standard": "Yes", "letterhead": null, - "modified": "2025-07-17 16:47:20.596297", + "modified": "2025-07-17 23:16:19.892044", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Partners Commission", "owner": "Administrator", "prepared_report": 0, - "query": "SELECT\n sales_partner as \"Sales Partner:Link / Sales Partner:220\",\n sum(base_net_total) as \"Invoiced Amount (Excl. Tax):Currency:220\",\n sum(amount_eligible_for_commission) as \"Amount Eligible for Commission:Currency:220\",\n sum(total_commission) as \"Total Commission:Currency:170\",\n sum(total_commission)*100 / sum(amount_eligible_for_commission) as \"Average Commission Rate:Percent:220\"\nFROM\n (\n SELECT\n sales_partner,\n base_net_total,\n total_commission,\n amount_eligible_for_commission\n FROM\n `tabSales Invoice` \n WHERE\n docstatus = 1\n AND NOT (is_consolidated = 1 AND is_created_using_pos = 0)\n AND IFNULL(base_net_total, 0) > 0\n AND IFNULL(total_commission, 0) > 0\n\n UNION ALL\n\n SELECT\n sales_partner,\n base_net_total,\n total_commission,\n amount_eligible_for_commission\n FROM\n `tabPOS Invoice`\n WHERE\n docstatus = 1\n AND IFNULL(base_net_total, 0) > 0\n AND IFNULL(total_commission, 0) > 0\n ) AS sub\nGROUP BY\n sales_partner\nORDER BY\n \"Total Commission:Currency:120\"", + "query": "SELECT\n sales_partner as \"Sales Partner:Link / Sales Partner:220\",\n sum(base_net_total) as \"Invoiced Amount (Excl. Tax):Currency:220\",\n sum(amount_eligible_for_commission) as \"Amount Eligible for Commission:Currency:220\",\n sum(total_commission) as \"Total Commission:Currency:170\",\n sum(total_commission)*100 / sum(amount_eligible_for_commission) as \"Average Commission Rate:Percent:220\"\nFROM\n (\n SELECT\n sales_partner,\n base_net_total,\n total_commission,\n amount_eligible_for_commission\n FROM\n `tabSales Invoice` \n WHERE\n docstatus = 1\n AND IFNULL(base_net_total, 0) > 0\n AND IFNULL(total_commission, 0) > 0\n\n UNION ALL\n\n SELECT\n sales_partner,\n base_net_total,\n total_commission,\n amount_eligible_for_commission\n FROM\n `tabPOS Invoice`\n WHERE\n docstatus = 1\n AND IFNULL(base_net_total, 0) > 0\n AND IFNULL(total_commission, 0) > 0\n ) AS sub\nGROUP BY\n sales_partner\nORDER BY\n \"Total Commission:Currency:120\"", "ref_doctype": "Sales Invoice", "report_name": "Sales Partners Commission", "report_type": "Query Report", diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 2eab5d3fa65..c587a83fe91 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -425,4 +425,5 @@ erpnext.patches.v15_0.rename_pos_closing_entry_fields #2025-06-13 erpnext.patches.v15_0.update_pegged_currencies erpnext.patches.v15_0.set_status_cancelled_on_cancelled_pos_opening_entry_and_pos_closing_entry erpnext.patches.v15_0.set_company_on_pos_inv_merge_log -erpnext.patches.v15_0.rename_price_list_to_buying_price_list \ No newline at end of file +erpnext.patches.v15_0.rename_price_list_to_buying_price_list +erpnext.patches.v15_0.remove_sales_partner_from_consolidated_sales_invoice diff --git a/erpnext/patches/v15_0/remove_sales_partner_from_consolidated_sales_invoice.py b/erpnext/patches/v15_0/remove_sales_partner_from_consolidated_sales_invoice.py new file mode 100644 index 00000000000..ac1daeef44d --- /dev/null +++ b/erpnext/patches/v15_0/remove_sales_partner_from_consolidated_sales_invoice.py @@ -0,0 +1,19 @@ +import frappe + + +def execute(): + SalesInvoice = frappe.qb.DocType("Sales Invoice") + + query = ( + frappe.qb.update(SalesInvoice) + .set(SalesInvoice.sales_partner, "") + .set(SalesInvoice.commission_rate, 0) + .set(SalesInvoice.total_commission, 0) + .where(SalesInvoice.is_consolidated == 1) + ) + + # For develop/version-16 + if frappe.db.has_column("Sales Invoice", "is_created_using_pos"): + query = query.where(SalesInvoice.is_created_using_pos == 0) + + query.run() diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py index a314c9054de..844aa86b52e 100644 --- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py +++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py @@ -106,7 +106,4 @@ def get_conditions(filters, date_field): if filters.get("to_date"): conditions += f" and {date_field} <= %(to_date)s" - if filters.get("doctype") == "Sales Invoice": - conditions += " and not (is_consolidated = 1 and is_created_using_pos = 0)" - return conditions diff --git a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py index 53c297aaea9..b837d67e1c0 100644 --- a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py +++ b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py @@ -248,9 +248,6 @@ def get_actual_data(filters, sales_users_or_territory_data, date_field, sales_fi net_amount = child_doc.base_net_amount sales_field_col = parent_doc[sales_field] - if filters.get("doctype") == "Sales Invoice": - query = query.where(~((parent_doc.is_consolidated == 0) & (parent_doc.is_created_using_pos == 1))) - query = query.select( child_doc.item_group, parent_doc[date_field], diff --git a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py index 5e62a72db36..216adde18fd 100644 --- a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py +++ b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py @@ -137,9 +137,6 @@ def get_conditions(filters, date_field): if filters.get("brand"): conditions += " and dt_item.brand = %(brand)s" - if filters.get("doctype") == "Sales Invoice": - conditions += " and not (is_consolidated = 1 and is_created_using_pos = 0)" - if filters.get("item_group"): lft, rgt = frappe.get_cached_value("Item Group", filters.get("item_group"), ["lft", "rgt"]) From 98eb115746a845af826f0858221f99d8688c48be Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Fri, 18 Jul 2025 15:28:57 +0530 Subject: [PATCH 08/10] fix: view ledger button of company on chart of accounts --- erpnext/accounts/doctype/account/account_tree.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js index 9ee1c62b8c0..4307b678f0f 100644 --- a/erpnext/accounts/doctype/account/account_tree.js +++ b/erpnext/accounts/doctype/account/account_tree.js @@ -275,12 +275,14 @@ frappe.treeview_settings["Account"] = { label: __("View Ledger"), click: function (node, btn) { frappe.route_options = { - account: node.label, from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1], to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2], company: frappe.treeview_settings["Account"].treeview.page.fields_dict.company.get_value(), }; + if (node.parent_label) { + frappe.route_options["account"] = node.label; + } frappe.set_route("query-report", "General Ledger"); }, btnClass: "hidden-xs", From dd23d4c81b7d1eb6988128619b871a0a4cccdf19 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Thu, 17 Jul 2025 14:35:06 +0530 Subject: [PATCH 09/10] feat: option to recalculate costing and billing fields in project --- erpnext/projects/doctype/project/project.js | 12 ++++++------ erpnext/projects/doctype/project/project.py | 13 ++++--------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js index 449a9d87ff2..1012b093107 100644 --- a/erpnext/projects/doctype/project/project.js +++ b/erpnext/projects/doctype/project/project.js @@ -88,9 +88,9 @@ frappe.ui.form.on("Project", { ); frm.add_custom_button( - __("Update Total Purchase Cost"), + __("Recalculate Costing and Billing"), () => { - frm.events.update_total_purchase_cost(frm); + frm.events.recalculate_costing_and_billing(frm); }, __("Actions") ); @@ -129,15 +129,15 @@ frappe.ui.form.on("Project", { } }, - update_total_purchase_cost: function (frm) { + recalculate_costing_and_billing: function (frm) { frappe.call({ - method: "erpnext.projects.doctype.project.project.recalculate_project_total_purchase_cost", + method: "erpnext.projects.doctype.project.project.recalculate_costing_and_billing", args: { project: frm.doc.name }, freeze: true, - freeze_message: __("Recalculating Purchase Cost against this Project..."), + freeze_message: __("Recalculating Costing and Billing fields against this Project..."), callback: function (r) { if (r && !r.exc) { - frappe.msgprint(__("Total Purchase Cost has been updated")); + frappe.msgprint(__("Costing and Billing fields has been updated")); frm.refresh(); } }, diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index eeed3b4331d..f8861abac4b 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -749,12 +749,7 @@ def calculate_total_purchase_cost(project: str | None = None): @frappe.whitelist() -def recalculate_project_total_purchase_cost(project: str | None = None): - if project: - total_purchase_cost = calculate_total_purchase_cost(project) - frappe.db.set_value( - "Project", - project, - "total_purchase_cost", - (total_purchase_cost and total_purchase_cost[0][0] or 0), - ) +def recalculate_costing_and_billing(project: str | None = None): + project = frappe.get_doc("Project", project) + project.update_costing() + project.db_update() From f6e16c118081955127bb7d7548e968f9d3d89145 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Fri, 18 Jul 2025 16:06:14 +0530 Subject: [PATCH 10/10] chore: rename recalculating to updating --- erpnext/projects/doctype/project/project.js | 10 +++++----- erpnext/projects/doctype/project/project.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js index 1012b093107..4d4c4ece745 100644 --- a/erpnext/projects/doctype/project/project.js +++ b/erpnext/projects/doctype/project/project.js @@ -88,9 +88,9 @@ frappe.ui.form.on("Project", { ); frm.add_custom_button( - __("Recalculate Costing and Billing"), + __("Update Costing and Billing"), () => { - frm.events.recalculate_costing_and_billing(frm); + frm.events.update_costing_and_billing(frm); }, __("Actions") ); @@ -129,12 +129,12 @@ frappe.ui.form.on("Project", { } }, - recalculate_costing_and_billing: function (frm) { + update_costing_and_billing: function (frm) { frappe.call({ - method: "erpnext.projects.doctype.project.project.recalculate_costing_and_billing", + method: "erpnext.projects.doctype.project.project.update_costing_and_billing", args: { project: frm.doc.name }, freeze: true, - freeze_message: __("Recalculating Costing and Billing fields against this Project..."), + freeze_message: __("Updating Costing and Billing fields against this Project..."), callback: function (r) { if (r && !r.exc) { frappe.msgprint(__("Costing and Billing fields has been updated")); diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index f8861abac4b..d377281f0ba 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -749,7 +749,7 @@ def calculate_total_purchase_cost(project: str | None = None): @frappe.whitelist() -def recalculate_costing_and_billing(project: str | None = None): +def update_costing_and_billing(project: str | None = None): project = frappe.get_doc("Project", project) project.update_costing() project.db_update()